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 na Windows Mobile).
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 na Windows Mobile).
On Fri, 4 Feb 2011 00:21:41 +0000 (UTC), Adam Wysocki napisał:
Chyba nie, ale warto mieć możliwość postawienia węzła jak ktoś wyłączy w Polsce Internet ;-)
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 :-)
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.
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.
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)
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.