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