Filtracja cyfrowa - filtry FIR (o skończonej odpowiedzi impulsowej)

2011-11-16
Filtracja cyfrowa - filtry FIR (o skończonej odpowiedzi impulsowej)

Dzięki technice cyfrowej mamy dostęp do technologii, które dawniej były dane tylko wybrańcom (naukowcom w laboratoriach uczelni, i to tych znamienitszych). Coraz bardziej skomplikowane i pracochłonne operacje możemy wykonywać w zaciszu domowych pieleszy, za pomocą prostego komputera domowego, niekoniecznie takiego z najwyższej półki, i to w odcinkach czasu liczonych w sekundach, a nawet ułamkach sekund (w wielu przypadkach wręcz niemalże w czasie rzeczywistym).

Oczywiście, dzieje się tak dlatego, że operacje te, same w sobie będąc niejednokrotnie bardzo skomplikowane, wykonywane są za pomocą bardzo skomplikowanych algorytmów, bardzo skomplikowanym sprzętem. To sprawia, że o ile dawniej człowiek był zarówno użytkownikiem, serwisantem, a niejednokrotnie też i wytwórcą jakiejś przydatnej aparatury, o tyle teraz dwoma ostatnimi zadaniami obarczamy osoby naprawdę mające o tym znacznie większe od nas pojęcie, zadawalając się jedynie funkcją użytkownika (co i tak często przychodzi nam z niemałym trudem).

Czasem jednak chcielibyśmy, choć w ogólnym zarysie, wiedzieć jak to czy tamto działa, skąd się bierze to albo dlaczego wychodzi tak, a nie inaczej. Wiedząc jednak to, co już wiemy (że to wszystko działa dzięki bardzo skomplikowanym operacjom wykonywanym przez bardzo skomplikowane maszyny), musimy się liczyć z tym, że nawet próbując "liznąć" tylko czubek góry lodowej nie możemy poprzestać na banałkach typu: to działa tak, bo tamto działa w ten sposób. Mieliśmy okazję już tego doświadczyć w niejednym odcinku tej serii, bo też i ogólna tematyka - technika cyfrowa - nie jest łatwa. Najjaskrawiej jednak widać to było, kiedy próbowaliśmy "przerobić" analizę częstotliwościową DFT.

Jak wtedy pisałem, jest to jedna z dwóch najbardziej rozpowszechnionych operacji w dziedzinie cyfrowego przetwarzania danych audio (ale nie tylko). Skoro znamy już jedną z nich (nasze DFT, a w zasadzie FFT), to czas na tę drugą. I o tym dziś będę starał się, w możliwie najprzystępniejszy sposób, napisać. A mowa o

FILTRACJI CYFROWEJ

Początki filtracji cyfrowej sięgają sześćdziesiąt lat wstecz. We wczesnych latach pięćdziesiątych ubiegłego wieku wzrastająca dostępność komputerów zaowocowała pracami nad wygładzaniem spróbkowanych sygnałów dyskretnych i analizą dyskretnych systemów sterowania. Jednakże poważny rozwój tej dziedziny nastąpił w połowie lat sześćdziesiątych, kiedy eksperci od przetwarzania danych cyfrowych zdali sobie sprawę, że właśnie komputery pozwalają na analizę sygnałów cyfrowych i ich przetwarzanie w czasie rzeczywistym.

Obecnie, jak już wspomniałem, jest to norma, dostępna nawet dla zwykłego "śmiertelnika", dysponującego komputerem, dlatego jest to bardzo powszechnie stosowana forma obróbki audio. Tyle historii, wracamy do teraź niejszości.

NA CZYM POLEGA PROCES FILTRACJI?

Filtracja jest to, mówiąc ogólnie, proces przetwarzania dokonywany na sygnale w dziedzinie czasu, powodujący zmiany w widmie sygnału oryginalnego. Zmiana polega na redukcji, czyli, inaczej mówiąc, na odfiltrowaniu pewnych niepożądanych składowych sygnału wejściowego - zatem filtr przepuszcza pewne częstotliwości, tłumiąc inne. Spójrzmy na rysunek 1. Przedstawiono tam schematycznie proces filtracji w wersjach analogowej i cyfrowej.

Podczas gdy filtr analogowy działa na sygnale ciągłym, filtr cyfrowy przetwarza ciąg wartości próbek dyskretnych. Filtr cyfrowy może być dedykowanym układem scalonym, programowalnym procesorem bądź programem komputerowym. Tradycyjne liniowe filtry cyfrowe występują jako jeden z dwóch typów: filtry o skończonej odpowiedzi impulsowej SOI (ang. Finite Impulse Response - FIR) i filtry o nieskończonej odpowiedzi impulsowej NOI (ang. Infinite Impulse Response - IIR). Filtry SOI są najprostszym typem filtrów cyfrowych, zajmiemy się więc teraz właśnie nimi

