Powołując się na klasyczne cyfrowe przetwarzanie sygnałów Bellanger - teoria i praktyka , nie chodzi o to, gdzie jest twoja częstotliwość odcięcia, ale o to, ile potrzebujesz tłumienia, ile tętnienia sygnału, który chcesz zachować, możesz tolerować i, co najważniejsze, w jaki sposób zawęzić przejście z pasma przejściowego na pasmo (szerokość przejścia).
Zakładam, że potrzebujesz liniowego filtru fazowego (chociaż określasz minimalne opóźnienie, nie sądzę, że minimalny filtr fazowy jest ogólnie dobrym pomysłem, chyba że do cholery dobrze wiesz, co będziesz robił z sygnałem) . W takim przypadku kolejność filtrowania (czyli liczba uderzeń) wynosi
N.≈ 23)log10[ 110 δ1δ2)]fasΔ f
z
fasΔ fδ1δ2) częstotliwość próbkowania szerokość przejścia, to znaczy. różnica między końcem pasma podania a początkiem pasma zatrzymania tętnienie pasma przepustowego, to znaczy. „ile oryginalnej amplitudy możesz sobie pozwolić na zmianę” supresja w zespole stop .
Podłączmy kilka liczb! częstotliwość odcięcia , więc po prostu przejdę dalej i stwierdzę, że szerokość przejścia nie będzie większa niż połowa z tego, więc .fas100Δ f= fs200
Pochodzące z technologii SDR / RF tłumienie 60 dB jest zazwyczaj w pełni wystarczające - sprzęt, bez szalonych kosztów, nie będzie lepiej utrzymywał niepożądanych sygnałów z wejścia, więc nie marnujmy procesora na fantastyczny filtr, który jest lepszy niż to, co może zrobić Twój sprzęt. Dlatego .δ2)= - 60 dB = 10- 3
Załóżmy, że możesz żyć z odchyleniem amplitudy 0,1% w paśmie pasma (jeśli możesz żyć z większą ilością, rozważ także ograniczenie wymagań tłumienia). To .δ1= 10- 4
Podłączając to:
N.Filtr Tommy'ego≈ 23)log10[ 110 δ1δ2)]fasΔ f= 23)log10[ 110 ⋅ 10- 4⋅ 10- 3]fasfas200= 23)log10[ 110 ⋅ 10- 7]200= 23)log10[ 110- 6]200= 23)( log10106)200= 23)⋅ 6 ⋅ 200= 800 .
Tak więc z 200 stuknięciami jesteś daleko, iff w swoim filtrze używasz bardzo wąskiego pasma przepustowego, tak jak zakładałem.
Pamiętaj, że nie musi to stanowić problemu - przede wszystkim jest to filtr 800-tap przerażający, ale szczerze mówiąc, tylko na pierwszy rzut oka:
- Jak testowałem w tej odpowiedzi na StackOverflow : obecnie procesory są szybkie , jeśli używasz czyjejś implementacji FIR zoptymalizowanej pod kątem CPU. Na przykład użyłem implementacji GNU Radio FFT-FIR z dokładnie powyższym opisem specyfikacji filtra. Mam wydajność 141 milionów próbek na sekundę - to może, ale nie wystarczy. Oto nasz testowy przypadek testowy (którego wyprodukowanie zajęło mi kilka sekund):
- Dziesiątkowanie: jeśli zamierzasz zachować tylko ułamek przepustowości wejściowej, wyjście filtra będzie drastycznie nadpróbkowane. Wprowadzenie dziesiętnej liczby oznacza, że Twój filtr nie daje ci każdej próbki wyjściowej, ale tylko każdej tej - co normalnie prowadziłoby do wielu aliasingów, ale ponieważ eliminujesz cały sygnał, który mógłby być aliasem, możesz rób to. Sprytne implementacje filtrów (decymatory wielofazowe) mogą w ten sposób zmniejszyć wysiłek obliczeniowy o M. W twoim przypadku możesz łatwo zdziesiątkować , a wtedy komputer musiałby tylko obliczyćM.M.M.= 50120050= 24mnożenia / akumulacje na próbkę wejściową - o wiele łatwiej. Filtry w GNU Radio generalnie mają taką możliwość. I w ten sposób, nawet z FFT FIR (który nie nadaje się zbyt dobrze do implementacji decymatora polifazowego), mogę wycisnąć kolejny czynnik 2 w wydajności. Nie mogę nic więcej zrobić. Z mojego doświadczenia jest to dość zbliżone do przepustowości pamięci RAM. Dla
- Opóźnienie: nie przejmuj się tym. Naprawdę nie, chyba że musisz. Robisz to z typowymi częstotliwościami próbkowania dźwięku? Pamiętaj,96kSs≪śmiesznie141Stwardnienie rozsianes wspomniane powyżej. Czas poświęcony na obliczenie wyjściowego filtra będzie miał znaczenie tylko w przypadku przesyłania strumieniowego sygnału na żywo przez MS / s. W przypadku DSP z danymi offline: dodaj opóźnienie do dowolnego sygnału równolegle do filtra, aby to zrekompensować. (Jeśli filtr ma fazę liniową, opóźnienie będzie równe połowie długości filtra.) Może to mieć znaczenie w sprzętowej implementacji filtra FIR.
- Implementacja sprzętowa: więc może procesor i system operacyjny twojego komputera lub urządzenia wbudowanego naprawdę nie pozwalają ci spełnić ograniczeń związanych z opóźnieniami, więc patrzysz na FIR zaimplementowane w FPGA. Pierwszą rzeczą, którą zauważysz, jest to, że w przypadku sprzętu istnieje inny paradygmat projektowy - „ wszystko oprócz1100mojego współczynnika wejściowego ”wymaga dużej szerokości bitowej dla liczb stałych, które można obsługiwać w sprzęcie (w przeciwieństwie do liczb zmiennoprzecinkowych w procesorze). Więc to jest pierwszy powód, dla którego zwykle dzieliłeś ten filtr na wiele , kaskadowe, mniejsze, dziesiątkowe filtry FIR. Innym powodem jest to, że z każdym „krokiem” kaskady możesz pozwolić, aby mnożniki (zwykle „wycinki DSP”) działały z niższą częstotliwością, a zatem zmultipleksować je (liczba wycinków DSP jest zwykle bardzo ograniczona), przy użyciu jednego mnożnika do wielu odczepów. Jeszcze innym powodem jest to, że szczególnie filtry półpasmowe, tj. nisko przepustowe, które tłumią połowę pasma wejściowego i dostarczają połowę częstotliwości wejściowej, są bardzo skutecznie wdrażane sprzętowo (ponieważ mają połowę krany są zerowe, co jest trudne do wykorzystania w implementacji CPU / SIMD).