Zastosowania Procesorów Sygnałowych dr inż. Gregor Swoch greg@multimed.org p. 732 - Katedra Systemów Multimedialnych Filtry IIR
Wstęp Na tym wykładie: IIR drugi typ filtrów cyfrowych. Jak projektować i implementować je na DSP. Jak chronić się pred efektami prepełnienia. Jak skorystać asemblerowych implementacji biblioteki DSPLIB. W jakich sytuacjach korystniej jest używać filtrów IIR amiast FIR.
Filtry IIR IIR Infinite Impulse Response Filtr cyfrowy o nieskońconej odpowiedi impulsowej. Filtry rekursywne wejściem sąarówno nowe próbki sygnału, jak i poprednie wyniki filtracji. Transmitancja filtru IIR rędu N: N N N N a a a b b b b H + + + + + + + + = L L 2 2 1 1 2 2 1 1 0 1 ) (
Filtry IIR Filtr IIR implementuje sięna podstawie równania różnicowego. Filtr rędu 2 (dwukwadratowy, biquad): H b + b + b 1 2 0 1 2 ( ) = 1 2 1+ a1 + a2 Równanie różnicowe: y ( 2 n) = b0 x( n) + b1 x( n 1) + b2 x( n 2) a1 y( n 1) a y( n 2)
Projektowanie filtrów IIR Cyfrowe filtry IIR sąodpowiednikami filtrów analogowych. Projektuje sięfiltry analogowe, a następnie prekstałca sięje do filtru cyfrowego, wykle a pomocą prekstałcenia dwuliniowego. Wynikiem projektu są współcynniki b, a. Obecnie używamy do tego celu oprogramowania komputerowego (Matlab, python+scipy, itp.).
Parametry filtru Parametry projektowe filtru: cęstotliwości granicne serokość pasma prejściowego rąd filtru poiom afalowań w paśmie: prepustowym aporowym
Typy filtrów IIR Butterwortha Cebysewa I Cebysewa II eliptycny
Nieliniowość fay Filtry IIR nie achowują liniowej charakterystyki faowej F. Butterwortha: F. eliptycny:
Kwantyacja współcynników Pierwsy problem. Wynik oblicenia współcynników dla filtru ButterworthaDP 2. rędu, fc= 1 kh: 0.0039, 0.0078, 0.0039, -1.8153, 0.8310 Jeden e współcynników awse nie mieści się w akresie (-1, 1). Musimy więc apisaćwspółcynniki filtru w formacie Q1.14, mnożąc je pre 16384. const int wsp_iir[] = {64, 128, 64, -29743, 13615}; // b0, b1, b2, a1, a2
Implementacja (forma I) Implementacja w formie I (direct form I) - bepośrednio równania różnicowego y ( 2 n) = b0 x( n) + b1 x( n 1) + b2 x( n 2) a1 y( n 1) a y( n 2)
Implementacja (forma I) Dla filtru rędu Npotrebujemy bufora na 2N+1 próbek: N+1 wejściowych i N wyjściowych. Dla filtrów niskiego rędu możemy użyćbufora liniowego (wygodniej). Należy pamiętaćo wypełnieniu bufora erami pred pierwsąfiltracją inacej podamy śmieci jako stan pocątkowy. const int wsp_iir[] = {64, 128, 64, -29743, 13615}; int bufor[5];
Implementacja (forma I) // presuwanie bufora: bufor[2] = bufor[1]; bufor[1] = bufor[0]; bufor[0] = probka; // x(n-2) poprednia x(n-1) // x(n-1) poprednia x(n) // x(n) nowa próbka wejściowa // filtracja long suma = 0; suma = _smac(suma, wsp_iir[0], bufor[0]); // b0 * x(n) suma = _smac(suma, wsp_iir[1], bufor[1]); // + b1 * x(n-1) suma = _smac(suma, wsp_iir[2], bufor[2]); // + b2 * x(n-2) suma = _smas(suma, wsp_iir[3], bufor[3]); // - a1 * y(n-1) suma = _smas(suma, wsp_iir[4], bufor[4]); // - a2 * y(n-2) int wynik = (int)((suma + 16384) >> 15); bufor[4] = bufor[3]; // y(n-2) poprednia y(n-1) bufor[3] = wynik; // nowe y(n-1)
Implementacja (forma I) Uwagi do kodu. Mnożymy licbęq15 (próbka) pre Q1.14 (współcynnik) wynik Q1.29. Tryb ułamkowy amienia wynik na Q1.30. Potrebujemy wyniku Q15, więc musimy go presunąćo30 15 = 15miejsc. Dodanie 16384 aokrągla wynik. Zamiast robićręcnie 5 operacji, możemy użyćpętli instrukcją _smac, jeżeli apisemy współcynniki a preciwnym nakiem.
Implementacja forma II Alternatywna forma Direct form II 2) ( 1) ( ) ( ) ( 2) ( 1) ( ) ( ) ( 2 1 0 2 1 + + = = n w b n b w n w b n y n w a n w a n x n w
Forma I vs. forma II W implementacji miennoprecinkowej, forma II jest lepsa wymaga mniejsych buforów. W implementacji stałoprecinkowej mamy problem prepełnienia akresu w trakcie obliceń. Prepełnienie powoduje niekstałcenie wyniku, co ma wpływ na kolejne próbki(rekursywność!). Forma Ijest mniej wrażliwa na efekty prepełnienia, jest atem alecanadla implementacji stałoprecinkowej.
Sum kwantyacji Współcynniki filtru są kwantowane, atem różnią się one od obliconych w projekcie. Ma to wpływ na charakterystykę filtru. Filtr IIR jest rekursywny, atem błąd kwantyacji ma udiałw oblicaniu kolejnych próbek efekty kwantyacji kumulują się. Wpływ sumu kwantyacji w filtrach IIR jest nacnie więksy niż w prypadku filtru FIR.
Sum kwantyacji Porównanie sumu kwantyacji dla filtrów IIR rędu 2 (niebieski) i 8 (cerwony):
Stabilność filtru IIR Inny sposób apisu transmitancji filtru IIR: H ( ) = G ( r0 )( r1 )...( rn ) ( p )( p )...( p ) r: era miejsca erowe licnika p: bieguny(poles) miejsca erowe mianownika G: wmocnienie układu 1 2 Filtr IIR jest stabilny, jeżeli bieguny nie leżąna ewnątr okręgu jednostkowego: p k 1 N
Stabilność filtru IIR Co w praktyce onaca stabilność filtru IIR? Filtrstabilny: po wyłąceniu sygnału wejściowego, sygnał wyjściowy eruje się po maks. N próbkach. Filtr niestabilny: wyłącamy sygnałna wejściu, a filtr nadal generuje próbki na wyjściu. Filtr wbuda się (wpada w niekontrolowane oscylacje) i diała nieprawidłowo. Typowy filtr IIR musi być stabilny.
Stabilność filtru IIR Oprogramowanie do projektowania filtrów wykle da nam stabilny filtr (ale należy to sprawdić!). Cęsto filtry projektuje się na granicy stabilności - bieguny na okręgu jednostkowym lub blisko niego. Błędy kwantyacji mogąspowodować, że bieguny wyjdą poa okrąg jednostkowy. Filtr stanie się niestabilny! Zawse należy sprawdićpołożenie biegunów po kwantyacji współcynników!
Struktura kaskadowa IIR Problemy implementacji filtrów IIR wyżsych rędów na procesore stałoprecinkowym: rośnie wpływ sumu kwantyacji, błąd kwantyacji w jednym miejscu wpływa na diałanie całego filtru, więcej współcynników rekursywnych więksa kumulacja błędów, wrasta ryyko prepełnienia akresu.
Struktura kaskadowa IIR Ra jesce alternatywny apis transmitancji: Możemy to podielić na kilka cynników: Struktura kaskadowa seregowe połącenie filtrów. ( )( ) ( ) ( )( ) ( ) N N p p p r r r G H =...... ) ( 2 1 1 0 ( )( ) ( )( ) = k k k k k k p p r r G H 1 0 1 0 ) (
Struktura kaskadowa IIR Filtr IIR parystego rędu Nmożna predstawićjako kaskadowe połącenie N/2 filtrów dwukwadratowych: W implementacji stałoprecinkowej: sum kwantyacji ma wpływ tylko na daną sekcję, całkowity błąd kwantyacji ulega mniejseniu, maleje ryyko prepełnienia i niestabilności. + + + + = k k k k k k k a a b b b g H 1 1 1 0 2 2 1 1 0 1 ) (
Struktura kaskadowa IIR W implementacji miennoprecinkowej: podiał na sekcje jest be nacenia mnożenie jest premienne. W implementacji stałoprecinkowej to jużma nacenie. Jedna para er/biegunów może spowodować prepełnienie, inna nie! Zbudowanie optymalnej struktury kaskadowej do implementacji na stałoprecinkowym DSP nie jest prostym adaniem.
Struktura kaskadowa IIR Zacynamy od układu er, biegunów i wmocnienia. Musimy: podielić wmocnienie na sekcje, ułożyćpary er i pary biegunów, połącyćera i bieguny e sobąw sekcje, w taki sposób, aby nie występowały prepełnienia. Wmocnienie sygnału w każdej sekcji powinno być tak duże, jak to możliwe, ale nie powodując prepełnienia.
Prykład projektu Filtr DP Butterwortha, rąd 8, fc= 1 kh Dostajemy projektu: k = 2.43444901944e-10 SOS = [[ 1. 2. 1. 1. -1.75785265 0.77302109] [ 1. 2. 1. 1. -1.78875835 0.80419348] [ 1. 2. 1. 1. -1.84881984 0.86477323] [ 1. 2. 1. 1. -1.93365048 0.95033587]] Casami wmocnienie kjest wciągane do pierwsej sekcji treba je wyciągnąć.
Prykład projektu Wmocnienie 2.43444901944e-10jest małe jego astosowanie do jednej sekcji wyeruje współcynniki. Spróbujmy rołożyć to wmocnienie na ctery sekcje: k 1/4 = 0.00395002797191 mnożymy licnik każdej sekcji pre tę wartość. SOS = [[ 0.00395003 0.00790006 0.00395003 1. -1.75785265 0.77302109] [ 0.00395003 0.00790006 0.00395003 1. -1.78875835 0.80419348] [ 0.00395003 0.00790006 0.00395003 1. -1.84881984 0.86477323] [ 0.00395003 0.00790006 0.00395003 1. -1.93365048 0.95033587]]
Prykład projektu Uyskany projekt nie apewnia,że nie wystąpi prepełnienie. Zobacmy maksymalne wmocnienia po prejściu pre każdą sekcję: [1.04164374448 1.06627496682 1.0560301017 1.00000001587] Chcemy aby wmocnienie nie prekracało 1. Predstawimy jedno możliwych rowiąań. Oblicenie maks. wmocnienia dla sekcji SOS: maksimum charakterystyki amplitudowej.
Prykład projektu Bieremy pierwsąsekcjęi oblicamy maksymalne wmocnienie charakterystyki amplitudowej. Dielimy współcynniki b tej sekcji pre oblicone wmocnienie. Bieremy pierwse dwie sekcje (uwględniając modyfikacje), oblicamy maks. wmocnienie. Dielimy wsp. b sekcji drugiej pre wynik. Powtaramy dla treciej i cwartej sekcji. Prykładowy kod w materiałach pomocnicych.
Filtr IIR w DSPLIB Spośród implementacji IIR w Asemblere biblioteki DSPLIB, najlepiej nadaje się funkcja iircas51. x wskaźnik do próbki wejściowej (&probka) lub do bufora próbek do pretworenia (bufor_wej) h wskaźnik do współcynników filtru, w kolejności: b0, b1, b2, a1, a2; sekcja po sekcji (be a0!) (DATA*)wsp_iir
Filtr IIR w DSPLIB r wskaźnik do próbki wyjściowej (&wynik) lub do bufora próbek wyjściowych (bufor_wyj) dbuffer bufor o długości (4 * licba sekcji + 1), który musimy sami utworyć, nbiq licba sekcji dwukwadratowych, nx licba próbek do pretworenia. Funkcja wraca wartość oflag, która jest równa 1 jeżeli wystąpiło prepełnienie podcas obliceń.
Niedopełnienie Niedopełnienie (underflow) występuje wtedy, gdy wynik operacji jest byt mały, aby mógłbyćapisany na najmniej nacącym bicie. Dla 32 bitów (Q31) występuje, gdy wynik < 2-31 Najcęściej jest spowodowany mnożeniem pre małe licby. Pred niedopełnieniem można się chronić popre odpowiednie skalowanie danych ora odpowiednią kolejność diałań.
Filtr IIR w DSPLIB (c.d.) Implementacja iircas51akłada, że próbki i współcynniki są apisane jako Q15. Ale nase współcynniki są Q1.14! Wynik filtracji y(n) (Q1.14) jest traktowany jako Q15. Jest więc dwukrotnie a mały! W reultacie: filtr pretwara błędne wyniki y(n- ), może wystąpićniedopełnienie na dalsych sekcjach erowy wynik filtracji.
Filtr IIR w DSPLIB (c.d.) Aby filtr diałałprawidłowo dla współcynników Q1.14, treba modyfikować kod asemblerowy. Odpowiedni plik (iircas51.asm) należy skopiować do katalogu projektu i dodać mnożenie pre 2. Pliki do projektu ZPS będą już modyfikowane.
Filtr IIR w DSPLIB (c.d.) Prykład wywołania funkcji iircas51 const int wsp_iir[] = { 62, 124, 62, -28801, 12665 63, 126, 63, -29307, 13176 65, 131, 65, -30291, 14168 68, 137, 68, -31681, 15570}; int bufor[17]; // int probka wejściowa próbka do filtracji // int wynik wyjściowa próbka po filtracji iircas51(&probka, (DATA*)wsp_iir, &wynik, bufor, 4, 1);
Podsumowanie implementacja IIR Ustalić parametry projektowe cęstotliwość granicną, rąd filtru, typ charakterystyki. Oblicyć współcynniki a pomocą oprogramowania. Podielićera i bieguny na sekcje dwukwadratowe, tak aby minimaliowaćbłędy kwantyacji ora ryyko prepełnienia i niestabilności. Unormować maksymalne wmocnienie każdej sekcji. Sprawdić stabilność i maksymalne wmocnienie. Zaimplementować a pomocą np. iircas51.
Podsumowanie filtry IIR Cechy filtrów IIR: ( ) niekstałcają faę, ( ) mogą stać się niestabilne, ( ) więksy wpływ sumu kwantyacji na wyniki, ( ) w implementacji stałoprecinkowej: duża podatność na prepełnienie i niedopełnienie, ( ) dużo trudniejse projektowanie, (+) prosta implementacja,
Podsumowanie filtry IIR (+) więksa skutecnośćfiltracji niżfir mniejsa licba obliceń dla tego samego efektu. Porównanie: IIR rędu 8 vs. FIR rędu 30
Podsumowanie filtry IIR Kiedy więc warto stosować IIR amiast FIR? gdy musimy oscędać cykle procesora -IIR użyje ich mniej, gdy wymóg liniowości fay nie jest krytycny, gdy potrafimy sobie poradić projektem IIR W więksości prypadków, dopóki mamy wystarcająco dużo cykli DSP, filtry FIR są łatwiejse w projektowaniu i w implementacji ( lepiej się achowują ).
Podsumowanie filtry IIR Co musimy umieći o cym pamiętać? Różnice międy IIR i FIR. Jak aimplementowaćfiltr IIR w C. Dlacego sum kwantyacji jest ważniejsy w IIR. Jak wygląda struktura kaskadowa i dlacego należy niej korystaćna DSP. Jak chronićsiępred prepełnieniem modyfikując wmocnienie sekcji dwukwadratowych. Jak uruchomić filtr IIR a pomocą DSPLIB.