FILTRY O SKOŃCZONEJ ODPOWIEDZI IMPULSOWEJ (FIR)

Zasadniczą cechą charakteryzującą ten rodzaj filtrów jest to, że do uzyskania bieżącej próbki sygnału na wyjściu filtru wykorzystują one próbkę bieżącą i próbki przeszłe sygnału wejściowego, nie korzystając z żadnych przeszłych próbek sygnału wyjściowego. Z tego powodu nazywa się je czasem filtrami nierekursywnymi. Nazwa ich wzięła się stąd, że filtry te, dysponując skończoną liczbą różnych od zera próbek sygnału wejściowego, na wyjściu zawsze mają skończoną liczbę próbek sygnału wyjściowego.

Trochę zamotane? Może inaczej. Jeśli na wejściu filtru SOI pojawi się nagle ciąg próbek o zerowej wartości, na wyjściu również otrzymamy ciąg, którego wartości będą równe zero. Może to wydaje się oczywiste, ale, jak się przekonamy później, wcale takie nie musi być (filtry NOI). Jednakże w przypadku KAŻDEGO filtru typu SOI powyższy warunek jest ZAWSZE spełniony.

Do obliczenia wartości próbek wyjściowych, czyli aby dokonać filtracji, filtr SOI korzysta z dodawania, w podobny sposób jak to się dzieje w procesie uśredniania. Zresztą sam proces uśredniania też jest filtrem, a dokładniej filtrem dolnoprzepustowym. Zobaczmy to na

PRZYKŁADZIE

Mamy pewne wyniki obserwacji, przedstawiające się następująco:

1. 10
2. 22
3. 24
4. 42
5. 37
6. 77
7. 89
8. 22
9. 63
10. 9
11. 51
12. 32
13. 49
14. 53
15. 29
16. 14
17. 48
18. 35
19. 70
20. 0
21. 0
22. 0

Jeśli teraz będziemy chcieli dokonać uśrednienia tych wyników w przedziałach po 5, to pierwszy wynik pojawi nam się po odczytaniu pięciu pierwszych wyników (tyle jest nam potrzebne, aby obliczyć wartość średnią z pięciu wyników). Średnią liczymy według wzoru znanego nam (mam nadzieję) od podstawówki, czyli suma pięciu kolejnych składników podzielona przez 5. Aby policzyć kolejną średnią dodajemy pięć kolejnych składników i dzielimy je przez 5, itd. Liczby nam może niewiele mówią, ale spójrzmy na rysunek 2, na którym wykreślono zarówno poszczególne składniki, jak i średnie, poczynając od piątego składnika.

Pierwsza rzecz, jak rzuca się nam w oczy, to fakt, iż wykres uśrednionych wyników jest "gładszy", niż ten, który odwzorowuje przebieg poszczególnych składników "wejściowych". Na tym wszak polega idea uśredniania i nie powinno nas to dziwić. Jeśli teraz potraktujemy oba wykresy jak przebiegi czasowe pewnych sygnałów akustycznych, to należy odczytać je i wysunąć następujące wnioski:
- sygnał wejściowy ("z kwadracikami") jest przebiegiem zawierającym składowe o dużych częstotliwościach (wynika to z gwałtownych zmian w ciągu czasowym sygnału)
- z sygnału uśrednionego wyeliminowano te gwałtowne zmiany (został wygładzony), a to oznacza, że część składowych o dużych częstotliwościach została odfiltrowana
- dodatkowo możemy zauważyć, że jeśli sygnał wejściowy (z kwadracikami) zmaleje do zera, to sygnał na wyjściu będzie dążył do zera i po 5 próbkach (tyle ile wynosi przedział uśredniania) również spadnie do zera.

Tak więc do obliczenia wartości wyjściowych pobraliśmy tylko wartości wejściowe, nie używaliśmy żadnej z przeszłych wartości wyjściowych układu uśredniającego, a poza tym wartość sygnału na wyjściu po tym, jak sygnał wejściowy będzie miał wartość zero, również osiągnie wartość zero. Można więc śmiało stwierdzić, że układ nasz jest filtrem SOI, który jest filtrem 5 rzędu i którego wagi (współczynniki) będą wszystkie takie same i wynosiły 1/5. Skąd te dwa ostatnie wnioski??

STRUKTURA FILTRU SOI

