3 lipca 2017 roku Stefan DK7FC nadał 7-godzinną transmisję ebnaut zawierającą 7 znaków. Poprzednio byłem w stanie zdekodować2-3 znakowe transmisje wysłane w podobnym czasie, więc 7 znaków wydawało się być nie do odebrania. Artykuł pokazuje w jaki sposób ta transmisja została jednak zdekodowana i może być ciekawym przewodnikiem dla osób które zaczynają uzywać linuxa i/lub vlfrx-tools.
Transmisja miała takie parametry:
f = 6470.100000 Hz Start time: 03.Jun.2017 3:00:00 UTC Symbol period: 24 s Characters: 7 CRC bits: 5 Coding 16K21A Duration: 7h, 8min, 48 sec Antenna current: ~ 440 mA
Do odbioru użyłem skryptu opisanego tu: Używanie vlfrx-tools
Niestety komunikat nie został zdekodowany poprawnie z ustawieniami vtblank jakich zwykle używam (-a2 -d0 -t 10). Plik resampled_file jest plikiem wygenerowanym przez skrypt do dekodowania ebnaut opisany w Używanie vlfrx-tools. Przetworzyłem ten plik za pomoca vtraw i ebnaut z dodaną opcją -f9 (skopiowałem ostatnią linijkę skryptu i dodałem parametr -f9 i logowanie do pliku o nazwie decwy):
$ vtraw -oa < resampled_file | ./ebnaut -d -N7 -p 16K21A -S 24 -k 5 -r240 -c2 -PS -v -L 20000 2>&1 |tee decwy
Spróbujmy wyodrębnić z tego pliku wszystkie możliwe komunikaty, posortować je i wybrać tylko te unikalne i policzyć je. Niestety przy tylko 5 bitach CRC mamy wiele możliwych komunikatów:
$ grep found decwy |cut -d \[ -f 2 |cut -d \] -f 1 |sort -u | wc -l 67495
67495 unikalnych komunikatów to jest za dużo aby obejrzeć każdy w nich i zadecydować który z nich wygląda “poprawnie”.
Spróbujmy trochę oszukać: Paul Nicholson (który poprawnie zdekodował ten komunikat) napisał że jest to sławne nazwisko. Możemy przyjąć hipotezę, że komunikat zawiera tylko litery. Spróbujmy policzyć wszystkie możliwe komunikaty które zawierają tylko litery:
$ grep found decwy |cut -d \[ -f 2 |cut -d \] -f 1 |sort -u |egrep '^[A-Z]+$' |wc -l 352
352 komunikatów to nie tak dużo, więc możemy je obejrzeć i zadecydować który wygląda “sensownie”:
$ grep found decwy |cut -d \[ -f 2 |cut -d \] -f 1 |sort -u |egrep '^[A-Z]+$' | less
Jedyny komunikat który wygląda sensownie to: MARCONI 🙂
Z logu dekodera (plik decwy) wyciągnąłem najlepszy przypadek kiedy zdekodował się ten komunikat:
found rank 13961 ber 4.0858e-01 Eb/N0 -1.4 M -8.404992819e-01 [MARCONI] ps[ 83 -90 -60 -90 -60] carrier phase: 5.1 deg carrier Eb/N0: -4.1 dB carrier Es/N0: -18.44 dB carrier S/N: 11.87 dB in 38.9 uHz, -32.24 dB in 1Hz, -66.22 dB in 2.5kHz elapsed 1334
Spróbujmy teraz znaleźć optymalne ustawienia ogranicznika trzasków (vtblank). Te których używałem były optymalne dla 8270Hz, dla 6470Hz najlepsze mogą być zupełnie inne wartości. Wyodrębnimy plik o nazwie wskazanej przez zmienną PLIK2 zawierający segment 3kHz w okolicy 6470.1Hz. Następnie wypróbujemy kombinacje parametrów vtblank -a (wypróbowałem 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6) i -t (wypróbowałem 10 i 100) , zresamplujemy wynik do 240 sampli/s i umieścimy wynik w oddielnych plikach o nazwie takiej jak PLIK2, ale z dodanym do nazwy _A_T e (gdzie A jest wartością parametru -a , T jets wartością parametru -t).
Poniższy skrypt wykonuje te czynności:
#!/bin/bash PLIK2=plik_dk7fc_20170603_1_raw1 FREQ=6470.1 TT=2017-06-03_03:00:00,+25728 vtread -T$TT /mnt/rawvlf | vtfilter -h bp,f=${FREQ},w=3000 > $PLIK2 for a in 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 do for t in 10 100 do echo a=$a t=$t vtblank -v -a$a -d0 -t$t < $PLIK2 | \ vtmult -f ${FREQ} | \ vtresample -r 240 > ${PLIK2}_${a}_${t} done done
Stworzone zostały pliki o nazwach plik_dk7fc_20170603_1_raw1_XX_YY (gdzie XX jest parametrem -a vtblank , a YY jest parametrem -t vtblank). Dla każdego z tych plików sprawdźmy naszą hipotezę że komunikato to MARCONI. Użyjemy do tego ebnaut w trybie analizy:
$ for i in plik_dk7fc_20170603_1_raw1_*; do echo $i; vtraw -oa < $i | ./ebnaut -d -N7 -p 16K21A -S 24 -k 5 -r240 -c2 -PS -v -L 20000 -f15 -f16 -M MARCONI; echo; done
... skrypt pokazuje analizę dla każdego z tych plików. Wśród tych plików ten wydaje się być najlepszy (carrier Eb/N0 i carrier S/N są najlepsze):
plik_dk7fc_20170603_1_raw1_1.4_100 padded 0.267 seconds at end initial reference phase -0.2 amplitude 2.277e-02 carrier phase: 2.4 carrier Eb/N0: -2.7 dB carrier S/N: 13.28 dB in 38.9 uHz
Spróbujmy zdekodować plik_dk7fc_20170603_1_raw1_1.4_100 bez opcji -f9 i zobaczmy czy dekoder znajdzie komunikat:
$ vtraw -oa < plik_dk7fc_20170603_1_raw1_1.4_100 | ./ebnaut -d -N7 -p 16K21A -S 24 -k 5 -r240 -c2 -PS -v -L 200000 padded 0.267 seconds at end initial reference phase -0.2 amplitude 2.277e-02 prep [ 0 0 0 0 0] found rank 141 ber 4.1884e-01 Eb/N0 -2.4 M -6.664184332e-01 [MARCONI] ps [ 0 0 0 0 0] carrier phase: 2.6 deg carrier Eb/N0: -2.7 dB carrier Es/N0: -17.02 dB carrier S/N: 13.28 dB in 38.9 uHz, -30.82 dB in 1Hz, -64.80 dB in 2.5kHz elapsed 42
Jak widać znalazł komunikat MARCONI za pierwszą próbą. Okazuje się że dla tej transmisji najlepsze ustawienia vtblank to -a1.4 -d0 -t100.
Ostatnio próbowałem przeszukiwać znacznie większy zakres parametrów vtblank dla innej transmisji na 6470.1Hz i okazuje się że optymalne wartości były dużo większe: vtblank -a 1.7 -t 8050 -d0. Być może opiszę to w innym artykule.