Filtry IIR można zaimplementować jako bezpośrednią formę 1 lub 2 . Ale jak zdecydować, którego formularza użyć? Jakie są zalety i wady każdego z nich?
filters
infinite-impulse-response
anasimtiaz
źródło
źródło
Odpowiedzi:
Przede wszystkim trochę z wikipedii na temat implementacji Direct Form I i II .
Forma bezpośrednia wymaga więcej pamięci, ale jest nieco prostszą strategią i rzadziej ma problemy z zaokrągleniem i rezonansem.
Forma bezpośrednia II wymaga mniej pamięci, ale ma potencjał do nietypowych interakcji, większych liczb i więcej błędów zaokrąglania. Wiele z tego można zmniejszyć poprzez kaskadowanie mniejszych filtrów, zwłaszcza filtrów drugiego rzędu.
źródło
Trochę przestarzały, ale może zasługiwać na bardziej wyczerpującą odpowiedź, zwłaszcza, że Direct Form II może sprawić ci wiele kłopotów. Przede wszystkim nie ma „jednego rozmiaru dla wszystkich”, a najlepszy wybór zależy od konkretnej aplikacji i ograniczeń. Co możesz wziąć pod uwagę to
Podsumowując, transponowana forma II jest najczęściej najlepszym wyborem. W niektórych scenariuszach z ustalonymi punktami, zwłaszcza gdy występują znaczące problemy z szumem, Direct Form I jest lepszy, ponieważ można go łatwiej rozszerzyć o rzeczy takie jak kształtowanie spektrum błędów itp.
źródło
O ile nie pracujesz z systemem o bardzo ograniczonych zasobach lub nie masz ekstremalnych wymagań, w praktyce nie ma znaczenia, czy wybierzesz formę bezpośrednią I czy II. Na przykład, jeśli robisz coś na komputerze lub smartfonie, to naprawdę nie ma znaczenia. Osobiście wolę formularz I.
Prawdziwym problemem jest zwykle MIPS, a jeśli planujesz wykonać implementację w punkcie stałym, sprawy stają się bardziej skomplikowane. Na przykład w ARM twój filtr IIR zużyje znacznie więcej MIPS, jeśli zarówno współczynniki, jak i stany filtrów są 32-bitowe. 32 bity w stanach i współczynnikach jest wymagane, jeśli trzeba zaimplementować na przykład filtr dolnoprzepustowy o bardzo niskiej częstotliwości odcięcia. W takich przypadkach można użyć innego typu filtra, na przykład filtra o zmiennej wartości.
źródło
Oprócz różnic technicznych, takich jak dokładność numeryczna, istnieje także kwestia stabilności. Kiedy filtry cyfrowe mają pary biegun / zero blisko siebie, odpowiedź częstotliwościowa może stać się niestabilna w różnych lokalizacjach (zwykle zbliżających się do Nyquista lub zbliżających się do zera).
Gdy filtry IIR są używane do zastosowań muzycznych, wybór realizacji może mieć głęboki wpływ na stabilność filtra, gdy parametry filtra są modulowane w czasie rzeczywistym (na przykład zmieniając częstotliwość odcięcia na filtrze dolnoprzepustowym).
Mam aplikację open source, która pozwala słuchać różnic, a parametry zmieniające się w czasie, takie jak częstotliwość odcięcia lub szczytowe wzmocnienie, każdej z następujących realizacji:
Projekt jest tutaj:
https://github.com/vinniefalco/DSPFiltersDemo.git
https://github.com/vinniefalco/DSPFilters.git
źródło
Oprócz powyższych komentarzy na temat pamięci, MIPS, hałasu i stabilności; istnieje inny czynnik, który jest często pomijany. Czynnikiem tym jest możliwość resetowania; co jest bardzo ważne w większości moich sytuacji.
W przypadku implementacji Direct Form II nie ma stanów opóźnionego wyjścia, dlatego jeśli „zresetujesz” filtr Direct Form II, aby powiedzieć „5”, to jego wyjściowe wyjście nie będzie 5. Uważam, że jest to całkiem przeciwne - intuicyjny, który spowodował poważną frustrację podczas korzystania z Simulink. Z tego powodu prawie zawsze używam implementacji Direct Form I. Niestety Simulink obsługuje Direct Form I tylko wtedy, gdy masz przybornik DSP, a nawet wtedy nie pozwala ci ustawić początkowych warunków z sygnału wejściowego.
źródło