Przy uśrednianiu dodajemy pięć wartości i dzielimy sumę przez pięć, uzyskując wynik. Równie dobrze możemy pomnożyć każdą z wartości wejściowych przez 1/5 i następnie dokonać sumowania - obie metody są równoważne - wtedy wzór na obliczenie próbek na wyjściu układu będzie wyglądał:



x(k) to kolejne próbki wejściowe sygnału, natomiast nasz współczynnik ma stałą wartość dla wszystkich próbek i wynosi 1/5.

W ogólnym przypadku filtrów wcale nie musi być (i przeważnie nie jest) tak, że wszystkie współczynniki mają tę samą wartość. Struktura filtru SOI 5. rzędu przedstawiona jest na rysunku 3. Kolejne próbki wejściowe oznaczono jako x, poczynając od próbki pierwszej oznaczonej x(0), następna x(1) i tak dalej do x(n). Współczynniki filtru oznaczamy podobnie, literką h, poczynając od pierwszego (h(0)) i dalej do h(n).

Zauważmy, że współczynnik pierwszy filtru (h(0)) mnożymy przez próbkę x(n) (jeśli n=4 to przez x(4)), następny współczynnik h(1) przez x(n-1), czyli x(3), aż w końcu ostatni współczynnik h(n), czyli w naszym przypadku h(4), mnożymy przez próbkę x(n-4), czyli x(0). Uporządkowanie próbek wejściowych względem czasu zostało odwrócone, co ma swoje odzwierciedlenie w ogólnym wzorze dla filtrów SOI, który wygląda następująco:



Równanie to jest równaniem splotu, które symbolicznie oznaczane jest gwiazdką między czynnikami, czyli

y(n) = h(n) * x(n)

Wbrew pozorom nie jest to trudna operacja. Odwracamy porządek czasowy ciągu próbek wejściowych i rozpoczynamy przemnażanie odwróconego ciągu przez współczynniki filtru. I już!

Ale może wystarczy o splocie. Zastanówmy się jeszcze nad jedną istotną sprawą. Filtr jako taki może być dolno- lub górnoprzepustowy, bądź pasmowy, a poza tym może mieć różne częstotliwości graniczne. Jak możemy zbadać jaki filtr reprezentuje nasz układ uśredniający o pięciu jednakowych współczynnikach równych 1/5? Aby to określić musimy poznać odpowiedź impulsową układu.

ODPOWIEDŹ IMPULSOWA FILTRU SOI

Odpowiedź impulsowa jest dokładnie tym, co wynika z jej nazwy - jest to wyjściowy ciąg czasowy filtru, gdy na wejście podana zostanie pojedyncza próbka o jednostkowej wartości, po której i przed którą następują próbki o wartości zerowej. Polega to po prostu na przemnożeniu kolejnych współczynników filtru przez jednostkową próbkę.

Oznacza to, że odpowiedź impulsowa filtru SOI jest identyczna, jak wartość współczynników filtru (jeśli w naszym przypadku przemnożymy kolejne próbki przez współczynniki naszego filtru wynoszące 1/5, to otrzymamy pięć kolejno po sobie następujących próbek o amplitudzie 1/5). Dlatego pojęcia "współczynniki filtru SOI" i "odpowiedź impulsowa" są synonimami.

No dobrze, ale co nam po tym, skoro dalej nie wiemy, jak nasz filtr będzie reagował na podany sygnał, czyli z jakim filtrem mamy do czynienia? Potrzebna nam więc jest

CHARAKTERYSTYKA CZĘSTOTLIWOŚCIOWA FILTRU SOI

Aby otrzymać taką charakterystykę wystarczy wyznaczyć kształt odpowiedzi impulsowej w dziedzinie częstotliwości. A tego z kolei dokonamy, jeśli obliczymy DFT (a w zasadzie FFT) odpowiedzi impulsowej, czyli de facto DFT współczynników filtru. W przypadku filtru o pięciu współczynnikach równych 1/5 (czyli 0,2) kształt charakterystyki będzie wyglądał tak, jak na rysunku 4d (linia czerwona).

Jak widać, nagła zmiana wartości współczynników z 0 do 0,2 powoduje powstawanie listków bocznych (te inne "krągłości" poza listkiem głównym). Sprawdźmy jak zachowywać się będzie filtr SOI o współczynnikach jak na rysunku 4b (0.1, 0.2, 0.2, 0.2, 0.1) - na charakterystyce linia zielona. Zauważamy spadek zafalowań okupionych jednakże poszerzeniem listka głównego, co oznacza poszerzenie pasma przejściowego, a więc zmniejszenie nachylenia. W trzecim przypadku (rysunek 4c - współczynniki 0.04, 0.1, 0.2, 0.1, 0.04) pozbyliśmy się prawie całkowicie zafalowań kosztem jeszcze większego poszerzenia listka głównego.

