Co to za filtr? Czy to IIR?

9

Próbuję odpowiedzieć na następujące pytanie:

Czy system jest opisany równaniem:

y[n]=0.5y[n1]+x[n]0.5x[n1]

IIR filtr? Moja odpowiedź brzmi: tak.

Dziękuję Ci

Czarna Yasmin
źródło
1
istnieje klasa filtrów FIR zwanych filtrami „Truncated IIR” (TIIR). możesz to zrobić w Google, a znajdziesz rzeczy od Juliusa Smitha i Avery Wanga. innym przykładem filtrów TIIR jest filtr Moving Sum lub Moving Average lub filtr CIC (wszystkie bardzo różne nazwy dla tej samej rzeczy). tym, co sprawia, że ​​ten filtr rekurencyjny jest FIR, jest eliminacja bieguna zerowego. jak zaimplementowano, istnieją wewnętrzne bieguny, a jeśli byłyby niestabilne, filtr mógłby wybuchnąć w środku, ale nie zobaczyłbyś go na wyjściu, dopóki nie zostaną przekroczone ograniczenia liczbowe.
Robert Bristol-Johnson
1
jakie są ograniczenia liczbowe?
Czarny Yasmin
zależy od typu liczbowego (liczba zmiennoprzecinkowa lub stała) i szerokości słowa. te rzeczy można sprawdzić. (powiedzmy, dla IEEE-754 zmiennoprzecinkowych. dla ustalonych zależy od liczby bitów,nI, pozostały po punkcie binarnym; w przybliżeniu±2nI1.
Robert Bristol-Johnson
jeszcze raz dziękuję panom za wszelką pomoc! bardzo pomaga Cieszę się, że znalazłem tę stronę
Black Yasmin
2
@AnthonyParks: Mówisz : „ dlaczego ludzie komplikują to… to wyraźnie IIR, ponieważ pierwszy termin filtra ma część sprzężenia zwrotnego. ”? Mówię : „ dlaczego ludzie nie zadają sobie trudu zrozumienia podstawowych koncepcji DSP ”? Filtr IIR zawsze implikuje postać rekurencyjną, ale FIR nie musi oznaczać, że filtr nie jest rekurencyjny. To jedyna poprawna odpowiedź, a mylisz tu pojęcia. Gdyby to było pytanie do egzaminu, nie powiesz, mówiąc, że to IIR. Oppenheim wyjaśnia ten temat w swojej książce na temat DSP.
jojek

Odpowiedzi:

18

To jest filtr FIR , chociaż wygląda jak IIR. Jeśli obliczysz współczynniki, otrzymasz skończoną odpowiedź impulsową:

h=[1]

Dzieje się tak z powodu anulowania bieguna zerowego:

Y(z)0.5Y(z)z1=X(z)0.5X(z)z1

H(z)=Y(z)X(z)=10.5z110.5z1=1

Tak, może to być trudne. Widzeniey[nk]współczynniki w LCCDE (równanie różnicy współczynników liniowych) niekoniecznie oznacza, że ​​jest to filtr IIR. Może to być tylko rekurencyjny filtr FIR.

jojek
źródło
1
dzięki za uznanie! Byłem oszukany, mówiąc IIR, nigdy nie przyglądając się dokładnie współczynnikom ... Usunąłem swoją odpowiedź.
Fat32
Jeśli jednak zaimplementujesz równania, jak pierwotnie powiedziano, nie będzie on zachowywał się dokładnie tak, jak H (z) = 1 ze względu na skończone efekty długości słowa (pomimo, że w tym przypadku anulowanie bieguna zerowego jest dokładne).
Oscar,
To prawda @Oscar, ale są to problemy numeryczne, które nie mają nic wspólnego z filtrem będącym F / IIR.
jojek
1
@jojek: oczywiście masz całkowitą rację. Jednak stosowanie rekurencyjnych filtrów FIR powoduje sporo problemów, jeśli nie jesteś tego świadomy (co wielu, nawet „wysokiej jakości” badaczom). Stąd mój komentarz. Najlepiej byłoby, gdyby omówiono również algorytm vs funkcję transferu.
Oscar,
jojek Czytam twoją odpowiedź na to pytanie, na które odpowiedziałeś, ale nie mogę komentować. dsp.stackexchange.com/questions/17605/… czy mogę użyć innego okna?
Czarny Yasmin
14

Odpowiedź Jojeka jest oczywiście poprawna. Chciałbym tylko dodać trochę więcej informacji, ponieważ zbyt często widziałem mylone terminy „IIR” i „rekurencyjne”. Zawsze obowiązują następujące implikacje:

IIRrecursivenon-recursiveFIR

tzn. każdy filtr IIR (tj. filtr czasu dyskretnego o nieskończenie długiej odpowiedzi impulsowej) musi być zaimplementowany rekurencyjnie (chyba że masz dostępną nieskończoną pamięć), a każdy nierekurencyjny system LTI ma skończoną odpowiedź impulsową (ponownie, chyba że masz nieskończoną pamięć).

Jednak odwrotnie nie jest na ogół prawda. Filtr rekurencyjny może mieć skończoną odpowiedź impulsową, jak ma to miejsce w przykładzie w pytaniu. Innym znanym przykładem jest filtr średniej ruchomej. Jest to nierekurencyjna implementacja średniej ruchomej (koniecznie FIR):

y[n]=1Nk=nN+1nx[k]

A to jest rekurencyjna implementacja tego samego filtra (także FIR):

y[n]=y[n1]+1N(x[n]x[nN])
Matt L.
źródło
1
Zwięzłe i dokładne jak zawsze, +1;) Dziękujemy za poruszenie sprawy MA.
jojek
1
@jojek: tak, myślę, że to klasyk, który każdy powinien znać.
Matt L.
I chociaż w komentarzu do odpowiedzi Jojeka zastanawiałem się przede wszystkim nad hałasem, w przypadku MA przepełnienie będzie potencjalnym problemem, który należy dokładnie rozważyć. Łatwo rozwiązane przez arytmetykę dopełniacza dwóch i wystarczającą długość słowa.
Oscar,
1
@Oscar: Cóż, po wykonaniu bardzo prostej analizy z podwójną precyzją zmiennoprzecinkową otrzymałem błąd 8.881784197001252e-16 . Dzieje się tak po przetworzeniu odpowiadającego 1 roku dźwięku przy częstotliwości próbkowania 44,1 kHz. Dane wejściowe to szum Gaussa ze znormalizowanym rozkładem. Oto kod do odtworzenia wyniku ! Kliknij! (uruchomienie może potrwać 3 dni). Pod warunkiem, że jest to poprawne, to uważam, że nie ma się czym martwić.
jojek
1
@jojek: Trzy rzeczy. 1) Miałem na myśli filtr średniej ruchomej odpowiedzi, a nie ten z pierwotnego pytania. 2) Tak, to jest w porządku dla dźwięku (ale nie jest dokładne, więc nie ma powodu, aby pisać „nie” pogrubioną czcionką), ale wolę, aby moje przetwarzanie krytyczne dla bezpieczeństwa było niezależne od sygnału wejściowego mającego właściwości syntetyczne. 3) Interesujące jest to, że symulowany filtr nie będzie miał problemów, które opisałem (ponieważ biegun znajduje się wewnątrz koła jednostki, a nie na nim), ale zawsze będzie miał błędy zaokrąglania niezależne od reprezentacji (których można uniknąć w przypadku średniej ruchomej).
Oscar