Salta al contenuto
Note per Studenti Filtri numerici IIR e FIR

Filtri numerici IIR e FIR

In questa pagina 6
** y(k)=∑ibix(k−i)+∑iaiy(k−i)y(k)=\sum_ib_ix(k-i)+\sum_ia_iy(k-i). **IIR** (ricorsivo: qualche ai≠0a_i\ne0) ha risposta impulsiva infinita e bastano pochi termini; **FIR** (tutti ai=0a_i=0) è sempre stabile ma richiede molti termini. Il passa-basso IIR del primo ordine y(k)=b x(k)+a y(k−1)y(k)=b\,x(k)+a\,y(k-1) con a+b=1a+b=1 ha guadagno 1 ed è stabile se ∣a∣<1|a|<1; la risposta al gradino è y(k)=1−ak+1y(k)=1-a^{k+1}. Il filtro analogico equivalente (Eulero) ha τ=a Tc1−a\tau=\dfrac{a\,T_c}{1-a} e fT=12πτf_T=\dfrac1{2\pi\tau}. La media mobile di NN campioni è un FIR passa-basso che si assesta in NN passi. -->

Uno degli usi più frequenti di µC e DSP è l'elaborazione numerica dei segnali e il controllo di processi (Microcontrollori e DSP - definizioni e scelta del dispositivoUn microcontrollore (µC) è un microprocessore con memoria e periferiche (ADC, timer, PWM, porte seriali) sullo stesso chip, pensato per il controllo; un DSP è un processore ottimizzato per l'elaborazione numerica del segnale in tempo reale (moltiplicatore e istruzione MAC, accessi multipli alla memoria, indirizzamento circolare, DMA). Oggi le due famiglie si sovrappongono (DSC). La scelta del dispositivo si fa su costo, prestazioni, periferiche e tempo di sviluppo (time to market), non sulla sola frequenza di clock.Microcontrollori e DSP - definizioni e scelta del dispositivo →). La differenza di fondo è la retroazione: assente nel filtraggio, indispensabile nel controllo (Regolatori PI e PID digitaliIl PI digitale è $y(k)=k_p,e(k)+y_I(k)$ con $y_I(k)=k_I',e(k)+y_I(k-1)$ e $k_I'=k_iT_c$ (con una MAC bastano 3 cicli). Nel PID la derivata si calcola come $\frac{k_d}{T_c}[e(k)-e(k-1)]$ ed è sensibile al rumore: si usa la versione filtrata $y_d(k)=\frac{k_d}{T_c+\tau_L}[e(k)-e(k-1)]+\frac{\tau_L}{T_c+\tau_L}y_d(k-1)$ o una media su più campioni. Con la saturazione dell'attuatore serve l'anti-wind-up: $|y_I|\le L(k)=Y_{max}-|k_pe(k)|$. Il controllo dead-beatcontrollo che porta l'errore a zero in un numero finito di passi (predittivo) azzera l'errore in un numero finito di passi ma è poco usato in industria.Regolatori PI e PID digitali →).

Struttura di un filtro digitale

Il segnale analogico s(t)s(t) di una sorgente passa per un circuito di condizionamentoadattamento di livello e filtraggio del segnale prima dell'ADC (adattamento di livello, filtro anti-aliasing: Quantizzazione, fattori di scala e cicli limiteUn algoritmo di filtro o regolatore pensato per un processore ideale va adattato alla realtà: temporizzazionedistribuzione nel tempo delle operazioni di un algoritmo (l'algoritmo nella ISR dell'ADC, durata minore di $T_c$), acquisizione (condizionamento del segnale per sfruttare tutto il fondo scala dell'ADC), fattori di scala (normalizzazione intera o 1.15; evitare overflow), quantizzazione di ingresso, uscita, coefficienti e prodotti (sposta i poli, genera errori a regime e cicli limite). Una frequenza di campionamento troppo alta rende più critica la quantizzazione dei coefficienti: va scelta coerente con la lunghezza di parola.Quantizzazione, fattori di scala e cicli limite →) e per il convertitore A/D, che produce due effetti: campionamento (s(t)→s(kTc)s(t)\to s(kT_c)) e quantizzazione (da analogico a numerico). Il DSP elabora la sequenza dei campioni x(k)x(k) e produce la sequenza y(k)y(k). Come i filtri analogici, quelli digitali possono essere passa-basso, passa-altofiltro che lascia passare le alte frequenze e attenua le basse, passa-banda, elimina-banda. Ogni filtro analogico può essere riprodotto (più o meno fedelmente) per via digitale; non vale il contrario: esistono filtri digitali (FIRFinite Impulse Response: filtro a risposta impulsiva finita, non ricorsivo) senza equivalente analogico.