Co trzeba zrobić, aby otrzymać idealny filtr dolnoprzepustowy, taki jak przedstawia rysunek 5a? Ideały mają to do siebie, że nie da się ich osiągnąć, dlatego są właśnie ideałami. Zaraz zresztą to się okaże.

Mając bowiem charakterystykę częstotliwościową filtru w prosty sposób możemy wyznaczyć jego odpowiedź impulsową, czyli współczynniki filtru. A o to właśnie nam chodzi, bo przecież filtr cyfrowy SOI to nic innego, jak pewna ilość współczynników (ilość zależy od rzędu filtru), przez które będziemy przemnażać kolejne (pamiętamy, że w odwróconej kolejności) próbki, aby na wyjściu otrzymać cyfrowy sygnał odfiltrowany. Może to nie wydaje się na pierwszy rzut oka oczywiste, ale trzeba pamiętać, że mamy do czynienia z sygnałami cyfrowymi, czyli ciągami próbek, a więc ciągami liczb.

Dlatego w przeciwieństwie do filtrów analogowych, gdzie dokonują się przemiany przebiegów prądów i napięć, w filtrze cyfrowym mamy do czynienia TYLKO z matematycznymi przekształceniami (mnożenie, dodawanie), a sam filtr cyfrowy to też nic innego, jak liczby (właśnie współczynniki filtru) z zaimplementowanym algorytmem, jak te współczynniki przekształcać matematycznie, aby otrzymać na wyjściu sygnał odfiltrowany cyfrowo.

To taka mała dygresja nad naturą filtrów cyfrowych. Wróćmy do, nazwijmy to nieco szumnie, projektowania filtrów SOI. A więc najchętniej chcielibyśmy otrzymać filtr dolnoprzepustowy, który przenosiłby nam pasmo od zera do częstotliwości granicznej fgr, bez żadnych zniekształceń, a całkowicie wycinał pasmo powyżej tej częstotliwości, czyli taki, jak na rysunku 5a.

Jak może pamiętamy, charakterystyka częstotliwościowa filtru powstaje poprzez poddanie odpowiedzi impulsowej filtru (współczynników) DFT, aby więc z charakterystyki częstotliwościowej otrzymać odpowiedź impulsową, a więc i współczynniki, musimy obliczyć odwrotne dyskretne przekształcenie Fouriera (IDFT) z charakterystyki częstotliwościowej.

Mniejsza już o to, jak tego dokonamy (są ku temu odpowiednie narzędzia, tak jak do obliczania FFT z ciągu czasowego), fakt jest taki, że otrzymamy przebieg, jak na rysunku 5b, którym są nasze współczynniki filtru. Problem w tym, że jest on nieprzyczynowy (ma wartości ujemne, a więc sygnał był na wyjściu zanim pojawiło się pobudzenie na wejściu - jest to praktycznie nie do zrealizowania), a poza tym jest nieskończony.

Z nieprzyczynowością możemy sobie dość prosto poradzić, przesuwając przebieg w stronę dodatnich wartości; to jedna z własności DFT - nie zmienia to w żaden sposób amplitudowej charakterystyki częstotliwościowej naszego filtru SOI, a jedynie dokonuje liniowego przesunięcia fazy, ale to nie jest tak istotne. Gorzej z ilością współczynników - nie możemy wziąć ich nieskończonej liczby, z oczywistych względów. Możemy więc spróbować okroić nieco ich liczbę, i to dość znacznie, bo przy bardzo dużej ich liczbie będziemy potrzebowali bardzo szybkiego procesora, aby dokonywał tysięcy mnożeń i dodawań.
Spróbujemy wyciąć tylko najistotniejszą "górkę", 9 ogniw filtra, jednakże wtedy nasz wynikowy filtr będzie miał charakterystykę, która znacznie odbiega od ideału (rysunek 6a). Zauważmy, że filtr nam się "rozpłynął" - zbocza stały się mało strome. Jeśli weźmiemy nieco ich więcej, 19, zbocza filtru stają się bardziej strome, jednak pojawiają się zafalowania w strefie przenoszenia (jak i w strefie zaporowej, co ma jednak mniejsze znaczenie).

