Filtri sa konačnim impulsnim odzivom (FIR) filtri

Digitalna obrada signala, Vladimir Petrović

U ovom notebook-u ćemo se baviti sintezom sistema sa konačnim impulsnim odzivom. Najpre će biti predstavljen metod ograničavanja impulsnog odziva idealnog filtra, a zatim i optimizacioni postupak projektovanja filtara.

Uvod

Filtri sa konačnim impulsnim odzivom (__F__inite __I__mpulse __R__esponse - FIR) u opštem obliku imaju funkciju prenosa izraženu sa: $$ H(z) = \sum_{n=0}^{N} b_n z^{-n}, $$ gde su $b_n$ koeficijenti filtra, tj. koeficijenti impulsnog odziva filtra. $$ H(z) = \mathcal{Z} \left\lbrace h[n] \right\rbrace = \sum_{n=0}^{N} h[n] z^{-n} \implies b_n = h[n] $$

Prenosna funkcija se može zapisati i na sledeći način

$$ H(z) = \sum_{n=0}^{N} b_n z^{-n} = \frac{1}{z^N}\sum_{n=0}^{N} b_n z^{N-n} = k\frac{\prod_{n=0}^{N} (z - z_{on})}{z^N}, $$

što znači da su svi polovi funkcije prenosa u tački $z = 0$ i da oblik funkcije prenosa određuje samo raspored nula. Zbog ove činjenice, FIR filtri moraju biti većeg reda nego IIR filtri koji zadovoljavaju iste specifikacije.

Projektovanje filtara ograničavanjem idealnog impulsnog odziva

Najjednostavniji, ali ne i optimalan, način da se dobiju koeficijenti funkcije prenosa je odsecanjem impulsnog odziva idealnog filtra. Impulsni odziv idealnog filtra je, naravno, beskonačan, ali se može analitički izračunati korišćenjem inverzne Furijeove transformacije.

$$ h_{ID}[n] = \frac{1}{2 \pi} \int_{-\pi}^{\pi} H_{ID} \left( e^{j\Omega} \right) e^{j\Omega n} d\Omega $$

Na primer, za NF filtar važi:

$$ H_{ID} \left( e^{j\Omega} \right) = \begin{cases}0, & -\pi < \Omega < -\Omega_c \\ 1, & -\Omega_c < \Omega < \Omega_c\\ 0, & \Omega_c < \Omega < \pi \end{cases}, $$

pa je impulsni odziv idealnog NF filtra

$$ h_{ID}[n] = \frac{1}{2 \pi} \int_{-\pi}^{\pi} H_{ID} \left( e^{j\Omega} \right) e^{j\Omega n} d\Omega = \frac{1}{2 \pi} \int_{-\Omega_c}^{\Omega_c} 1 \cdot e^{j\Omega n} d\Omega = \frac{\sin(n\Omega_c)}{n\pi}. $$

Ograničavanje impulsnog odziva podrazumeva množenje prozorskom funkcijom koja mora biti simetrična jer se u tom slučaju očuvava simetrija koeficijenata, što je neophodan uslov za linearnost faze FIR filtra. Ako je prozorska funkcija dužine $M$ odbiraka, onda se pre odsecanja impulsni odziv idealnog filtra mora zakasniti za $(M-1)/2$ odbiraka da bi dobijeni sistem bio kauzalan i da bi se očuvala simetrija koeficijenata pri množenju sa prozorskom funkcijom kojoj odbirci počinju od indeksa $n = 0$.

U sledećem primeru ćemo projektovati NF FIR filtar korišćenjem više različitih prozorskih funkcija. Treba obratiti pažnju na deljenje nulom, tj. na neodređeni izraz $$ \frac{\sin(0\cdot\Omega_c)}{0\cdot\pi}. $$

Ovo se dešava kada je red filtra paran, tj. kada je broj odbiraka impulsnog odziva neparan. Tada se središnji odbirak mora izračunati kao: $$ h_{ID}[0] = \lim_{n \rightarrow 0} \frac{\sin(n\Omega_c)}{n\pi} = \frac{\Omega_c}{\pi}. $$

