ParaTNC |
Tej płyty używałem podczas testów samej biblioteki do APRS, choć całości nagrania nie zapuszczałem. Generalnie biblioteka opiera się na pomyśle Tomasa Sailera (plik d_dspmod.pdf dostępny w necie), który sprowadza się do obliczaniu Dyskretnej Transformaty Fouriera, czyli korelacji sygnału wejściowego z przebiegiem 1200Hz i 2200Hz. Mówiąc bardziej po ludzku, zamiast obliczać wartość poziomu sygnału wszystkich prążków widma, co jest zbędne i nieefektywne, oblicza się poziom tylko dla dwóch potrzebnych wartości (tonów MARK i SPACE używanych w APRS). Matematycznie sprowadza się to do całki splotu (**), czyli tak naprawdę do sumowania iloczynów próbek wejściowych z próbkami "przebiegu wzorcowego. W zasadzie na prawie identycznej zasadzie działa filtr FIR, z tą tylko różnicą (**), że tam splata się sygnał wejściowy nie z innym sygnałem, a z wyliczonymi współczynnikami filtru. Obrazuję to ten krótki fragment kody w C/C++ data[ptr]=curr_sample; ` ptr = (ptr+1)%SAMPLEPERBIT; /* % : Modulo */ ` for(i=0;i<SAMPLEPERBIT;i++) ` { ` d = data[(ptr+i)%SAMPLEPERBIT]; (***) ` out_mark_i += d*corr_mark_i[i]; out_mark_q += d*corr_mark_q[i]; out_space_i += d*corr_space_i[i]; out_space_q += d*corr_space_q[i]; } Najpierw zapisuje się nową próbką i przesuwa się do przodu (*) wskaźnik chodzący po buforze wejściowym. Potem zaczyna się pętla, w której SAMPLERBIT to rozmiar bufora w próbkach. W każdym obiegu tej pętli pobiera się z bufora jedną próbkę (zaczynając od najstarszej a kończąc na najnowszej), następnie mnoży się ją z odpowiadającą jej próbką "przebiegu wzorcowego" a wynik dodaje się do "zbiorczej zmiennej". Tak to miej więcej funguje. Zaletą tego rozwiązania jest to, że jest w miarę mało skomplikowane obliczeniowo oraz jest dość tolerancyjne na różne odchylenia od normy. Niestety i tak nie udaje mi się zachować 100% kompatybilności z wszystkimi parami tracker+radio i np. ramki od mojego kumpla, Krzyśka SQ8MAE nie przechodzą. (**) De facto drobna różnica pomiędzy splotem a korelacja leży w tym, że w jednym miejscu równania zamiast plus jest minus. Gdyby chcieć obliczyć splot to właśnie w miejscu (***), zamiast plusa byłby minus. Jest to jednak w sumie i tak nieistotne. Tak na szybko polecam lekturę tego: http://pl.wikipedia.org/wiki/Splot_%28analiza_matematyczna%29, są nawet fajne animację pokazujące jak działa splot sygnałów. |