Jakie czynniki należy wziąć pod uwagę przy wyborze realizacji filtra IIR?

16

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?

anasimtiaz
źródło
Co więcej, jaki jest najlepszy sposób na ich wdrożenie na GPU.
Royi,
2
@Drazick, GPU to zupełnie inna gra. wymagające kolejnego pytania.
Trevor Boyd Smith

Odpowiedzi:

9

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.

PearsonArtPhoto
źródło
2
W obu przypadkach powinieneś kaskadować sekcje drugiego rzędu.
Oliver Charlesworth
1
Krótko mówiąc, czy jest to kompromis między pamięcią a błędem zaokrąglenia?
anasimtiaz
2
Super słaba odpowiedź IMO. Technicznie odpowiada na pytanie ... ale tylko „technicznie”. Chciałbym zobaczyć kod źródłowy w języku. Wiem jak łatwo wdrożyć filtr FIR. Zobaczmy kod źródłowy IIR.
Trevor Boyd Smith
2
Również pod względem operacji matematycznych wykonanych na próbkę, która jest lepszą implementacją I czy II?
anasimtiaz
1
wiem jak zrobić filtrowanie FIR. wiem także, co to jest forma bezpośrednia I / II / III / IV. nie mam doświadczenia w IIR: projekt lub wdrożenie. Mój oryginalny komentarz nie był zbyt konstruktywny. Powinienem powiedzieć: „Rozumiem, co to jest bezpośrednia forma I-IV, czy mógłbyś porozmawiać o tym, jak projektujesz / wdrażasz filtr IIR?”
Trevor Boyd Smith
9

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

  1. Pamięć: Bezpośredni formularz II i transponowany formularz II zajmują nieco mniej pamięci stanu niż bezpośredni formularz I i transponowany formularz I, ale w kaskadowej implementacji sekcji drugiego rzędu różnica jest niewielka
  2. MIPS: Pod względem liczby mnożników i dodatków wszystkie cztery implementacje są takie same. Jednak w zależności od zestawu instrukcji konkretnego procesora mogą występować znaczne różnice w wydajności wdrażania. Więc „to zależy”.
  3. Właściwości punktu stałego: to ogromna różnica. Przede wszystkim musisz się upewnić, że zmienne stanu nie przepełniają się, więc musisz przeanalizować funkcję przenoszenia między wejściowymi / wyjściowymi a zmiennymi stanu. Tutaj bezpośredni formularz I i transponowany formularz II są wyraźnymi zwycięzcami. Zmienne stanu są powiązane z + 106dB lub więcej w stosunku do wejścia i wyjścia. Na przykład w bezpośrednim formularzu II funkcja przenoszenia z wejścia na stan jest zadawana tylko przez bieguny. Widziałem przykłady ze świata rzeczywistego, w których może to faktycznie przekroczyć 100 dB wzmocnienia. Jest to absolutnie nie non implementacji punktu stałego.
  4. Hałas: Pod względem błędu obcięcia i zaokrąglenia wszystkie implementacje są mniej więcej takie same. Problem funkcji przenoszenia zmiennych stanu wspomniany w 3) również w pewnym stopniu wpływa na to i widziałem słyszalne problemy z hałasem z filtrami Direct Form II nawet przy użyciu 32-bitowej liczby zmiennoprzecinkowej.

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.

Hilmar
źródło
To jest o wiele bardziej kompleksowa i lepsza odpowiedź!
Lorem Ipsum,
2
Zrozumiałem dziś - w znacznie trudniejszy sposób - dlaczego Direct Form I jest lepszym wyborem dla mojej aplikacji. Dzięki za naprawdę dobrą odpowiedź!
anasimtiaz
1

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.

niaren
źródło
1

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:

  • Bezpośredni formularz I.
  • Formularz bezpośredni II
  • Transponowany formularz bezpośredni I
  • Transponowany formularz bezpośredni II
  • Forma kraty
  • Zmienna stanu

Projekt jest tutaj:

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

Zrzut ekranu

Vinnie Falco
źródło
1
Opublikowałeś to kilka razy, a ja jestem skłonny egzekwować zasady dotyczące spamu, chyba że twoje odpowiedzi są dostosowane do pytań. Żaden z tych postów nie odpowiada bezpośrednio na pytania, a także promuje produkt. Edytuj je, aby bezpośrednio odpowiedzieć na pytania, w przeciwnym razie zostaną usunięte.
Phonon
0

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.

Kyle
źródło