Rekurentní filtry IIR filtry filtry se zpětnou vazbou a nekonečnou impulsní odezvou Výstupní signál je závislý na vstupu a minulém výstupu. Existují různé konvence zápisu, pozor na to! Někde je záporná zpětná vazba v koeficientech, někde ne. Občas se říká jinak koeficientům u vstupu a výstupu,. Příklad: Moudrá kniha Matlab [ ] = 0 [ ] + [ ] + 2 [ 2] + by[ n ] by[ n 2] by[ n 3] yn axn axn axn L + + + + L 2 3 [ ] = [ ] + 2 [ ] + 3 [ 2] + ayn [ ] ayn [ 2] ayn [ 3] yn bxn bxn bxn L L 2 3 4 Dále budeme používat Matlabovskou notaci, tedy koeficienty b budou jsou u vstupů a koeficienty a jsou u zpětné vazby. A protože Matlab indexuje od jedničky, budeme tak indexovat i my. Koeficienty a a b plně určují chování filtru návrh filtru = nalezení příslušných koeficientů Proč se vůbec dělají filtry se zpětnou vazbou? (zpětná vazba = zdroj potenciálních potíží, stabilita, ) FIR filtr, např založený na sinc bude fungovat výborně, když bude jádro dlouhé (nebudu moc ořezávat). Konvoluční jádro = impulsní odezva. Čím delší jádro, tím lepší filtrace. Čím delší jádro, tím větší je výpočetní náročnost. Nejlepší by bylo nekonečné jádro. IIR filtr má nekonečné jádro a přitom má jen pár koeficientů, to vypadá slibně!. Je to všelék? Není, protože jádro je sice nekonečně dlouhé, ale nemá ten správný tvar. Takže filtr je sice rychlý, ale kvalita filtrace je často bídná.
Nejjednodušší IIR filtr Single pole Vztahy mezi hodnotami koeficientů a odezvou filtru vycházejí ze z-transformace (diskrétní Laplaceova transformace). Buď si vzpomenete na předměty jako je automatizace, nebo se kouknete do chytré knihy, nebo budete filtry jen používat, aniž budete vědět, co přesně a proč se děje. Nejjednodušší IIR filtr typu dolní propust má jen dva koeficienty, b a a 2. Například b = 0,5, a 2 =-0,85. Nejjednodušší IIR filtr typu horní propust má tři koeficienty: b, b 2 a a 2. Např. b =0,93, b 2 =-0,93, a 2 = -0,86. Máme tedy dolní i horní propust a k popisu potřebujeme jen pár čísel! Jak najdeme ty správné koeficienty? Napíšeme jednoduché parametrické rovnice, a volbou parametru budeme měnit chování filtru. Parametr nazveme třeba w. Dolní propust Horní propust b a 2 = w = w b b a 2 2 ( w) ( w) = + /2 = + /2 = w Jak budeme parametr volit? To záleží na tom, co od filtru chceme. Základem je hraniční frekvence (cutoff frequency) f C. 2 f C w= e π, kde f C je v rozsahu 0 0,5 (půlka vzorkovací frekvence)
Jak to vypadá pro různé hraniční kmitočty? 0.9 0.8 0.7 Dolni propust - single pole fc = 0.0 fc = 0. fc = 0.25 0.9 0.8 0.7 Horni propust - single pole fc = 0.0 fc = 0. fc = 0.25 Magnituda 0.6 0.5 0.4 Magnituda 0.6 0.5 0.4 0.3 0.3 0.2 0.2 0. 0. 0 0 0.05 0. 0.5 0.2 0.25 0.3 0.35 0.4 0.45 0.5 Frekvence 0 0 0.05 0. 0.5 0.2 0.25 0.3 0.35 0.4 0.45 0.5 Frekvence Frekvenční odezvy pro různé hraniční kmitočty Cvičení pro zadaný signál vytvořte a vyzkoušejte IIR single pole filtry, které vyhladí vysoké frekvence (dolní propust) a které naopak ponechají pouze vysoké frekvence (horní propust)
Vychytanější IIR filtry Single pole IIR filtr je vhodný pro filtraci v časové oblasti. Ve frekvenční oblasti jsou lepší složitější filtry: Butterworthův filtr bez překmitu Čebyševův filtr typu překmity v propustné oblasti Čebyševův filtr 2 typu překmity v nepropustné oblasti Eliptický filtr překmity úplně všude
Vždy je něco za něco! Butterworth nemá překmity ale je děsně pomalý / Eliptický filtr je děsně rychlý, ale kmitá všude Čebyševův filtr má překmity v časové oblasti / funguje dobře ve frekvenční Čím víc pólů, tím líp filtr filtruje / je pomalejší (ale pořád je to řádově lepší než FIR) Čím víc pólů, tím líp filtr filtruje / maximální počet pólů je závislý na hraniční frekvenci Příklad: dolní propust Čebyšev má koeficienty b řádově 0-9, koeficienty a řádově 0 0. Protože máme k dispozici omezený počet bitů na číslo, bude zaokrouhlovací chyba u koeficientů a větší, než hodnoty koeficientů b filtr nebude fungovat! 0.9 0.8 0.7 Cebysev - fc = 0.25 2 poly 4 poly 6 polu Magnituda 0.6 0.5 0.4 0.3 0.2 0. 0 0 0.05 0. 0.5 0.2 0.25 0.3 0.35 0.4 0.45 0.5 Frekvence Obr. Čebyšev s různým počtem pólů a fixním překmitem
IIR filtry v Matlabu Pokud nechceme divoce klikat v fdatool, můžeme vyrábět filtry přímo, a koukat na jejich vlastnosti. Čebyšev typu Syntaxe: [b,a] = cheby(n,rp,wn) Kde b,a koeficienty n počet pólů (řád filtru) Rp překmit v propustné oblasti Wn normalizovaná frekvence Příklad: Data máme navzorkovaná na khz, chceme filtr 4 řádu, s hraniční frekvencí 300Hz a maximálním překmitem v propustné oblasti 0,5dB. [b,a] = cheby(4,0.5,300/000); Příklad2: Stejná vzorkovací frekvence, ale chtěl bych pásmovou propust 00-200Hz pomocí Čebyševa desátého řádu: n= 0; Rp = 0.5; Wn = [00 200]/500; [b,a] = cheby(n,rp,wn);
Když už mám k dispozici koeficienty, můžu si snadno zobrazit frekvenční odezvu, impulsní odezvu, atd. Většina funkcí rovnou nakreslí příslušný graf. Frekvenční odezva Syntaxe: [h,w]= freqz(b,a,l) Kde h frekvenční odezva (komplexní) b,a koeficienty filtru l délka (FFT, default 52) Impulsní odezva Syntaxe: [h,t] = impz(b,a) Kde h impulsní odezva Další IIR filtry obdobná syntaxe jako u Čebyševa typu: Čebyšev 2 typu: [b,a] = cheby2(n,rs,wn) Eliptický filtr: [b,a] = ellip(n,rp,rs,wn) Butterworth: [b,a] = butter(n,wn)