Używanie vlfrx-tools

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:

Proste źródło sygnału 1PPS

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