Zobaczmy jeszcze, jak będzie wyglądał nasz filtr w przypadku, kiedy zastosujemy 31 współczynników (rysunek 6c). Jest znacznie lepiej ze stromością, ale zafalowania pozostały, i to na takim samym poziomie, niestety. Widzimy więc, że możemy wpływać na kształt filtru, a dokładnie na stromość jego charakterystyki przejściowej, zwiększając liczbę ogniw (współczynników filtru), co oczywiście znacząco spowolni nam prace takiego filtru. Niestety, nawet zwiększanie liczby ogniw nie uwolni nas od zafalowań. Jest jednak i na to pewna rada.

ZNÓW OKNA

Co prawda nie pozbędziemy się zafalowań całkowicie, jak i nigdy nie osiągniemy filtrów o zboczach idealnie pionowych, ale możemy je minimalizować. Pamiętcie może, jak poradziliśmy sobie ze stratą zafalowań w DFT? Oczywiście, nieśmiertelne okna. W tym przypadku postępujemy dokładnie tak samo, choć może wykorzystujemy do tego nieco inne okna (np. okno Kaisera czy okno Czebyszewa).

Proszę spojrzeć na rysunek 7, jak w tym przypadku zmniejszyły nam się zafalowania, jednak kosztem zmniejszenia nachylenia zboczy. No, ale z tym możemy sobie poradzić, zwiększając ilość współczynników filtru (rysunek 7b). Proszę jeszcze zauważyć, że dokładnie to samo miało miejsce na rysunku 4, kiedy zmniejszyliśmy gwałtowność zmian amplitudy próbek, czyli tak jakbyśmy zastosowani jedno z okien.

Widzimy więc, że cyfrowe przetwarzanie sygnałów rządzi się pewnymi żelaznymi prawami, które obowiązują wszędzie: w DFT, w FFT i także w filtracji cyfrowej. Są to dwie generalne zasady:
- zwiększając ilość próbek (współczynników) polepszamy rozdzielczość (stromość zboczy)
- stosując okna zmniejszamy zafalowania charakterystyki kosztem rozdzielczości (zmniejszenie nachylenia)

Umiejętne korzystanie z tych dwóch praw pozwala na osiągniecie kompromisu pomiędzy rozdzielczością, czy też stromością zboczy, a zafalowaniami.

FAZA FILTRÓW SOI

Na zakończenie tematu o filtrach SOI kilka zdań o fazie, gdyż, jak się okazuje, jest to bardzo ważna właściwość tych filtrów. A mianowicie filtry FIR, mające symetryczne współczynniki, oferują liniową charakterystykę fazy w paśmie przenoszenia, dzięki czemu to właśnie te filtry są chętniej wybierane, niż filtry NOI. Czytelnik mógłby się dziwić, cóż tak istotnego jest w tym fakcie. Ano jest, gdyż ma to wpływ na tzw. opóźnienia grupowe.

Opóźnienie grupowe w filtrach SOI jest stałe (gdyż faza jest liniowa), co oznacza, że wszystkie składowe częstotliwościowe sygnału wejściowego są jednakowo opóźniane, a to z kolei oznacza, że nie ma żadnych zniekształceń fazowych w sygnale wyjściowym. Ma to kapitalne znaczenie, gdyż w przypadku sygnałów cyfrowych zniekształcenia fazowe są o wiele bardziej "nieprzyjemne", niż zniekształcenia amplitudowe, a więc jest to bardzo istotna zaleta filtrów SOI.

No, i to tyle na temat filtrów o skończonej odpowiedzi impulsowej. Za miesiąc kilka istotnych zdań o filtrach NOI (o nieskończonej odpowiedzi impulsowej) oraz porównanie obu rodzajów filtrów, co pomoże nam zastanowić się nad pytaniem: gdzie i kiedy będziemy stosować filtry NOI lub SOI?

Jan Erhard


Jan Erhard z wykształcenia jest informatykiem i specjalistą od sieci cyfrowych, zaś z zamiłowania muzykiem. Zajmuje się też realizacją dźwięku, stąd jego zainteresowania i duża wiedza na temat cyfrowego przetwarzania sygnałów.

Estrada i Studio Kursy
Produkcja muzyczna od podstaw
Produkcja muzyczna od podstaw
50.00 zł
Produkcja muzyczna w praktyce
Produkcja muzyczna w praktyce
120.00 zł
Bitwig Studio od podstaw
Bitwig Studio od podstaw
55.00 zł
Sound Forge od podstaw
Sound Forge od podstaw
40.00 zł
Kontakt 5 Kompedium
Kontakt 5 Kompedium
60.00 zł
Zobacz wszystkie
Live Sound & Instalation Newsletter
Krótko i na temat, zawsze najświeższe informacje