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?
--
#begin 755 signature.exe
[tomek <at> sikornik <dot> net] vy 73! de SP9UOB
Proud to be 100 percent microsoft free. op. Tomek
Zastanów się czy to jest w ogóle teoretycznie mozliwe
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 :-)
--
Pozdrawiam
Michoo
Kiedyś czytałem o czymś z opóźnieniem i mnożeniem, ale za kija nie potrafie
sobie przypomnieć gdzie i co to było.
--
Pozdrawiam
Michoo
Tutaj masz opisany prosty demodulator:
http://focus.ti.com/lit/an/spra347/spra347.pdf
Pewnie b�dziesz musia� troch� zmieni� parametry demodulatora, ale
matematyka wygl�da na w miar� dobrze opisan�.
pzdr.
j.
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.
Dzi�kuje, po szybkiej symulacji wygl�da obiecuj�co:
http://idom.verox.pl/pub/delay.jpg
:-)
> Goertzel tez sie powinien do tego nadawac, tylko trzeba zrozumiec jak
> on dziala i odpowiednio wykorzystac :-)
A możesz mnie jakoś nakierować :) ? Ni hu hu nie przychodzi mi do głowy jak
go użyć do szybkiego wykrycia prążka.
Sunday, January 30, 2011, 8:17:02 PM, you wrote:
[...]
>>Zastan�w si� czy to jest w og�le teoretycznie mozliwe
> 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.
Ale to by�a QAM a nie FSK...
> Goertzel tez sie powinien do tego nadawac, tylko trzeba zrozumiec jak
> on dziala i odpowiednio wykorzystac :-)
A ja z tego i tak niewiele rozumiem.
--
Best regards,
RoMan mailto:ro...@pik-net.pl
Nowa strona: http://www.elektronika.squadack.com (w budowie!)
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.
Implementacja na AVR:
http://www.nailed-barnacle.co.uk/callerid/avr/CallerID.asm
mo�e 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
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� :-)
> Próbuje zdemodulować sygnał FSK 1200/2200 Hz - szybkość modulacji 1200 bit/s
APRS?
--
gof
Tak, og�lnie PR
>>> Próbuje zdemodulować sygnał FSK 1200/2200 Hz - szybkość modulacji 1200 bit/s
>>
>> APRS?
>
> 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
--
gof
>>> Próbuje zdemodulować sygnał FSK 1200/2200 Hz - szybkość modulacji 1200 bit/s
>>
>> APRS?
>
> 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 oczekiwań, 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 terminal (Pocket Putty
>>> Pr�buje zdemodulowa� sygna� FSK 1200/2200 Hz - szybko�� modulacji 1200 bit/s
>>
>> APRS?
>
> 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 oczekiwa�, 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) jak sam
zauwa�y�e� w realnym �rodowisku �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 terminal (Pocket Putty
Chyba nie, ale warto mieć możliwość postawienia węzła jak
ktoś wyłączy w Polsce Internet ;-)
> Sam stoję przed tym tematem - chcę się uruchomić na APRSie a żaden tracker z
> tych, które przejrzałem, nie spełnia moich oczekiwań, 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) jak sam
> zauważyłeś w realnym środowisku średnio się sprawdza.
Jak napiszesz od nowa to rozwiążesz kilka problemów i zrozumiesz
dlaczego tak to działa. Głównie dlatego się za to zabrałem.
Jak już będe miał działający modem w sofcie - to pokusze się o doklejenie do
tego dsPIC'a ethernetu i spróbuje zrobić igate na 2 scalakach :-)
> Mój tracker ma mieć moduł Bluetooth (BTM-112) i komunikować się ze mną przez
> telefon, na razie mam wizję komunikacji tekstowej przez terminal (Pocket Putty
> na Windows Mobile).
Ciekawy pomysł :-)
Beda strzelac do takich :-)
No wlasnie - przeciez jest chyba do tego troche gotowego
oprogramowania, nie mozna podejrzec ?
J.
;-)
> No wlasnie - przeciez jest chyba do tego troche gotowego
> oprogramowania, nie mozna podejrzec ?
Większość rozwiązań na uC jest zamkniętoźródłowe.
Podglądałem kilka rozwiązań już - ale na zabawe mam czas tylko w weekendy.
W zeszły weekend doszedłem do wniosku że goertzel reaguje zbyt wolno, za
to mnożenie i opóźnienie wygląda obiecująco. Muszę się tylko nauczyć
projektowania filtrów FIR i ich implementacji.
> Zero-crossing odpada ze względu na SNR.
ja bym na twoim miejscu jeszcze przemyslal - filtry i limiter mozna zrobic
analogowo - bedzie szybsze i bedzie pobierac mniej pradu niz procesor...
nie mowiac o zakresie dynamiki ...
--
Teoretycznie najlepszą detekcję by dawało porównywanie ostatnich
kilkunastu próbek z oczekiwanym kształtem sybmolu dla 0 i 1 (czyli
cały okres 1200 i 1.8 okresu 2200). Porównywanie tu jest policzeniem
korelacji. Gorzej, że symbol 2200 nie zawiera całkowitej ilości
półokresów, tylko ułamek, więc wstawienie takiego symbolu w strumień
zmienia fazę następnych, zatem i ich spodziewany kształt. Byłoby dużo
łatwiej z 1200/1800 lub 1200/2400, bo wtedy każda jedynka czy zero
wygląda tak samo, ew. jest zanegowane. I z korelacji by można
zrezygnować, i synchronizacja rząd wielkości prostsza, same zalety,
ale niestety nie tu:)
Jeśli masz na tyle mocy procka żeby FIR zrobić, to można tak:
Strumień wejściowy na FIR o takiej długości, jak długość symbolu
(dłuższy sprawi, że sąsiednie symbole będą wpływały na siebie, efekt
niemile widziany). FIR ma być taki, żeby przepuszczał do 1200 a
wycinał od 2200. Np. taki (dla 16 kHz):
-0.0523 -0.0256 -0.0050 0.0376 0.0959 0.1559 0.2012 0.2180 i dalej
symetrycznie 0.2012 0.1559...
Na jego wyjściu będzie duży sinus dla 1200 i jakieś śmieci przy 2200.
Tylko że nigdy nie wiadomo w jaką fazę 1200 trafimy, więc ten jeden
okres 1200 może dawać szczyty za każdym razem w różnych miejscach.
Czasem to będzie jeden dodatni i jeden ujemny, czasem jeden ujemny i
dwa słabsze dodatnie, a typowo coś pomiędzy:) Można zliczać symbole
2200 i sobie przewidywać fazę. Ale to dla ambitnych. A można też
wyrównać tego sinusa to czegoś w miarę płaskiego. Gdyby był sygnał
kwadraturowy, to łatwo sobie amplitudę wyliczyć z sumy kwadratów. Ale
że nie ma, to go sobie można zrobić przez opóźnienie o ćwierć okresu
(tak jakby z sinusa zrobić cosinus), i wychodzi amplituda (pierwiastka
nie lubimy):
y[n] = x[n]^2 + y[n-ćwierć okresu]^2
x to wyjście z FIRa. y to już jest sygnał trzymający się wysoko przy
1200 i nisko przy 2200. Do detekcji całkiem się nadaje.
Oddzielny temat to synchronizacja. Do tego przydaje się wiedza o
protokole. Typowo powinna być preambuła, pozwalająca na znalezienie
momentów gdy jeden symbol się kończy a następny zaczyna. Np. histogram
ze zmian tego wyżej wyliczonego sygnału może to podpowiedzieć.
Próbkowanie będące wielokrotnością 1200 też nieco ułatwi. Przy dobrej
synchronizacji można też CPU zaoszczędzić i liczyć wszystko nie co
próbkę, ale raz na symbol.
WP
> Witajcie.
>
> Próbuje zdemodulować sygnał FSK 1200/2200 Hz - szybkość modulacji 1200
jeszcze jeden pomysl mi przyszedl do glowy :
http://en.wikipedia.org/wiki/Quadrature_mirror_filter
z tym ze moja znajomosc matematyki nie umozliwia mi stwierdzenie czy taki
filtr sie 'nada' (chociaz mysle ze w przeciwienstwie do Groetzla -
wprowadzalby tylko pewne opoznienie, a przy PR/APRS to nieistotne, bo
transmisja jest half-duplexowa) .
idea bylaby tu podobna do uzycia zero-crossing, tzn. dzielimy sygnal na 2
czesci , mniejsze niz 1700 i wieksze niz 1700.
zaleta nad 0 crossing taka, ze nawet rozpoznajac 'bity' na podst. prostej
sredniej z kazdych pasm (czyli albo mamy 'wiecej dolu' albo 'wiecej gory')
mozna wprowadzac prosta 'redukcje zaklocen' - np. malo dokladnym (a co za
tym idzie szybkim) Groetzlem badac 'dol' i 'gore' _poza_ interesujacym nas
pasem - dzieki czemu uzyskamy srednia 'zaklocen' poza interesujacym
prazkiem, i te srednia zwyczajnie odejmujemy przy ostatecznej decyzji od
kazdej ze skladowych. moze dzialac zarowno 'krotkoterminowo' (redukcja
szumow) jak i dlugo (korekcja np. charakterystyki czestotliwosci)
dodatkowa zaleta ze juz po pierwszym 'podziale' uzyskujemy dwa rownolegle
strumienie, ktore mozemy rownolegle przetwarzac - no ale to jedynie jesli
uzywamy jakiegos dsp/fpga/wielordzeniowej architektury , chociaz od biedy
mozna np. uzyc jednego szybkiego mikrokontrolera 'rozdzielajacego' pasma, a
nastepnie np. dwoch dodatkowych , pracujacych rownolegle - analizujacych
kazde z osobna (lub nawet dwoch drabinek DAC i komparatora, ew. analogowych
filtrow)
--