Technika DSP - demodulacja FSK

Jan 30, 2011 27 Replies

Witajcie.



Próbuje zdemodulować sygnał FSK 1200/2200 Hz - szybkość modulacji 1200 bit/s Próbowałem zrobić to przy pomocy alg. Goertzla, jednak nie udało mi się to, ponieważ ja musze rozpoznać nośną 1200 Hz już po 833us - czyli po czasie trwania jednego bitu! Algo Goertzla wymaga większej ilości próbek (więcej niż jeden okres) dla poprawnego wykrycia podnośnej. Zero-crossing odpada ze względu na SNR. Czy ktos z Was może mi podpowiedzieć czego szukać żeby zrobić tani (w sensie czasu obliczeń, najlepiej stały przecinek) dyskryminator FSK?


U¿ytkownik "Verox" <antispam snipped-for-privacy@bijspamera.veroxsystems.com> napisa³ w wiadomo¶ci news:slrnikarq5.4rb.antispam snipped-for-privacy@matrix.verox.pl...

Zastanów siê czy to jest w ogóle teoretycznie mozliwe

On Sun, 30 Jan 2011 15:20:00 +0100, f napisał:

Takie systemy działają, więc mało że teoretycznie możliwe to udowodnione w praktyce ;-). Chyba że coś źle licze:

Czas 1 bitu = 1/1200 bit/s = 833.33 us To jest raczej jasne i tu błędu nie ma.

okres podnośnej 1200 Hz = 1/1200 Hz = 833.33 us = czas bitu okres podnośnej 2200 Hz = 1/2200 Hz = 454.54 us = 1.8 * czas bitu

Próbkowanie 16 kHz - próbka co 62.5 us

podnośna 1200 Hz - 13 próbek/okres podnośna 2200 Hz - 7 próbek/okres

Czyli ZA MAŁO do algo goertzla. Oczywiście moge sie mylić - jeśli tak jest proszę o naprostowanie, zaczynam zabawe z DSP :-)

W dniu 30.01.2011 15:01, Verox pisze:

[..]

Jedyne co mi przychodzi do głowy to wykrywanie zmiany znaku pochodnej. ale to może być strasznie podatne na zakłócenia.

On Sun, 30 Jan 2011 15:45:00 +0100, Michoo napisał:

Kiedyś czytałem o czymś z opóźnieniem i mnożeniem, ale za kija nie potrafie sobie przypomnieć gdzie i co to było.

W dniu 30.01.2011 15:59, Verox pisze:

Metoda, którą ja kiedyś opracowałem (może jest jakaś lepsza) to sumowanie (z pomocą bufora cyklicznego) ostatnich k różnic między kolejnymi próbkami. Ta suma zmienia znak około k/2 próbek za minimum lub maksimum. W związku z czym pozwala dość dobrze obliczać czas półokresu o ile zakłócenia nie są zbyt duże.

Tutaj masz opisany prosty demodulator:

formatting link
będziesz musiał trochę zmienić parametry demodulatora, ale matematyka wygląda na w miarę dobrze opisaną.

pzdr. j.

Dnia 30.01.2011 Verox <antispam snipped-for-privacy@bijspamera.veroxsystems.com> napisał/a:

Trzeba opóźnić o ćwierć okresu częstotliwości środkowej (1700Hz). Następnie sygnał opóźniony mnożymy przez oryginalny.

Pozdrawiam, Mariusz Dąbrowski

Teoretycznie moze nie, ale juz w prehistorycznych czasach modemy robily to w pol okresu, a w poznej starozytnosci kluczowano 3429 baud, na nosnej cos 1800Hz, w pasmie 3300Hz (teoretycznie) i jeszcze majac w kanale probkowanie 8kHz i 8 bit. I rozpoznawano ok 9 bitow na symbol.

Goertzel tez sie powinien do tego nadawac, tylko trzeba zrozumiec jak on dziala i odpowiednio wykorzystac :-)

J.

On Sun, 30 Jan 2011 18:44:17 +0000 (UTC), Mariusz Dabrowski napisał:

Dziękuje, po szybkiej symulacji wygląda obiecująco:

formatting link

:-)

A możesz mnie jakoś nakierować :) ? Ni hu hu nie przychodzi mi do głowy jak go użyć do szybkiego wykrycia prążka.

[...]

Ale to była QAM a nie FSK...

A ja z tego i tak niewiele rozumiem.

Na 2 probkach niewielka roznica :-)

J.

ten algorytm, tzn dwie zmienne plus algorytm, tworzy taki niby swobodny rezonator. Podasz odpowiednia czestotliwosc to mu amplituda rosnie.

Trzeba dwa rezonatory i sprawdzac w ktorym szybciej rosnie. A rosnie juz w jednym okresie.

Ale tak sobie zasymulowalem i ciekawostke zauwazylem - potrafi tez zmalec. W sumie nie dziwne - po tych wszystkich modulacjach sygnal wymuszajacy moze byc w przeciwfazie do swobodnych drgan. Wiec albo trzeba resetowac na poczatku bitu, albo dorobic tlumienie - i to raczej spore.

J.

U¿ytkownik "Verox" <antispam snipped-for-privacy@bijspamera.veroxsystems.com> napisa³ w wiadomo¶ci news:slrnikarq5.4rb.antispam snipped-for-privacy@matrix.verox.pl...

Implementacja na AVR:

formatting link
siê przyda. Nie pamiêtam, czy to dok³adnie ten program sprawdza³em, ale mo¿na zerkn±æ. Wa¿n± rolê odgrywa filtracja sygna³u (tutaj filtr FIR).

Micha³

A bardzo się upierasz przy tym 2200 Hz? Gdyby z tego zrobić 2400 to znam niewymagający alg dający się zapisać nawet bez mnożenia, ale bazujący na tym że każdy symbol zawiera całkowita ilość półokresów (1200/1800 też by pasowało). WP

On Wed, 2 Feb 2011 06:34:13 -0800 (PST), WP napisał:

Mnie tam wszystko jedno czy 2200 czy 2400, jednak musiałbym przekonać wszystkich którzy używają Packet-Radio do przestrojenia się o te 200 Hz wyżej ;-) Algo możesz oczywiście opisać :-)

On Thu, 3 Feb 2011 03:59:37 +0000 (UTC), Adam Wysocki napisał:

Tak, ogólnie PR

PR oprócz APRSu jeszcze żyje? :)

Sam stoję przed tym tematem - chcę się uruchomić na APRSie a żaden tracker z tych, które przejrzałem, nie spełnia moich potrzeb, więc robię swój. Nie chcę pisać wszystkiego od nowa tylko w miarę możliwości wykorzystać już istniejące rozwiązania. I też właśnie rozglądam się za wydajnym sposobem wykrywania częstotliwości, bo liczenie przejść przez zero (tak działa WhereAVR) podobno średnio się sprawdza.

FOA-Pack wygląda obiecująco, ale nie znalazłem nigdzie kodu źródłowego do tego trackera, a to dla mnie podstawa - plik .hex do wrzucenia do mikrokontrolera mnie nie interesuje.

Mój tracker ma mieć moduł Bluetooth (BTM-112) i komunikować się ze mną przez telefon, na razie mam wizję komunikacji tekstowej przez telefon (Pocket Putty na Windows Mobile).

sp5gof

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required