Progettazione nell'ambiente LPCXpresso Introduzione alla progettazione di sistemi embedded a microcontrollore Note su filtri digitali S. Salvatori - Microelettronica – aprile 2016 – (1 di 42) Sommario Perché un filtro digitale Filtraggio digitale Trasformata z Progetto di filtri digitali Filtri FIR Algoritmo di calcolo S. Salvatori - Microelettronica - aprile 2016 2/42 Perché un filtro digitale? Il processore può essere riprogrammato; L'accuratezzo dipende dall'arrotondamento nel calcolo aritmetico: Nota a priori Minimizzare gli errori aumentando la risoluzione Alimentazione e temperatura non influenzano le prestazioni (il programma rimane lo stesso) Alta immunità al rumore S. Salvatori - Microelettronica - aprile 2016 3/42 Processo di campionamento S. Salvatori - Microelettronica - aprile 2016 4/42 Aliasing Segnale campionato correttamente Alias dovuto al sottocampionamento S. Salvatori - Microelettronica - aprile 2016 5/42 Filtraggio digitale VREF VREF filtro numerico Analog input gnd DAC Analog output gnd S. Salvatori - Microelettronica - aprile 2016 6/42 Filtraggio digitale Un modo per ridurre il rumore in un segnale potrebbe consistere nella semplice operazione di smoothing Per esempio un filtro parabolico: y[k ]= 1 ( −3 x [k+2 ]+12 x [k +1 ]+17 x[k ]+12 x[ k−1]−3 x[k −2] ) 35 S. Salvatori - Microelettronica - aprile 2016 7/42 Filtraggio digitale Nel filtro: y[k ]= 1 ( −3 x [k+2 ]+12 x [k +1 ]+17 x[k ]+12 x[ k−1]−3 x[k −2] ) 35 il valore del campione attuale dell'uscita dipende da: ● campione attuale x[k] ● campioni precedenti x[k-1] e x[k-2] ● e i campioni futuri x[k+1] e x[k+2] ! Il problema viene risolto semplicemente spostando il calcolo di y[k] dopo che i 5 campioni sono stati acquisiti S. Salvatori - Microelettronica - aprile 2016 8/42 Filtraggio digitale Cioè: 1 y[k ]= (−3 x [k]+12 x[k −1]+17 x [k−2]+12 x [k−3 ]−3 x[k −4]) 35 È interessante osservare che l'espressione: y[k ]=∑ ai x [k−i ] rappresenta la convoluzione dei dati in ingresso attraverso i coefficienti del filtro. Tali coefficienti rappresentano la risposta impulsiva del filtro. Infatti: che succede se l'ingresso è un impulso: x[k] = 0 per k≠ 0, x[0] = 1 S. Salvatori - Microelettronica - aprile 2016 9/42 Filtraggio digitale Se x[k] = 0 per k≠ 0, x[0] = 1 y[k ]=∑ ai x [k−i ]=ak x( 0) Quindi: y[0]=a0 ; y[1]=a1 ; y[2]=a2 ; ... Poiché vi è un numero finito di coefficienti, la risposta impulsiva è finita. Per questo motivo tali filtri vengono denominati FIR, Finite Impulse Response S. Salvatori - Microelettronica - aprile 2016 10/42 Filtraggio digitale Un altro tipo di filtri è quello di tipo ricorsivo: l'uscita attuale dipende dai valori precedenti dell'uscita: N M i=0 i =0 y[k ]=∑ ai x [k−i ]=ak x( 0)+∑ bi y [k−i ] Questi hanno una risposta impulsiva di tipo infinito e vengono denominati IIR, Infinite Impulse Response S. Salvatori - Microelettronica - aprile 2016 11/42 Trasformata z note S. Salvatori - Microelettronica - aprile 2016 12/42 Trasformata z La trasformata z ha, nel dominio discreto, lo stesso ruolo che la trasformata di Laplace ha nel dominio analogico Impulso a t=kT trasformata di Laplace e −kTs La trasformata di Laplace di una funzione discreta f[k], che è una successione di impulsi, sarà: F d [ s]=f ( 0)+f (1 )e −Ts −2 Ts +f ( 2) e + f (3) e −3 Ts S. Salvatori - Microelettronica - aprile 2016 +f ( 4)e −4 Ts +... 13/42 Trasformata z F d [ s]=f ( 0)+f (1 )e −Ts e −2 Ts +f ( 2) e + f (3) e −3 Ts Ts +f ( 4)e −4 Ts +... z −1 −2 −3 −4 F ( z)=f (0 )+f (1) z +f ( 2) z +f ( 3) z +f ( 4) z +... S. Salvatori - Microelettronica - aprile 2016 14/42 Esempi S. Salvatori - Microelettronica - aprile 2016 15/42 Esempi S. Salvatori - Microelettronica - aprile 2016 16/42 Esempi S. Salvatori - Microelettronica - aprile 2016 17/42 Funzione di trasferimento impulsiva Trasformata z dell'uscita Trasformata z dell'ingresso Y ( z )=G ( z) X ( z ) N Filtro non-ricorsivo: G ( z)= ∑ ai z −i i=0 Filtro ricorsivo: N M Y ( z )=∑ ai z X ( z)+∑ bi z Y ( z) −i i=0 −i i =1 ∑ ai z −i Y ( z) G ( z)= = X (z ) 1− ∑ bi z −i S. Salvatori - Microelettronica - aprile 2016 18/42 Piano z z=e sT con s=σ + j ω σT z=e e se z=e σ=0 j ωT jωT =cos(ω T )+ j sin (ω T ) |z|=1 ω σ>0 1 σ σ<0 S. Salvatori - Microelettronica - aprile 2016 19/42 Progetto di un filtro digitale S. Salvatori - Microelettronica - aprile 2016 20/42 Filtri semplici Per progettare un filtro passa basso si può adottare la tecnica di smoothing; Vi sono due approcci: fit polinomiale media mobile Fit polinomiale Aumentando l'ordine del polinomio possiamo migliorare il cut-off S. Salvatori - Microelettronica - aprile 2016 21/42 Media mobile: esempio Filtro Hanning 1 y[k ]= ( x [k ]+2 x [k−1]+ x[k−2 ]) 4 Il filtro genera il campione attuale come media pesata di tre campioni di ingresso con quello al centro avente peso doppio rispetto a quelli estremi S. Salvatori - Microelettronica - aprile 2016 22/42 Filtro Hanning La trasformata z sarà: 1 −1 −2 H (z )= (1+2 z + z ) 4 1 2 che è pari a H (z )= ( z+1) 4 È un passa basso? con due zeri pari a -1 Vediamo la risposta in frequenza S. Salvatori - Microelettronica - aprile 2016 23/42 Filtro Hanning 1 −1 −2 H (z )= (1+2 z + z ) 4 z→e 1 − j ωT −2 j ωT H ( jω)= (1 +2 e +e ) 4 jω T |H| 1 0,9 1 − j ωT j ωT − jω T H ( jω)= e ( e +2 +e ) 4 0,8 0,7 0,6 1 − j ωT H ( jω)= e ( 2+2 cos( ωT )) 4 0,5 1 −j ωT H ( jω)= e (1+cos(ω T )) 2 0,2 0,4 0,3 0,1 0 0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1 f/2fs S. Salvatori - Microelettronica - aprile 2016 24/42 Filtro Hanning Fase? 1 −j ωT H ( j ω)= e (1+cos(ω T )) 2 H ( jω)=−ωT La fase varia linearmente con f. Questo è vero per qualunque filtro FIR con “coefficienti simmetrici” (polinomio palindromo) S. Salvatori - Microelettronica - aprile 2016 25/42 LPF Potremmo realizzare un LPF inserendo un polo −1 1 z H (z )= = z −α 1−α z−1 −1 z Y ( z )= X ( z) −1 1−α z −1 Y ( z )(1−α z )=z −1 X ( z) |H| 3 y[k ]= x[k −1 ]+α y[k −1 ] α = 0.6 2,5 2 1,5 Filtro ricorsivo IIR 1 0,5 0 0 0,1 0,2 0,3 0,4 0,5 f/2fs S. Salvatori - Microelettronica - aprile 2016 0,6 0,7 0,8 0,9 1 26/42 Progetto di un filtro FIR S. Salvatori - Microelettronica - aprile 2016 27/42 Risposta ideale di un passa basso h(n) 1 pass-band stop-band ft f normalizzata alla fs 0.5 Frequenza di transizione La risposta impulsiva di questo tipo di filtro è la funzione sinc. 0,8 0,7 ft = 0.4 fS 0,6 0,5 0,4 0,3 0,2 0,1 0 -0,1 -0,2 -10 -8 -6 -4 -2 0 2 4 6 8 10 n S. Salvatori - Microelettronica - aprile 2016 28/42 Risposta ideale di un passa basso 0,8 0,7 La funzione sinc è infinita Si estende sia per x positiva che per x negativa ft = 0.4 fS 0,6 0,5 0,4 0,3 0,2 0,1 0 -0,1 -0,2 -10 -8 -6 -4 -2 0 2 4 6 8 10 n Un filtro FIR, invece ha un numero finito di coefficienti può avere campioni solo dal passato 1 Campioniamo e tronchiamo a un numero finito M+1 di valori 0,8 0,6 0,4 M: ordine del filtro 0,2 Muoviamo I campioni di M/2 0 -0,2 1 2 3 4 5 6 7 8 9 10 11 S. Salvatori - Microelettronica - aprile 2016 12 13 14 15 16 17 18 19 20 21 29/42 Risposta ideale di un passa basso Con i coefficienti della funzione sinc troncata si ottiene una risposta in frequenza che presenta ripple sia in banda passante che nella banda attenuata I coefficienti vengono pesati con funzioni particolari: ● ● ● ● Hamming Hanning Bartlett Blackman S. Salvatori - Microelettronica - aprile 2016 30/42 Windowing S. Salvatori - Microelettronica - aprile 2016 31/42 Windowing S. Salvatori - Microelettronica - aprile 2016 32/42 Struttura di un FIR linea di ritardo h0 h1 h2 hM moltiplicazione somma S. Salvatori - Microelettronica - aprile 2016 33/42 Esempio fS: 44100 Hz ft: 4 kHz M: 20 [ sen 2 π h (n)=. ( ft M n− fs 2 ( π n− ft 2 fs M 2 ) )] per n≠ M 2 per n= M 2 S. Salvatori - Microelettronica - aprile 2016 # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 sinc -0,017555 -0,032341 -0,039323 -0,034095 -0,014550 0,018331 0,060410 0,105081 0,144601 0,171744 0,181406 0,171744 0,144601 0,105081 0,060410 0,018331 -0,014550 -0,034095 -0,039323 -0,032341 -0,017555 34/42 Esempio Supponiamo di avere un ADC a 12 bit Se anche per i coefficienti scelgo una risoluzione di 12 bit: h (i) x ( j) 24 bit M Y ( k)=∑ ai z x( z ) −i i=0 21 addendi: altri 5 bit Totale: 29 bit (ok per uP 32 bit) S. Salvatori - Microelettronica - aprile 2016 # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 coeff -0,017555 -0,032341 -0,039323 -0,034095 -0,01455 0,018331 0,06041 0,105081 0,144601 0,171744 0,181406 0,171744 0,144601 0,105081 0,06041 0,018331 -0,01455 -0,034095 -0,039323 -0,032341 -0,017555 x4096 -72 -133 -162 -140 -60 75 247 430 592 703 743 703 592 430 247 75 -60 -140 -162 -133 -72 35/42 Algoritmo per il calcolo X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17) X(18) X(19) X(20) Nuovo campione X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17) X(18) X(19) X(20) X(21) Scalare tutti gli elementi del vettore X? S. Salvatori - Microelettronica - aprile 2016 36/42 Algoritmo per il calcolo X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17) X(18) X(19) X(20) X(21) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17) X(18) X(19) X(20) p_x X(21) X(22) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17) X(18) X(19) X(20) ... È sufficiente muovere un puntatore S. Salvatori - Microelettronica - aprile 2016 37/42 Algoritmo per il calcolo Buffer circolare p_x Comincio a riempire il vettore dalla posizione 0; Si incrementa il puntatore; Se p_x > M → p_x = 0 S. Salvatori - Microelettronica - aprile 2016 38/42 Algoritmo per il calcolo Nuovo campione y←0 j ← p_x i←0 i <= M F T y ← a(i) * x(j) + y decr. j i←i+1 incr. p_x S. Salvatori - Microelettronica - aprile 2016 39/42 Algoritmo per il calcolo T decr. j incr. p_x j←j-1 p_x ← p_x + 1 j<0 j←M F T p_x > M F p_x ← 0 end end S. Salvatori - Microelettronica - aprile 2016 40/42 Riferimenti http://http://www.labbookpages.co.uk/audio/firWindowing.html http://http://www.robots.ox.ac.uk/~sjrob/Teaching/SP/l5.pdf http://www.robots.ox.ac.uk/~sjrob/Teaching/SP/l6.pdf S. Salvatori - Microelettronica - aprile 2016 41/42