Sei sulla pagina 1di 44

Il Progetto di Filtri in Matlab

FDATool
Circuiti a Tempo Discreto
Esercitazione 10 -
Il Progetto di Filtri in Matlab
Prof. Michele Scarpiniti
Dipartimento INFOCOM - Sapienza Universit`a di Roma
http://ispac.ing.uniroma1.it/scarpiniti/index.htm
michele.scarpiniti@uniroma1.it
Roma, 10 Dicembre 2012
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 1 / 44
Il Progetto di Filtri in Matlab
FDATool
1
Il Progetto di Filtri in Matlab
Progetto di ltri IIR
Progetto di ltri FIR
2
FDATool
Lambiente
Un esempio
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 2 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il Filtraggio in Matlab
Il Filtraggio in Matlab
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 3 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri IIR
Si evince da tutto quello che `e stato detto nora, che il progetto di un ltro,
in modo rapido e semplice, `e di fondamentale importanza (ad esempio, nel
ricampionamento o nel progetto di banchi ltri).
Per fortuna Matlab mette a disposizione molti metodi per il progetto di
ltri IIR basati sul relativo prototipo analogico. In particolare consente il
progetto di ltri
di Bessel;
di Butterworth;
di Chebishev del I tipo;
di Chebishev del II tipo;
Ellittici.
Nel seguito verrano illustrate le funzioni di Matlab che consentono di
implementare rapidamente questo tipo di ltri. Inoltre verr`a illustrato
lutilizzo del pratico tool FDATool che consente di progettare ltri con una
comoda interfaccia graca.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 4 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Bessel
Per progettare un ltro di Bessel analogico, posso utilizzare i comandi:
>> [b,a] = besself(n,Wn,type);
>> [z,p,k] = besself(n,Wn,type);
>> [A,B,C,D] = besself(n,Wn,type);
Nelle precedenti funzioni n `e lordine del ltro, mentre W
n
`e la frequenza di taglio.
I vettori b ed a sono lunghi n + 1. Con il parametro type possiamo decidere
il tipo di ltro, cio`e se passa-basso (low), che `e lopzione di default, passa-alto
(high) oppure arresta-banda (stop). Se W
n
`e un vettore di due elementi
(W
n
= [w
1
w
2
]), si ottiene un ltro passa-banda di ordine 2n.
La seconda funzione ritorna il vettore degli zeri (z), dei poli (p) ed il guada-
gno del ltro (k). Inne la terza funzione ritorna le matrici A, B, C e D della
rappresentazione spazio di stato:
x = Ax + Bu
y = Cx + Du
dove u `e lingresso, x il vettore di stato e y luscita del ltro.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 5 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Bessel
E possibile visualizzare la risposta in ampiezza e fase di un ltro analogico,
conoscendo i vettori del numeratore (b) e del denominatore (a). Si utilizza
la funzione:
>> freqs(b,a);
Cos` lesempio successivo restituisce
>> [b,a] = besself(5,10000);
>> freqs(b,a);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 6 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Le funzioni freqs e freqz
Inoltre, la funzione freqs(b,a), pu`o essere utilizzata come
>> h = freqs(b,a);
>> h = freqs(b,a,w);
>> [h,w] = freqs(a,b);
>> [h,w] = freqs(a,b,n);
resistuisce la risposta complessa nel vettore h utilizzando n punti (di default,
se non specicato, `e n = 200). w `e il vettore delle pulsazioni su cui `e
valutata la risposta.
E lanalogo della funzione freqz(), utilizzata per il dominio
tempo-discreto.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 7 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Butterworth
Per progettare un ltro di Butterworth numerico, posso utilizzare i comandi:
>> [b,a] = butter(n,Wn,type);
>> [z,p,k] = butter(n,Wn,type);
>> [A,B,C,D] = butter(n,Wn,type);
Nelle precedenti funzioni n `e lordine del ltro, mentre W
n
`e la frequenza di taglio,
che deve essere compresa tra 0 e 1. I vettori b ed a sono lunghi n + 1. Con il
parametro type possiamo decidere il tipo di ltro, cio`e se passa-basso (low),
che `e lopzione di default, passa-alto (high) oppure arresta-banda (stop). Se
W
n
`e un vettore di due elementi (W
n
= [w
1
w
2
]), si ottiene un ltro passa-banda
di ordine 2n.
La seconda funzione ritorna il vettore degli zeri (z), dei poli (p) ed il guada-
gno del ltro (k). Inne la terza funzione ritorna le matrici A, B, C e D della
rappresentazione spazio di stato.
E anche possibile implementare un ltro analogico, con
>> [b,a] = butter(n,Wn,type,s);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 8 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Butterworth
Esiste anche la possibilit`a di utilizzare una funzione che restituisce diretta-
mente il una versione analogica del ltro di Butterworth:
>> [z,p,k] = buttap(n);
che restituisce il vettore p dei poli ed il guadagno k di un ltro di Butterworth
analogico di tipo passa-basso e di ordine n. Il vettore z degli zeri `e sempre
vuoto, perch`e questo tipo di ltri non ha zeri:
H(s) =
k
(s p
1
)(s p
2
) (s p
n
)
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 9 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Butterworth
E utile valutare quale possa essere il minimo ordine di un ltro di Butterworth che
rispetti le speciche richieste. Esiste una funzione di Matlab che restituisce questo
ordine minimo e la frequenza di taglio del ltro:
>> [n,Wn] = buttord(Wp,Ws,Rp,Rs);
>> [n,Wn] = buttord(Wp,Ws,Rp,Rs,s);
dove W
p
`e la frequenza di taglio della banda passante, W
s
`e la frequenza di taglio
della banda da arrestare, R
p
ed R
s
sono le rispettive attenuazioni. La seconda
funzione `e per i ltri analogici.
Filtro passa basso con banda di transizione tra 40 a 150 Hz, e
attenuazioni di 3 dB e 60 dB risoettivamente. La frequenza di
campionamento `e 1000 Hz:
>> F2 = 1000;
>> Wp = 40/(Fs/2);
>> Ws = 150/(Fs/2);
>> [n,Wn] = buttord(Wp,Ws,3,60);
>> [b,a] = butter(n,Wn);
>> freqz(b,a);
>> title(Filtro di Butterworth del 5 ordine);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 10 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Butterworth
Un modo alternativo per disegnare un ltro passa-basso di Butterworth, che `e un
ltro con risposta in apiezza massimamente piatta nellorigine, `e lutilizzo della
funzione:
>> [b,a] = maxflat(nb,na,Wn);
>> [b,a] = maxflat(nb,na,Wn,flag);
in cui n
b
e n
a
sono lordine del numeratore e del denominatore, mentre W
n
`e la
frequenza di taglio del ltro. La variabile opzionale flag pu`o assumere i tre
valori: trace (vengono scritti sullo schermo tutte le propriet`a del ltro),
plots (viene eettuato il graco del ltro) oppure both (entrambe le
opzioni).
Riportiamo un esempio:
>> nb = 10;
>> na = 2;
>> Wn = 0.2*pi;
>> [b,a] = maxflat(nb,na,Wn,plots);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 11 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Chebishev del I tipo
Per progettare un ltro di Chebishev del I tipo numerico, posso utilizzare i comandi:
>> [b,a] = cheby1(n,Rp,Wn,type);
>> [z,p,k] = cheby1(n,Rp,Wn,type);
>> [A,B,C,D] = cheby1(n,Rp,Wn,type);
Nelle precedenti funzioni n `e lordine del ltro, R
p
`e lampiezza del ripple ammesso
nella banda passante, mentre W
n
`e la frequenza di taglio, che deve essere compresa
tra 0 e 1. I vettori b ed a sono lunghi n + 1. Con il parametro type possiamo
decidere il tipo di ltro, cio`e se passa-basso (low), che `e lopzione di default,
passa-alto (high) oppure arresta-banda (stop). Se W
n
`e un vettore di due
elementi (W
n
= [w
1
w
2
]), si ottiene un ltro passa-banda di ordine 2n.
La seconda funzione ritorna il vettore degli zeri (z), dei poli (p) ed il guada-
gno del ltro (k). Inne la terza funzione ritorna le matrici A, B, C e D della
rappresentazione spazio di stato.
E anche possibile implementare un ltro analogico, con
>> [b,a] = cheby1(n,Rp,Wn,type,s);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 12 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Chebishev del I tipo
Analogamente ai ltri di Butterworth, anche per i ltri di Chebishev del I tipo
esiste la possibilit`a di utilizzare una funzione che restituisce direttamente il
ltro analogico:
>> [z,p,k] = cheb1ap(n);
che restituisce il vettore p dei poli ed il guadagno k di un ltro di Chebishev
del I tipo passa-basso e di ordine n. Il vettore z degli zeri `e sempre vuoto,
perch`e questo tipo di ltri non ha zeri:
H(s) =
k
(s p
1
)(s p
2
) (s p
n
)
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 13 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Chebishev del I tipo
E utile valutare quale possa essere il minimo ordine di un ltro di Chebishev del I
tipo che rispetti le speciche richieste. Esiste una funzione di Matlab che restituisce
questo ordine minimo e la frequenza di taglio del ltro:
>> [n,Wn] = cheb1ord(Wp,Ws,Rp,Rs);
>> [n,Wn] = cheb1ord(Wp,Ws,Rp,Rs,s);
dove W
p
`e la frequenza di taglio della banda passante, W
s
`e la frequenza di taglio
della banda da arrestare, R
p
ed R
s
sono le rispettive attenuazioni. La seconda
funzione `e per i ltri analogici.
Filtro passa basso con banda di transizione tra 40 a 150 Hz, e
attenuazioni di 3 dB e 60 dB rispettivamente. La frequenza di
campionamento `e 1000 Hz:
>> Fs = 1000;
>> Wp = 40/(Fs/2);
>> Ws = 150/(Fs/2);
>> [n,Wn] = cheb1ord(Wp,Ws,3,60);
>> [b,a] = cheby1(n,3,Wn);
>> freqz(b,a);
>> title(Filtro di Chebishev di tipo I del 4 ordine);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 14 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Chebishev del II tipo
Per progettare un ltro di Chebishev del II tipo numerico, posso utilizzare i comandi:
>> [b,a] = cheby2(n,Rs,Wn,type);
>> [z,p,k] = cheby2(n,Rs,Wn,type);
>> [A,B,C,D] = cheby2(n,Rs,Wn,type);
Nelle precedenti funzioni n `e lordine del ltro, R
p
`e lampiezza del ripple ammesso
nella banda passante, mentre W
n
`e la frequenza di taglio, che deve essere compresa
tra 0 e 1. I vettori b ed a sono lunghi n + 1. Con il parametro type possiamo
decidere il tipo di ltro, cio`e se passa-basso (low), che `e lopzione di default,
passa-alto (high) oppure arresta-banda (stop). Se W
n
`e un vettore di due
elementi (W
n
= [w
1
w
2
]), si ottiene un ltro passa-banda di ordine 2n.
La seconda funzione ritorna il vettore degli zeri (z), dei poli (p) ed il guada-
gno del ltro (k). Inne la terza funzione ritorna le matrici A, B, C e D della
rappresentazione spazio di stato.
E anche possibile implementare un ltro analogico, con
>> [b,a] = cheby2(n,Rp,Wn,type,s);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 15 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Chebishev del II tipo
Analogamente ai ltri precedenti, anche per i ltri di Chebishev del II tipo
esiste la possibilit`a di utilizzare una funzione che restituisce direttamente il
ltro analogico:
>> [z,p,k] = cheb2ap(n);
che restituisce il vettore p dei poli ed il guadagno k di un ltro di Chebishev
del II tipo passa-basso e di ordine n:
H(s) = k
(s z
1
)(s z
2
) (s z
n
)
(s p
1
)(s p
2
) (s p
n
)
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 16 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri di Chebishev del II tipo
E utile valutare quale possa essere il minimo ordine di un ltro di Chebishev del II
tipo che rispetti le speciche richieste. Esiste una funzione di Matlab che restituisce
questo ordine minimo e la frequenza di taglio del ltro:
>> [n,Wn] = cheb2ord(Wp,Ws,Rp,Rs);
>> [n,Wn] = cheb2ord(Wp,Ws,Rp,Rs,s);
dove W
p
`e la frequenza di taglio della banda passante, W
s
`e la frequenza di taglio
della banda da arrestare, R
p
ed R
s
sono le rispettive attenuazioni. La seconda
funzione `e per i ltri analogici.
Filtro passa basso con banda di transizione tra 40 a 150 Hz, e
attenuazioni di 3 dB e 60 dB risoettivamente. La frequenza di
campionamento `e 1000 Hz:
>> Fs = 1000;
>> Wp = 40/(Fs);
>> Ws = 150/(Fs);
>> [n,Wn] = cheb2ord(Wp,Ws,3,60);
>> [b,a] = cheby2(n,3,Wn);
>> freqz(b,a);
>> title(Filtro di Chebishev di tipo II del 4 ordine);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 17 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri Ellittici
Per progettare un ltro Ellittico numerico, posso utilizzare i comandi:
>> [b,a] = ellip(n,Rp,Rs,Wn,type);
>> [z,p,k] = ellip(n,Rp,Rs,Wn,type);
>> [A,B,C,D] = ellip(n,Rp,Rs,Wn,type);
Nelle precedenti funzioni n `e lordine del ltro, R
p
`e lampiezza del ripple ammesso
nella banda passante, R
s
`e lampiezza del ripple ammesso nella banda di arresta,
mentre W
n
`e la frequenza di taglio, che deve essere compresa tra 0 e 1. I vettori b
ed a sono lunghi n+1. Con il parametro type possiamo decidere il tipo di ltro,
cio`e se passa-basso (low), che `e lopzione di default, passa-alto (high) oppure
arresta-banda (stop). Se W
n
`e un vettore di due elementi (W
n
= [w
1
w
2
]), si
ottiene un ltro passa-banda di ordine 2n.
La seconda funzione ritorna il vettore degli zeri (z), dei poli (p) ed il guada-
gno del ltro (k). Inne la terza funzione ritorna le matrici A, B, C e D della
rappresentazione spazio di stato.
E anche possibile implementare un ltro analogico, con
>> [b,a] = ellip(n,Rp,Rs,Wn,type,s);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 18 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri Ellittici
Analogamente ai ltri precedenti, anche per i ltri Ellittici esiste la possibilit`a
di utilizzare una funzione che restituisce direttamente il ltro analogico:
>> [z,p,k] = ellipap(n);
che restituisce il vettore p dei poli ed il guadagno k di un ltro Ellittico
passa-basso e di ordine n:
H(s) = k
(s z
1
)(s z
2
) (s z
n
)
(s p
1
)(s p
2
) (s p
n
)
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 19 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
I ltri Ellittici
E utile valutare quale possa essere il minimo ordine di un ltro Ellittico che rispetti
le speciche richieste. Esiste una funzione di Matlab che restituisce questo ordine
minimo e la frequenza di taglio del ltro:
>> [n,Wn] = ellipord(Wp,Ws,Rp,Rs);
>> [n,Wn] = ellipord(Wp,Ws,Rp,Rs,s);
dove W
p
`e la frequenza di taglio della banda passante, W
s
`e la frequenza di taglio
della banda da arrestare, R
p
ed R
s
sono le rispettive attenuazioni. La seconda
funzione `e per i ltri analogici.
Filtro passa basso con banda di transizione tra 40 a 150 Hz, e
attenuazioni di 3 dB e 60 dB risoettivamente. La frequenza di
campionamento `e 1000 Hz:
>> Fs = 1000;
>> Wp = 40/(Fs/2);
>> Ws = 150/(Fs/2);
>> [n,Wn] = ellipord(Wp,Ws,3,60);
>> [b,a] = ellip(n,3,60,Wn);
>> freqz(b,a);
>> title(Filtro Ellittico del 4 ordine);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 20 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
La funzione yulewalk
Una funzione alternativa per il progetto di ltri digitali ricorsivi IIR `e la seguente:
>> [b,a] = yulewalk(n,f,m);
che restituisce i vettori b ed a dei coecienti del numeratore e denominatore del
ltro. Tali vettori sono lunghi n + 1, dove n `e lordine del ltro. f `e un vettore
che rappresenta alcuni punti di frequenze (normalizzate tra 0 e 1), mentre m `e un
vettore contenete la risposta in ampiezza desiderata per le frequenza riportate in
f .
Riportiamo un esempio di ltro IIR di ordine 8:
>> f = [0 0.6 0.6 1];
>> m = [1 1 0 0];
>> [b,a] = yulewalk(8,f,m);
>> [h,w] = freqz(b,a,128);
>> plot(f,m,w/pi,abs(h),r);
>> legend(Filtro Ideale,Approssimazione con yulewalk);
>> title(Paragone tra le risposte im ampiezza);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 21 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri FIR
Matlab mette a disposizione anche funzioni per il progetto di ltri FIR.
Lunilit`a di questo tipo di ltri `e lagata al fatto che la risposta impulsiva
ha durata nita, possono essere realizzati ecientemente in hardware, sono
sempre stabili e possono avere fase lineare.
Esistono diversi metodi per il progetto di questo tipo di ltri:
metodo della nestratura;
ltri multibanda con banda di transizione;
ai minimi quadrati (vincolati);
con risposta arbitraria;
a coseno rialzato;
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 22 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri FIR: fir1
La prima funzione analizzata `e la seguente:
>> b = fir1(n,Wn);
>> b = fir1(n,Wn,type);
>> b = fir1(n,Wn,window);
>> b = fir1(n,Wn,type,window);
in cui n `e lordine del ltro, W
n
la frequenza di taglio, type il tipo di ltro
(high per passa-alto, stop per arresta-banda) e window specica il tipo di
nestra adoperata (di default `e quella di hamming). Se W
n
`e un vettore di due
elementi (W
n
= [w
1
w
2
]), viene progettato un ltro passa-banda;, se `e un vettore
di pi` u elementi (W
n
= [w
1
w
2
w
3
w
4
w
n
]) viene progettato un ltro
multi-banda. La funzione fir1 restituisce il vettore b (lungo n + 1) dei
coecienti del ltro.
Riportiamo un esempio di ltro FIR passa-banda di ordine 48:
>> b = fir1(48,[0.35 0.6]);
>> freqz(b,1,512);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 23 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri FIR: fir2
Una seconda funzione, che permette di approssimare una maschera, `e la seguente:
>> b = fir2(n,f,m);
>> b = fir2(n,f,m,window);
>> b = fir2(n,f,m,npt);
>> b = fir2(n,f,m,npt,window);
in cui n `e lordine del ltro, f `e un vettore di frequenze (normalizzate tra 0 e 1)
ed m `e lampiezza della risposta nei punti descritti in f . window specica il tipo
di nestra adoperata (di default `e quella di hamming). npt indica il numero di
punti su cui interpolare il ltro. La funzione fir2 restituisce il vettore b (lungo
n + 1) dei coecienti del ltro.
Riportiamo un esempio di ltro FIR passa-basso di ordine 30:
>> f = [0 0.6 0.6 1];
>> m = [1 1 0 0];
>> b = fir2(30,f,m);
>> [h,w] = freqz(b,1,128);
>> plot(f,m,w/pi,abs(h),r);
>> legend(Filtro ideale,Filtro con fir2);
>> title(Paragone tra le risposte in ampiezza);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 24 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri FIR: remez
Per ottenere un ltro FIR a fase lineare `e possibile adoperare la funzione:
>> b = remez(n,f,a);
In b vengono restituiti n + 1 coecienti del ltro FIR di ordine n, con risposta di
ampiezza pari ai coecienti di a alle frequenze in f (normalizzate tra 0 e 1).
Riportiamo un esempio di ltro FIR di ordine 20:
>> f = [0 0.3 0.4 0.6 0.7 0.9];
>> a = [0 1 0 0 0.5 0.5];
>> b = remez(20,f,a);
>> [h,w] = freqz(b,1,512);
>> plot(f,a,w/pi,abs(h),r);
>> legend(Filtro ideale,Filtro con remez);
>> title(Paragone tra le risposte in ampiezza);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 25 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri FIR: firls
Per ottenere un ltro FIR a fase lineare `e possibile adoperare anche la funzione:
>> b = firls(n,f,a);
In b vengono restituiti n + 1 coecienti del ltro FIR di ordine n, con risposta di
ampiezza pari ai coecienti di a alle frequenze in f (normalizzate tra 0 e 1).
Riportiamo un esempio di ltro FIR di ordine 20:
>> f = [0 0.3 0.4 0.6 0.7 0.9];
>> a = [0 1 0 0 0.5 0.5];
>> b = firls(20,f,a);
>> [h,w] = freqz(b,1,512);
>> plot(f,a,w/pi,abs(h),r);
>> legend(Filtro ideale,Filtro con firls);
>> title(Paragone tra le risposte in ampiezza);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 26 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri FIR: fircls
Per ottenere un ltro FIR multibanda vincolato, si adopera:
>> b = fircls(n,f,a,up,lo);
In b vengono restituiti n + 1 coecienti del ltro FIR di ordine n, con risposta di
ampiezza pari ai coecienti di a alle frequenze in f (normalizzate tra 0 e 1).
up e lo (vettori della stessa dimensione di a) descrivono il limite minimo e
massimo della risposta in frequenza.
Riportiamo un esempio di ltro FIR di ordine 51:
>> n = 51;
>> f = [0 0.4 0.8 1];
>> a = [0 1 0];
>> up = [ 0.02 1.02 0.01];
>> lo = [-0.02 0.98 -0.01];
>> b = fircls(n,f,a,up,lo,plots);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 27 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri FIR: fircls1
Per ottenere un ltro FIR passa-basso o passa-alto vincolato, si adopera:
>> b = fircls1(n,wo,dp,ds);
>> b = fircls1(n,wo,dp,ds,high);
In b vengono restituiti n + 1 coecienti del ltro FIR di ordine n, con frequenza
di taglio pari a w
0
(normalizzate tra 0 e 1). dp e ds descrivono la massima
deviazione della risposta nella banda passante e banda di arresto.
Riportiamo un esempio di ltro FIR a fase lineare di ordine 55:
>> n = 55;
>> wo = 0.3;
>> dp = 0.02;
>> ds = 0.008;
>> b = fircls1(n,wo,dp,ds,plots);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 28 / 44
Il Progetto di Filtri in Matlab
FDATool
Progetto di ltri IIR
Progetto di ltri FIR
Il progetto di ltri FIR: firrcos
Per ottenere un ltro FIR a coseno rialzato utilizzo la funzione:
>> b = firrcos(n,fo,df,fs);
>> b = firrcos(n,fo,df,fs,bandwidth);
>> b = firrcos(n,fo,df);
>> b = firrcos(n,fo,r,fs,rolloff);
In b vengono restituiti n + 1 coecienti del ltro FIR di ordine n, con frequenza
di taglio pari a f
0
(normalizzate tra 0 e 1). df `e la banda di transizione, mentre
fs `e la frequenza di campionamneto (se non specicata `e fs = 2). Se specico
la variabile rolloff, allora il terzo parametro r `e interpretato come roll-o
del ltro, compreso tra 0 e 1.
Riportiamo un esempio di ltro FIR a coseno rialzato di ordine
20:
>> n = 20;
>> fo = 0.25;
>> df = 0.25;
>> b = firrcos(n,fo,df);
>> freqz(b,1);
>> title(Filtro a coseno rialzato);
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 29 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
Progettazione di un ltro: FDATool
La determinazione dei coecienti di un ltro pu`o essere eseguita in modo
semplice attraverso una comoda e funzionale interfaccia graca di Matlab:
FDATool (A Filter Design and Analysis GUI).
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 30 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
Progettazione di un ltro: FDATool
FDATool `e uninterfaccia graca che consente allutente di determinare i
coecienti dei ltri digitali, sia FIR che IIR, importando o esportando i
risultati.
Inoltre linterfaccia consente di selezionare tutti i parametri necessari,
nonch`e consente liserimento o leliminazione a mano (disegnando) di
poli e/o zeri nella funzione di trasferimento.
In aggiunta `e possibile gracare la mascherea del ltro, la risposta in
ampienza e in fase, il ritardo di gruppo, la risposta impulsiva e la
risposta al gradino.
Linterfaccia `e richiamata da linea di comando, eseguendo
>> fdatool
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 31 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
Progettazione di un ltro: FDATool
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 32 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
Progettazione di un ltro: FDATool
I possibili passi da eseguire con FDATool sono i seguenti:
1
scelta del tipo di ltro;
2
scelta del metodo di progetto del ltro;
3
scelta delle speciche del ltro;
4
analisi del ltro;
5
conversione della struttura del ltro;
6
importazione ed esportazione dei coecienti del ltro;
7
salvataggio del ltro.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 33 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: scelta del tipo di ltro
E possibile selezionare diversi tipi di ltri:
1
Passa-basso;
2
Passa-alto;
3
Passa-banda;
4
Arresta-banda;
5
Filtro risonante;
6
Filtro anti-risonante (o di Notch);
7
Multibanda;
8
Dierenziatore;
9
Trasformazione di Hilbert.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 34 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: scelta del metodo di progetto
E possibile selezionare i metodi per il progetto dei
ltri:
1
Butterworth;
2
Chebishev;
3
Ellittico;
4
Equiripple;
5
Leastsquares (o LS);
6
Massimamente at;
7
Con nestratura:
Bartlett;
Blackman;
Hamming;
Hann;
Kaiser;
Triangolare.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 35 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: scelta delle speciche del ltro
E possibile denire le speciche del ltro:
1
Maschera del ltro:
Frequenze di taglio;
Attenuazione per la banda passante;
Attenuazione per la banda di
attenuazione;
2
Ordine del ltro;
3
Opzioni.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 36 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: nestra di analisi
E possibile analizzare il ltro osservando la:
1
Maschera del ltro;
2
Risposta in ampiezza;
3
Risposta in fase;
4
Rispopsta in ampiezza e fase sovrapposte;
5
Ritardo di gruppo;
6
Risposta impulsiva;
7
Risposta al gradino;
8
Diagramma poli-zeri;
9
Cecienti del ltro;
10
Informazioni sul ltro progettato.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 37 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: convertire la struttura del ltro
E possibile convertire la struttura del ltro in una
delle seguenti altre:
1
Forma diretta I;
2
Forma diretta II;
3
Forma trasposta I;
4
Forma trasposta II;
5
Traliccio ARMA;
6
Spazio di stato.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 38 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: importare ed esportare il ltro
E possibile anche importare i coecienti di un ltro, specicandone la struttura,
oppure esportare i coecienti appena ricavati nel workspace o come oggetto
esterno.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 39 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: salvare il ltro
Inne `e possibile salvare il ltro progettato in un
le di estensione *.fda, che pu`o essere riaperto
con FDATool per futuri cambiamenti.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 40 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: un esempio
Si progetta come esempio di applicazione di FDATool, un ltro passa-banda
di tipo FIR Equiripple ad ordine minimo denominato tel-filter, con i
seguenti valori:
F
s
= 8000
F
stop1
= 200 Hz
F
pass1
= 400 Hz
F
pass2
= 3200 Hz
F
stop2
= 3400 Hz
A
stop1
= 60 Hz
A
pass
= 1 dB
A
stop2
= 80 dB
Density factor: 20
Il risultato `e salvato in un vettore h sul workspace.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 41 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: un esempio
E possibile visualizzare la risposta impulsiva di tale ltro, semplicemente
gracandone i campioni di h precedentemente salvata nel workspace:
>> stem(h);
>> grid;
0 10 20 30 40 50 60 70 80
0.2
0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
n
h
[
n
]
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 42 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
FDATool: un esempio
E possibile anche gracare la risposta in frequenza di tel-filter:
>> freqz(h,1);
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
6000
5000
4000
3000
2000
1000
0
1000
Normalized Frequency ( rad/sample)
P
h
a
s
e

(
d
e
g
r
e
e
s
)
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
150
100
50
0
50
Normalized Frequency ( rad/sample)
M
a
g
n
i
t
u
d
e

(
d
B
)
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 43 / 44
Il Progetto di Filtri in Matlab
FDATool
Lambiente
Un esempio
Bibliograa
Matlab
MATLAB 7: Getting Started Guide.
Available on-line: http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/getstart.pdf
Matlab
Signal Processing Toolbox 6: Users Guide.
Available on-line: http://www.mathworks.com/access/helpdesk/help/pdf_doc/signal/signal_tb.pdf
A.V. Oppenheim, R.W. Schafer.
Discrete-Time Signal Processing
2-nd Edition, Prentice Hall, 1999.
T.A. Davis.
MATLAB Primer.
8-th Edition, CRC Press, 2010..
D.M. Smith.
Engineering Computation with MATLAB.
2-nd Edition, Addison-Wesley, 2010.
A. Gilat.
MATLAB: An Introduction with Applications
Wiley, 2008.
A.D. Poularikas.
Signals and Systems Primer with MATLAB.
CRC Press, 2006.
M. Scarpiniti Circuiti a Tempo Discreto Esercitazione 10 - Il Progetto di Filtri in Matlab 44 / 44

Potrebbero piacerti anche