Un filtro numerico è descritto da una equazione alle differenze y(k)=b0x(k)+b1x(k−1)+⋯+bnx(k−n)+a1y(k−1)+a2y(k−2)+⋯+amy(k−m).y(k)=b_0x(k)+b_1x(k-1)+\dots+b_nx(k-n)+a_1y(k-1)+a_2y(k-2)+\dots+a_my(k-m).

  • Se almeno un ai≠0a_i\ne0 il filtro è IIR (a risposta impulsiva infinita): è ricorsivoin cui l'uscita dipende anche da campioni di uscita precedenti, perché y(k)y(k) dipende da y(k−1)y(k-1), e il transitorio non si estingue mai del tutto.
  • Se tutti gli ai=0a_i=0 è FIR (a risposta impulsiva finita): combinazione lineare di campioni dell'ingresso.

Passa-basso IIR del primo ordine

y(k)=b x(k)+a y(k−1),tipicamente a=1−b.y(k)=b\,x(k)+a\,y(k-1),\qquad\text{tipicamente }a=1-b . Risposta al gradino (x=1,1,1,…x=1,1,1,\dots, con y(−1)=0y(-1)=0): y(k)=b+a y(k−1)y(k)=b+a\,y(k-1), da cui y(k)=b1−a(1−ak+1)  →k→∞  b1−a=GDC.y(k)=\frac{b}{1-a}\big(1-a^{k+1}\big)\;\xrightarrow[k\to\infty]{}\;\frac b{1-a}=G_{DC}. Per b=0,1b=0{,}1, a=0,9a=0{,}9 si ha y={0,1; 0,19; 0,271; 0,344; 0,410;… }→1y=\{0{,}1;\ 0{,}19;\ 0{,}271;\ 0{,}344;\ 0{,}410;\dots\}\to1: sembra la versione campionata di un passa-basso analogico del primo ordine; la velocità cresce con bb (purché b<1b<1).

Grafico interattivo: Risposta al gradino del filtro y(k) = 0,1 x(k) + 0,9 y(k-1): y(k) = 1 - 0,9^(k+1), tende a 1 senza raggiungerlo mai (a regime entro il 10% dopo 22 campioni)

Regole pratiche per i coefficienti:

  1. se a+b=1a+b=1 il guadagno in continuarapporto tra uscita e ingresso a regime per ingresso costante è 1 (in generale GDC=b1−aG_{DC}=\frac b{1-a}, la somma dei bib_i divisa per 1−∑ai1-\sum a_i);
  2. se ∣a∣<1|a|<1 il filtro è stabile (ak→0a^{k}\to0); per esempio y(k)=2,1 x(k)−1,1 y(k−1)y(k)=2{,}1\,x(k)-1{,}1\,y(k-1) è numericamente instabile (∣a∣=1,1>1|a|=1{,}1>1).

Limite di precisione. Una risposta molto veloce richiede bb vicino a 1, cioè a=1−ba=1-b vicino a 0: in un processore a 8 bit con formato 1.7 il minimo numero non nullo è 2−7=0,00782^{-7}=0{,}0078, quindi per b>0,992b>0{,}992 il coefficiente 1−b1-b non è più rappresentabile e diventa 0.