Primetimo da množenjem različitim prozorskim funkcijama dobijamo različitu frekvencijsku karakteristiku. Naravno, ovo je očekivano, s obzirom na to da će proizvod u vremenskom domenu dati konvoluciju u frekvencijskom domenu. Dakle, frekvencijska karakteristika filtra će biti konvolucija frekvencijske karakteristike idealnog filtra i frekvencijske karakteristike prozorske funkcije. S obzirom na ovu činjenicu, lako je zaključiti da će slabljenje u nepropusnoj zoni i oscilacije u propusnoj zoni biti određeni slabljenjem bočnih lukova prozorske funkcije - što je slabljenje bočnih lukova veće, to su oscilacije u propusnom i nepropusnom opsegu manje. Takođe, širina prelazne zone će biti određena širinom glavnog luka prozorske funkcije - što je glavni luk uži, to je prelazna zona uža.

Primena Kajzerove prozorske funkcije u projektovanju FIR filtara

Od svih prozorskih funkcija, za projektovanje filtara se najčešće koristi Kajzerova prozorska funkcija. Glavni razlog je što se parametrom $\beta$ može podešavati slabljenje bočnih lukova, a brojem odbiraka $N$ se može podešavati širina glavnog luka. Postoje empirijske formule koje daju procenu ovih parametara na osnovu specifikacija filtra. Od njih treba krenuti prilikom projektovanja filtara. Međutim, treba naglasiti da one ne garantuju da će specifikacije biti zadovoljene. Neophodno je proveriti da li su specifikacije zadovoljene i iterativno podešavati parametre prozorske funkcije sve dok one ne budu zadovoljene. Najlakše je podešavati red filtra, tj. povećavati ga sve dok specifikacije ne budu zadovoljene.

Empirijsko određivanje parametara filtra se postiže na sledeći način:

  1. Najpre se iz specifikacija graničnih učestanosti odredi širina prelazne zone, na primer, za NF filtar je: $$ B_t = \Omega_a - \Omega_p. $$ Ukoliko ima više prelaznih zona, onda se za parametar $B_t$ uzima ona najuža, na primer za PO filtar je: $$ B_t = \min(\Omega_{p1} - \Omega_{a1}, \Omega_{a2} - \Omega_{p2}). $$

  2. Zatim se odrede vrednosti dozvoljenih amplituda oscilacija u propusnom i nepropusnom opsegu: $$ \delta_a = 10^{-0,05\alpha_a}, \; \; \delta_p = \frac{10^{0,05\alpha_p} - 1}{10^{0,05\alpha_p} + 1}. $$ Ukoliko ima više različitih propusnih/nepropusnih opsega, izračunaju se za sve opsege. Zatim se usvoji globalni parametar $\delta$ tako da je: $$ \delta = \min(\delta_{a1}, \delta_{p1}, \delta_{a2}, \delta_{p2}, ...). $$ U slučaju da je $\delta < \delta_a$, onda se izračuna novo slabljenje u nepropusnom opsegu prema izrazu: $$ \alpha_a = -20\log \delta. $$

  3. Parametar $\beta$ se odredi na osnovu izraza: $$ \beta = \begin{cases} 0, & \alpha_a < 21\, \mathrm{dB}\\ 0{,}5842(\alpha_a - 21)^{0,4} + 0{,}07886(\alpha_a - 21), & 21\, \mathrm{dB} \leq \alpha_a \leq 50\, \mathrm{dB}\\ 0{,}1102(\alpha_a - 8{,}7), & \alpha_a > 50\, \mathrm{dB}\\ \end{cases}. $$

  4. Dužina impulsnog odziva filtra, tj. broj odbiraka prozorske funkcije, se odredi iz sledećih izraza: $$ D = \begin{cases} 0{,}9222, & \alpha_a \leq 21\, \mathrm{dB}\\ \frac{\alpha_a - 7{,}95}{14{,}36}, & \alpha_a > 21\, \mathrm{dB}\\ \end{cases}, $$ $$ M \geq \frac{2\pi D}{B_t} + 1. $$

Nakon što je određena dužina impulsnog odziva i parametar $\beta$, potrebno je odrediti impulsni odziv idealnog filtra. Granične učestanosti idealnog filtra treba odrediti tako da se one nalaze na sredini prelaznih zona, tj: $$ \Omega_{c,i} = \frac{\Omega_{a,i} + \Omega_{p,i}}{2}. $$

NF filtar

Za neke kombinacije parametara, možemo primetiti da filtar ne zadovoljava specifikacije. Zbog toga je neophodno uvećavati red filtra sve dok specifikacije ne budu zadovoljene. Proveru specifikacija moramo raditi u programskog kodu i to ćemo uraditi u narednom primeru.

