Wstęp
Spośród oprogramowania używanego wsród entuzjastów VLF warto zauważyć vlfrx-tools autorstwa Paula Nicholsona. Poprzednie artykuły KLUBNL.PL pokazywały sprzęt służący od odbioru:
Sprzęt do monitorowania VLF za pomocą vlfrx-tools
Tak jak już wcześniej pisałem, opis ten nie ma być instrukcją użycia vlfrx-tools (ponieważ już taka istnieje), ani systemów unix/linux (ponieważ już takie istnieją), a raczej opisem szczególnego typu instalacji. Do próbkowania użyta została karta dźwiękowa zewnętrzna Creative EMU-0204, częstotliwość próbkowania jest kalibrowana za pomocą sygnału 1PPS z odbiornika GPS.
Instalacja VLFRX-TOOLS i EBNAUT
Oprogramowanie vlfrx-tools jest dostępne pod adresem:
http://abelian.org/vlfrx-tools/ (aktualna wersja to 0.7p)
Przed instalacją należy się zapoznać z instrukcją do vlfrx-tools.
Instalacja wykonana została na systemie Debian GNU/Linux 8 64-bitowym. W odróżnieniu od orginalnej instrukcji zainstalujemy oprogramowanie w katalogu /opt/vlfrx :
apt-get update apt-get upgrade #aby mieć aktualny system apt-get install build-essential apt-get install libasound2-dev libvorbis-dev libflac-dev libx11-dev libpng12-dev libxpm-dev libncurses5-dev libforms2 libforms-dev libshout3-dev libsamplerate0-dev libfftw3-dev sox gnuplot mkdir -p /opt/vlfrx/bin #ściągamy program ebnaut wget http://abelian.org/ebnaut/ebnaut.c gcc -std=gnu99 -Wall -O3 -lpthread -lm -mtune=native -march=native -mcpu=native ebnaut.c -o /opt/vlfrx/bin/ebnaut #ściągamy i rozpakowujemy ze strony projektu archiwum .tar.gz z kodem źródłowym oprogramowania #uwaga: należy użyć najnowszej wersji oprogramowania ze strony http://abelian.org/vlfrx-tools/ #obecnie jest to 0.7p wget http://abelian.org/vlfrx-tools/vlfrx-tools-0.7p.tgz tar xzf http://abelian.org/vlfrx-tools/vlfrx-tools-0.7p.tgz cd vlfrx-tools-0.7p ./configure --prefix=/opt/vlfrx make make install
Instalację w katalogu /opt/vlfrx wykonujemy dlatego aby wszystkie pliki od vlfrx-tools były w jednym miejscu.
Podstawowa Rejestracja widma za pomoca vlfrx-tools
Oprogramowanie vlfrx-tools napisane jest zgodnie z filozofią unix-a: składa się ono z wielu programów, z których każdy realizuje tylko jedną funkcję, użytkownik sam ma sobie połączyć te programy w taką funkcjonalność jaka jest mu potrzebna. Połączenia pomiędzy programami mogą być wykonane klasycznie za pomocą potoków, ale również za pomocą buforów które mogą być wspólne dla wielu programów. Warto przeczytać pełen opis przekazywania danych przez vlfrx-tools.
Dla uproszczenia będziemy uruchamiać oprogramowanie jako root (bardziej eleganckim rozwiązaniem byłoby stworzenie nieuprzywilejowanego użytkownika któty miałby dostęp do karty dźwiękowej). W przypadku karty EMU-0204 podłączonej po USB dla podsystemu ALSA karta w moim laptopie jest widziana jako hw:1,0 (hw:0,0 to wewnętrzna karta dźwiękowa w laptopie). Karta EMU-0204 umożliwia tylko próbkowanie z rozdzielczością 24-bitową (inne karty umożliwiają rozdzielczość 8 i 16-bitową, ustawia sie to parametrem -b).
Zgodnie z opisem z artykułu Sprzęt do monitorowania VLF za pomocą vlfrx-tools na kanał L karty podawany jest sygnał 1PPS, a na kanał R karty sygnał z anteny na pasmo VLF.
Próbki z karty dźwiękowej będziemy umieszczać w buforze @rawch1:
/opt/vlfrx/bin/vtcard -vv -A b=262144,p=2048 -r 48000 -d hw:1,0 -b24 @rawch1
Warto zapoznać się z dokumentacją autora dotyczącą znakowania strumienia danych za pomocą sygnału 1PPS.
Przyjżymy się sygnałowi 1PPS w buforze @rawch1. Najprościej użyć do tego oprogramowania vtscope z vlfrx-tools:
/opt/vlfrx/bin/vtscope @rawch1
Rys 1. Sygnał z karty dźwiękowej sygnał 1PPS jest na kanale pierwszym
Sygnał powinien wyglądać podobnie do Rys 1. Proszę zwrócić uwagę na ustawienie Resolution, Trig Level, Pre-trig, znaczenie jest podobne jak w oscyloskopie. Poziom sygnału 1PPS regulujemy za pomocą potencjometru L w karcie EMU-0204, powinien mieć on amplitudę około 80% rodzielczości przetwornika.
Użyjemy programu vttime do resamplowania sygnału tak, aby miał od dokładnie częstotliwość próbkowania taką jak deklarowana przez strumień wejściowy (w tym wypadku będzie to 48kHz). Jako wejście posłuży nam sygnał z bufora @rawch1, sygnał wyjściowy (po korekcji) umieszczony będzie w nowym buforze @output1. Do korekcji użyjemy kanału 1 (parametr -c1), zastosujemy korekcję na narastającym zboczu impulsu (parametr ppsbase+), szerokość impulsu to około 1.5ms (parametr w), a odległość pomiędzy początkiem każdej sekundy i środkiem impulsu używana do kalibracji około 100ms (parametr c).
/opt/vlfrx/bin/vttime -v -c1 -m ppsbase+,c=0.001,w=0.0015 @rawch1 @output1
Bufor @output1 zawiera sygnał już resamplowany do dokładnie 48000 próbek/s.
Sygnał z kanału 2 (2 to kanał R – sygnał z anteny VLF, 1 to kanał L – sygnał 1PPS z gps) wyodrębnimy za pomocą programu vtcat przekierujemy go do programu vtwrite aby zapisać go na dysk (parametr i4: próbki zapisane jaki 4-bajtowa wartość, w przypadku jeśli źródło ma rozdzielczość 16 bitów lepiej jest użyć opcji i2). Dane będziemy zapisywać w katalogu /mnt/rawvlf , będziemy tworzyć nowy plik co 3h (10800 sekund):
/opt/vlfrx/bin/vtcat @output1:2 -- -,i4 | /opt/vlfrx/bin/vtwrite -v -G 10800 /mnt/rawvlf/
Uwaga: pliki w katalogu /mnt/rawvlf będą przyrastać, aby uniknąć wyczerpania miejsca na dysku należy usuwać najstarsze pliki (albo ręcznie albo można to zautomatyzować skryptem). Katalog /mnt/rawvlf należy zmienić na taki w którym mamy dużo wolnego miejsca.
Wykorzystanie danych zarejestrowanych przez vlfrx-tools
Mając zarejestrowane widmo możemy wykonać jego analizę. Poniższe przykłady zawierają analizę
Szybki spektrogram VLF:
/opt/vlfrx/bin/vtcat -E20 @output1:2 | /opt/vlfrx/bin/vtsgram -p100 > /tmp/out.png
Plik /tmp/out.png zawiera spektrogram z 20 sekund z rozdzielczością 100 pixeli/sekundę.
Wąskopasmowa analiza sygnałów VLF za pomocą prstego skryptu gen.sh:
#!/bin/bash # simple vlfrx-tools spectrum graph script --sq5bpf export PATH=$PATH:/opt/vlfrx/bin gen() { TI="$1" PL=`echo "$TI"|tr :,+- ____` #vtcat -v -v -p -T$TI | vtread -T$TI /mnt/rawvlf/ | \ vtfilter -h bp,f=${F},w=3000 | \ vtblank -a2 -d0 -t10 | \ vtnspec -f ${F} -w0.040 -r46.3e-6 > ${PL}.dat echo "set terminal png small set output \"${PL}.png\" set style data lines set xlabel 'Frequency - ${F}' set ylabel 'Relative amplitude' unset title plot \"${PL}.dat\" using (\$1 - ${F}):4 " | gnuplot } #zmienić na analizowaną częstotliwość F=8270 #proszę zamieścić czasy w formacie ROK-MIESIAC-DZIEN_GODZINA:MINUTA:SEKUNDA,+CZAS #w następnej linijce for i in 2017-01-27_20:00:00,+6h 2017-01-27_23:00:00,+6h do echo -n "$i start: `date`" gen $i echo " end:`date`" done
Skrypt najlepiej jest uruchomić tak aby nie konkurował z innymi programami o dostęp do dysku za pomocą narzędzia ionice:
ionice -c Idle ./gen.sh
Skrypt generuje takie wykresy:
Odbiór transmisji Ebnaut
Aby odebrać transmisję należy wybrać interesujący nas odcinek widma, oraz przekazac go do programu ebanut. Skrypt ten filtruje odcinek 3000Hz w okolicy odbieranej częstotliwosci, uruchamia na nim noiseblanker (ogranicznik trzasków), oraz przekształca go do strumienia o częstotliwości próbkowania 240próbek/s. Strumień ten jest zapisywany w pliku wskazanym przez zmienną $PLIK. Plik ten jest dalej dekodowany przez program ebanut. Do prawidłowego działania skryptu trzeba przynajmniej zmienić parametr TT (okres czasy kiedy ma być wykonanaa analiza), FREQ (częstotliwość sygnału w Hz), oraz PLIK (nazwa pliku wynikowego), oraz parametry wywołania programu ebnaut. Wyjście odbiornika jest zapisywane do pliku, ponieważ ułatwia to dalsze eksperymenty z różnymi ustawieniami dekodera.
#!/bin/bash export PATH=$PATH:/opt/vlfrx/bin TT=2017-03-11_22:00:00,+30720 FREQ=8270.0333333 PLIK=plik_df6nm_20170311_2 renice -n 10 -p $$ vtread -T$TT /mnt/rawvlf | vtcat -p -T$TT | vtfilter -h bp,f=${FREQ},w=3000 | vtblank -v -a2 -d0 -t10 | vtmult -f ${FREQ} | vtresample -r 240 > $PLIK vtraw -oa < $PLIK | ebnaut -d -N5 -p 8K19A -S60 -k 16 -r240 -c2 -PS -v
Przykładowy wynik działania dekodera (w tym wypadku wiadomośc to "DF6NM"):
padded 0.267 seconds at end
initial reference phase 46.9 amplitude 9.668e-02
prep [ 0 0 0 0 0]
found rank 1251 ber 3.8281e-01 Eb/N0 -1.0 M -1.514229536e+00 [N;:4J] ps [ 0 0 0 0 0]
carrier phase: 5.5
carrier Eb/N0: -0.0
carrier S/N: 14.54 dB in 32.6 uHz
elapsed 23
prep [ 1 180 180 180 180]
found rank 0 ber 3.3984e-01 Eb/N0 1.9 M -2.094666243e+00 [DF6NM] ps [ 1 180 180 180 180]
carrier phase: 8.2
carrier Eb/N0: 2.9
carrier S/N: 17.41 dB in 32.6 uHz
elapsed 24
Autor: Jacek / SQ5BPF