Tempo di salita e di assestamento. Il numero di campioni per arrivare a una frazione pp del valore finale è il minimo N=k+1N=k+1 tale che 1−aN≥p1-a^N\ge p, cioè N≥ln⁡(1−p)ln⁡aN\ge\dfrac{\ln(1-p)}{\ln a}. Per a=0,9a=0{,}9 e p=0,9p=0{,}9 (si dice "tempo di salitatempo per arrivare a una frazione fissata (qui 90% o 99%) del valore finale al 90%"): N≥21,9N\ge21{,}9, quindi 22 campioni. Per a=0,87a=0{,}87 e il 99%: N≥ln⁡0,01ln⁡0,87=33,07N\ge\frac{\ln0{,}01}{\ln0{,}87}=33{,}07, quindi 34 campioni; con Tc=20 μT_c=20\ \mus sono 0,680{,}68 ms.

Filtro analogico equivalente (Eulero). Sostituendo s=1−z−1Tcs=\frac{1-z^{-1}}{T_c} (Discretizzazione di Eulero e TustinPer realizzare numericamente un filtro o regolatore $F(s)$ si approssima $\frac1s$ con un integratore a tempo discreto. Eulero: $\boxed{s=\dfrac{1-z^{-1}}{T_c}}$ (da $\mathrm{Int}(nT)=\mathrm{Int}((n-1)T)+T,x(n)$). Così $\dfrac{1+s\tau_z}{1+s\tau_p}$ diventa $y(k)=\dfrac{\tau_p}{T_c+\tau_p}y(k-1)+\dfrac{T_c+\tau_z}{T_c+\tau_p}x(k)-\dfrac{\tau_z}{T_c+\tau_p}x(k-1)$. Il passaggio inverso (da algoritmo a $F(s)$) usa $z^{-1}\approx1-sT_c$. L'approssimazione è affidabile solo fino a circa $f_c/10$ (distorsione, warping); Tustin $s=\frac2{T_c}\frac{1-z^{-1}}{1+z^{-1}}$ è più fedele.Discretizzazione di Eulero e Tustin →) il filtro y(k)=b x(k)+a y(k−1)y(k)=b\,x(k)+a\,y(k-1) con a+b=1a+b=1 corrisponde a F(s)=11+sτF(s)=\frac1{1+s\tau} con a=τTc+τ,b=TcTc+τ⟺τ=ab Tc=a Tc1−a,fT=12πτ.a=\frac\tau{T_c+\tau},\quad b=\frac{T_c}{T_c+\tau}\quad\Longleftrightarrow\quad\tau=\frac{a}{b}\,T_c=\frac{a\,T_c}{1-a},\qquad f_T=\frac1{2\pi\tau}. Esempio: y(k)=0,87 y(k−1)+0,13 x(k)y(k)=0{,}87\,y(k-1)+0{,}13\,x(k) a fc=50f_c=50 kHz (Tc=20 μT_c=20\ \mus): τ=0,870,13⋅20 μs=133,8 μ\tau=\frac{0{,}87}{0{,}13}\cdot20\ \mu\text{s}=133{,}8\ \mus, frequenza di tagliofrequenza a cui il modulo scende di 3 dB rispetto alla banda passante fT=1189f_T=1189 Hz ≈1,19\approx1{,}19 kHz. Valore finale della risposta a un gradino unitario: 0,131−0,87=1\frac{0{,}13}{1-0{,}87}=1. Il rapporto fT/fc=0,024f_T/f_c=0{,}024: nel campo in cui l'approssimazione di Eulero vale (sotto fc/10f_c/10).

Il polo del filtro analogico equivalente è posto a ωp=1/τ\omega_p=1/\tau: in relazione alla frequenza di campionamento λ=fpfc=12πTcτ=12πba\lambda=\frac{f_p}{f_c}=\frac1{2\pi}\frac{T_c}\tau=\frac1{2\pi}\frac{b}{a}.

Dalla risposta al gradino ai coefficienti. Se la risposta a un gradino unitario è {0,0,0,4,0,64,0,784,0,8704,… }\{0,0,0{,}4,0{,}64,0{,}784,0{,}8704,\dots\} i primi due zeri indicano un ritardo di 2 campioni: il filtro è y(k)=a y(k−1)+b x(k−2)y(k)=a\,y(k-1)+b\,x(k-2). Il primo valore non nullo è y(2)=b=0,4y(2)=b=0{,}4; poi y(3)=a⋅0,4+0,4=0,64y(3)=a\cdot0{,}4+0{,}4=0{,}64 dà a=0,6a=0{,}6; si verifica y(4)=0,6⋅0,64+0,4=0,784y(4)=0{,}6\cdot0{,}64+0{,}4=0{,}784 ✓ e a+b=1a+b=1 (guadagno 1, valore finale 1). Il polo è in a=0,6a=0{,}6 (τ=0,60,4Tc=1,5 Tc\tau=\frac{0{,}6}{0{,}4}T_c=1{,}5\,T_c).

Passa-alto IIR

y(k)=x(k)−x(k−1)+a y(k−1)y(k)=x(k)-x(k-1)+a\,y(k-1) con 0<a<10<a<1 (meglio a>0,5a>0{,}5): con a=0,91a=0{,}91 risposta al gradinoandamento dell'uscita quando l'ingresso passa da 0 a 1 e vi resta come quella di un passa-alto del primo ordine; aa minori danno risposte più veloci. Per a≤0a\le0 si hanno risposte oscillatorie smorzate o instabili. Più in generale, nei filtri y(k)=a y(k−1)+b0x(k)+b1x(k−1)y(k)=a\,y(k-1)+b_0x(k)+b_1x(k-1) il polo è aa e lo zero è in −b1/b0-b_1/b_0 (con la trasformazione di Eulero: Discretizzazione di Eulero e TustinPer realizzare numericamente un filtro o regolatore $F(s)$ si approssima $\frac1s$ con un integratore a tempo discreto. Eulero: $\boxed{s=\dfrac{1-z^{-1}}{T_c}}$ (da $\mathrm{Int}(nT)=\mathrm{Int}((n-1)T)+T,x(n)$). Così $\dfrac{1+s\tau_z}{1+s\tau_p}$ diventa $y(k)=\dfrac{\tau_p}{T_c+\tau_p}y(k-1)+\dfrac{T_c+\tau_z}{T_c+\tau_p}x(k)-\dfrac{\tau_z}{T_c+\tau_p}x(k-1)$. Il passaggio inverso (da algoritmo a $F(s)$) usa $z^{-1}\approx1-sT_c$. L'approssimazione è affidabile solo fino a circa $f_c/10$ (distorsione, warping); Tustin $s=\frac2{T_c}\frac{1-z^{-1}}{1+z^{-1}}$ è più fedele.Discretizzazione di Eulero e Tustin →).

FIR: la media mobile

y(k)=1N∑i=0N−1x(k−i)y(k)=\frac1N\sum_{i=0}^{N-1}x(k-i) è un filtro passa-basso a media mobile di ordine NN: si assesta in NN periodi di campionamento e, come tutti i FIR, non ha problemi di stabilità numerica anche con coefficienti sbagliati. Per N=4N=4 la risposta al gradino è {0,25; 0,5; 0,75; 1; 1;… }\{0{,}25;\ 0{,}5;\ 0{,}75;\ 1;\ 1;\dots\}: transitorio finito in 4 passi, impossibile per un filtro analogico. Per avere una risposta simile a quella di un IIRInfinite Impulse Response: filtro a risposta impulsiva infinita, ricorsivo serve un ordine molto maggiore: un FIR con N=22N=22 imita un IIR con b=0,1b=0{,}1 (circa 1N/2\frac1{N/2}...), ma richiede 22 termini invece di 2: è un risultato di valore generale (a parità di prestazioni un FIR richiede più calcoli di un IIR). La risposta in frequenza del FIR ha zeri di trasmissionefrequenze a cui il filtro annulla il segnale (alcune frequenze sono annullate per la periodicità della struttura: per N=16N=16 a multipli di fc/16f_c/16) e un inviluppo vicino a quello del passa-basso analogico equivalente. Un esempio di laboratorio: media mobilemedia degli ultimi N campioni, aggiornata a ogni nuovo campione di 16 campioni dell'ADC a 12 bit; la somma si aggiorna togliendo il campione più vecchio e sommando il nuovo (yma -= xma[k]; yma += x; xma[k] = x).

Passa-alto FIR: y(k)=x(k)−1N∑i=0N−1x(k−i)y(k)=x(k)-\frac1N\sum_{i=0}^{N-1}x(k-i) (o forme analoghe): risposta al gradino che si esaurisce in NN passi, con N>20N>20 per ottenere una risposta confrontabile con il passa-alto IIR.

Quando si usa quale

Nei compiti si chiede spesso: tempo di salita al 99% (in campioni e in ms), valore finale, frequenza di taglio, rappresentazione esadecimale dei coefficienti (Rappresentare un valore reale in virgola fissa - formato ottimo ed errorePer rappresentare un reale $x$ su $W$ bit a virgola fissa si sceglie il formato che minimizza l'erroresceglie la rappresentazione per cui la differenza tra il valore rappresentato e quello vero è la più piccola possibile: il maggior numero di bit frazionari $m$ compatibile con l'intervallo ($n=W-m$ bit interi, con U se $x\ge0$, con S se $x<0$). Poi $C=\mathrm{round}(x\cdot2^m)$, scritto in esadecimale (per un negativo, in complemento a 2), e l'errore $\varepsilon=\frac{C}{2^m}-x$, positivo se in eccesso, ha modulo $\le2^{-(m+1)}$. Se invece è dato l'errore massimo, i bit minimi si ricavano da $2^{-(m+1)}\le\varepsilon_{max}$.Rappresentare un valore reale in virgola fissa - formato ottimo ed errore →) e tempo massimo di calcolo (deve essere minore di Tc=1/fcT_c=1/f_c: Sistemi di interruzioni - latenza, nesting e sostenibilitàCon $N$ sorgenti, ciascuna ISR $i$ ha durata $T_{d,i}$ (spesso già comprensiva della latenza intrinseca $T_{LI}$ e dell'istruzione in corso) e periodo minimo $T_{p,i}$. Condizione necessaria: $\sum_iT_{d,i}/T_{p,i}<1$ (la percentuale di impegno della CPU è la somma). Condizione di intervallo per ogni $i$ (priorità 1 = massima): $T_{d,i}+\sum_{k<i}n_k,T_{d,k};[+\max(T_{RC},\max_{j>i}T_{d,j})\text{ senza nesting}]\le T_{p,i}$, con $n_k=\lceil T_{p,i}/T_{p,k}\rceil$. Latenza massima della priorità $n$: con nesting $T_{LI}+\sum_{i<n}T_{ex,i}$; senza nesting si aggiunge $\max_{j>n}T_{ex,j}$.Sistemi di interruzioni - latenza, nesting e sostenibilità →).

Errori comuni

  • Sbagliare il valore finale: è b1−a\frac{b}{1-a} e non bb.
  • Dire che l'IIR è "instabile perché ricorsivo": lo è solo se ∣a∣≥1|a|\ge1.
  • Usare τ=Tc a\tau=T_c\,a (manca il fattore 11−a\frac1{1-a}): τ=a1−aTc\tau=\frac{a}{1-a}T_c.
  • Calcolare il tempo di assestamento in campioni senza arrotondare per eccesso.
  • Credere che aumentare fcf_c migliori sempre il filtro: i coefficienti si avvicinano a 1 (e 0) e la quantizzazione pesa di più.

Versione ripasso

Esercizi su questo argomento

Teoria collegata