PO filtar

Za idealni PO filtar važi: $$ H_{ID} \left( e^{j\Omega} \right) = \begin{cases} 0, & -\pi < \Omega < -\Omega_{c2} \\ 1, & -\Omega_{c2} < \Omega < -\Omega_{c1}\\ 0, & -\Omega_{c1} < \Omega < \Omega_{c1}\\ 1, & \Omega_{c1} < \Omega < \Omega_{c2}\\ 0, & \Omega_{c2} < \Omega < \pi \end{cases}, $$

pa je impulsni odziv idealnog VF filtra

$$ h_{ID}[n] = \frac{1}{2 \pi} \int_{-\pi}^{\pi} H_{ID} \left( e^{j\Omega} \right) e^{j\Omega n} d\Omega = \frac{1}{2 \pi} \int_{-\Omega_{c2}}^{-\Omega_{c1}} 1 \cdot e^{j\Omega n} d\Omega + \frac{1}{2 \pi} \int_{\Omega_{c1}}^{\Omega_{c2}} 1 \cdot e^{j\Omega n} d\Omega = \frac{\sin(n\Omega_{c2}) - \sin(n\Omega_{c1})}{n\pi}. $$

Stepeničasti filtar

FIR filtre možemo projektovati i tako da imaju složeniju frekvencijsku karakteristiku. One ne moraju nužno biti NF, VF, PO i NO oblika. Stoga projektujmo filtar kome su zadate sledeće specifikacije:

Idealni filtar ima frekvencijsku karakteristiku kao na slici ispod.

Inverznom Furijevom transformacijom, dobijamo da je njegov impulsni odziv: $$ h_{ID}[n] = \frac{1}{2 \pi} \int_{-\pi}^{\pi} H_{ID} \left( e^{j\Omega} \right) e^{j\Omega n} d\Omega = H_1\frac{\sin(n\Omega_{c2}) - \sin(n\Omega_{c1})}{n\pi} + \frac{\sin(n\pi) - \sin(n\Omega_{c2})}{n\pi}. $$

Dodatna stvar o kojoj treba povesti računa u ovom primeru je određivanje vrednosti slabljenja i varijacija amplitude u propusnom opsegu kada vrednost idealne amplitudske karakteristike nije jednaka 1, već nekoj vrednosti $H$. Izrazi su vrlo slični, ali postoji oređena razlika. $$ \alpha_p = 20\log \left( \frac{H+\delta_p}{H-\delta_p} \right) $$ Odatle je: $$ 10^{0{,}05\alpha_p} = \frac{H+\delta_p}{H-\delta_p} \implies \delta_p = H \frac{10^{0{,}05\alpha_p} - 1}{10^{0{,}05\alpha_p} + 1} $$

Optimizacioni postupak projekovanja FIR filtara

Metod projektovanja FIR filtara ograničavanjem idelnog impulsnog odziva nije optimalan metod ni po kom kriterijumu. Videli smo, vrlo je jednostavno projektovati filtre ovim metodom i to je glavna prednost ovog metoda projektovanja. Zbog Gibsovog fenomena koji nastaje usled odsecanja idealnog impulsnog odziva, najveće varijacije amplitudske karakteristike su na granicama sa prelaznim zonama. Međutim, moguće je ravnomernije rasporediti varijacije amplituda, tako da specifikacije budu ispoštovane, a da se smanji red filtra. Ovo se postiže optimizacionim postupkom.

Cilj optimizacionog postupka je da menja koeficijente filtra sve dok neka optimizaciona funkcija ne dobije minimalnu vrednost. Ova optimizaciona (engl. cost) funkcija može biti različitog oblika. Obično se polazi od greške realne amplitudske karakteristike u odnosu na idealnu amplitudsku karakteristiku:

$$ E(\Omega) = |H_{ID}(e^{j\Omega})| - |H(e^{j\Omega})|. $$

Različite optimizacione funkcije se mogu formirati od navedene greške. Najčešća dva metoda su minimax i metoda najmanjeg kvadrata (least squares). Kod prvog metoda je cilj minimizovati maksimalnu grešku i na taj način ravnomerno rasporediti grešku po celom propusnom i nepropusnom opsegu:

$$ \underset{b_n,\, n \in [0, N-1]}{\min} \left( \max (|E(\Omega)|) \right). $$

