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).
Dla szybkiej i bardzo praktycznej oceny podoba mi się zasada kciuka Freda Harrisa:
gdzie:
Atten jest pożądanym tłumieniem w dB,
Jest to bardzo zbliżone do tego, co można uzyskać za liniowy filtr fazowy z tętnieniem pasma przepustowego 0,1 dB. Często stosuję tę zasadę, aby uzyskać pierwsze wyobrażenie o liczbie potrzebnych uderzeń, a następnie modyfikować je poprzez iterację w procesie projektowania filtra.
Warto również zauważyć: ta praktyczna zasada zapewnia doskonały wgląd w to, co naprawdę napędza liczbę dotknięć: zatrzymaj tłumienie pasma i stromość pasma przejściowego (i tętnienia pasma przepustowego, ale zazwyczaj - przynajmniej dla filtrów, dla których musiałem zaprojektować aplikacje komunikacji bezprzewodowej - wymóg tłumienia dominowałby nad tętnieniem). Więc brakuje ci pytania o określenie granicy na Fs / 100, jak szybko musisz przejść do pasma stop.
Zabawa z tymi liczbami może również wykazać znaczenie redukcji przetwarzania za pomocą metod dziesiętnych.
źródło
Dodając do zaakceptowanej odpowiedzi, kilka dodatkowych odniesień. Nie napiszę wzorów, które mogą być zaangażowane. Te formuły dają przede wszystkim praktyczne zasady lub aproksymacje na początek. Możesz manipulować tymi liczbami w celu uzyskania rzeczywistego projektu.
Jednym z przyczyn powstania projektu Bellanger jest: o złożoności obliczeniowej w filtrach cyfrowych, 1981, Proc. Eur. Konf. Projektowanie teorii obwodu, M. Bellanger. Jest dość trudny do zdobycia, ale jest wykonalny . Co ciekawe, określa również formuły do oceny liczby bitów na współczynnik, które należy wziąć pod uwagę przy implementacji skończonej arytmetyki. Bardziej dostępna wersja w języku francuskim to: Evaluation de la complexité des filtres numériques , 1982.
Kilka innych formuł zebrano w projekcie skończonego filtra odpowiedzi impulsowej , Podręcznik cyfrowego przetwarzania sygnałów, 1993, T. Samamaki.
Niedawno można przeczytać Dokładne oszacowanie minimalnej długości filtra dla optymalnych filtrów cyfrowych FIR , 2000, K. Ichige i in.
Wreszcie, w artykule Efektywna konstrukcja filtrów FIR z minimalnymi zamówieniami filtrów z wykorzystaniem optymalizacji normy L0 , 2014 r. Zakłada projekt, w którym kolejność jest stopniowo zmniejszana.
źródło
Głównymi problemami praktycznymi, o których mogę pomyśleć, byłaby liczba próbek częstotliwości użytych podczas optymalizacji, ponieważ zachowanie próbki między częstotliwościami może powodować niepożądane efekty. To, jak dobre może być dopasowanie, zależy oczywiście od liczby uderzeń. Wydaje mi się, że można powiedzieć, że minimalna liczba uderzeń to moment, w którym problem staje się nieosiągalny. Jednym z rozwiązań byłoby rozwiązanie problemu wykonalności.
źródło