Kod drugog metoda je cilj naći koeficijente filtra kod koga će srednja kvadratna greška biti minimalna: $$ \underset{b_n,\, n \in [0, N-1]}{\min} \left(\frac{1}{2\pi} \int_{-\pi}^{\pi} |E(\Omega)|^2 d\Omega \right). $$

Ukoliko se želi postići da varijacije amplitude u različitim opsezima budu različite, onda se funkcija greške može otežiniti, tj. skalirati u odgovarajućim opsezima. Na taj način se menja relativan uticaj greške u tim opsezima i ekvivalentno postiže različito slabljenje. Težinska funkcija za, na primer, NF filtar je:

$$ W(\Omega) = \begin{cases} 1, & 0 \leq |\Omega| \leq \Omega_p \\ \delta_p/\delta_a, & \Omega_a \leq |\Omega| \leq \pi \end{cases}, $$

pa je otežinjena funkcija greške sada:

$$ E(\Omega) = W(\Omega)(|H_{ID}(e^{j\Omega})| - |H(e^{j\Omega})|). $$

Detalji o tome kako rade ovi optimizacioni algoritmi se mogu pronaći u knjizi i materijalima za predavanja. Za sada nam oni nisu neophodni, bitno je da razumemo da se na neki način menjaju koeficijenti filtra sa ciljem minimizacije određene optimizacione funkcije.

Parks-MekLelanov (Remezov) metod projektovanja

Remezov metod koristi minimax kroterijum optimizacije. Poziva se korišćenjem Scipy funkcije signal.remez(). Ovoj funkciji treba da prosledimo red filtra, oblik idealne frekvencijske karakteristike, vektor relativnih graničnih učestanosti i, opciono, vektor težinskih faktora kojim se obezbeđuje relativan uticaj greške u različitim opsezima.

Postoje empirijske formule za određivanje reda filtra. Ove formule će dati samo procenu reda, i najčešće specifikacije neće biti ispoštovane. Zbog toga je, kao i ranije, potrebno da proveramo da li su specifikacije ispoštovane i da povećavamo red filtra sve dok one ne postanu ispoštovane. Empiijske formule se razlikuju za NF/VF funkcije prenosa i za PO/NO funkcije prenosa. Ovde ih navodimo radi kompletnosti.

Za NF/VF filtar: $$ D_{\infty}(\delta_p, \delta_a) = (0.005309\log(\delta_p)^2 + 0.07114\log(\delta_p) - 0.4761)\log(\delta_a) - \\ (0.00266\log(\delta_p)^2 + 0.5941\log(\delta_p) + 0.4278)\\ f(\delta_p, \delta_a) = 11.01217 + 0.51244(\log(\delta_p) - \log(\delta_a)) \\ B_t = 2\pi\frac{|f_p - f_a|}{f_s} \\ N \geq \frac{2\pi D_{\infty}(\delta_p, \delta_a)}{B_t} - \frac{f(\delta_p, \delta_a)B_t}{2\pi} $$

Za PO/NO filtar: $$ D_{\infty}(\delta_p, \delta_a) = (0.01201\log(\delta_p)^2 + 0.09664\log(\delta_p) - 0.51325)\log(\delta_a) + \\ (0.00203\log(\delta_p)^2 - 0.57054\log(\delta_p) - 0.44314)\\ f(\delta_p, \delta_a) = -16.9 + 14.6(\log(\delta_p) - \log(\delta_a)) \\ B_t = \min \left( 2\pi\frac{|f_{p,i} - f_{a,i}|}{f_s}\right) \\ \delta_p = \min(\delta_{p,i}),\, \, \, \delta_a = \min(\delta_{a,i}) \\ N \geq \frac{2\pi D_{\infty}(\delta_p, \delta_a)}{B_t} - \frac{f(\delta_p, \delta_a)B_t}{2\pi} \\ $$

U narednom primeru se koristi Remezov algoritam za projektovanje VF filtra.

Primetimo da specifikacije nisu u potpunosti ispoštovane. Dakle, potrebno je iterativno povećavati red filtra sve dok se ne dobije željena amplitudska karakteristika. To ćemo uraditi u narednom primeru višestrukog propusnika opsega kome su zadate sledeće specifikacije:

Metod najmanjeg kvadrata

Ako se za optimizacionu funkciju odabere minimalna srednja kvadratna greška, postupak je isti, ali se za pojektovanje filtra koristi funkcija signal.firls().