FILTRI FIR PASSABASSO USANDO LE FINESTRE Con
questo programma verranno realizzati dei filtri FIR passabasso utilizzando le
finestre rettangolari, triangolari, cosinusoidali e di Hanning, Hamming e
Blackman. Finestre.m %
PROGETTO DI FILTRI FIR UTILIZZANDO LE FINESTRE %
Verrā realizzato un filtro a partire da quello ideale %
per il quale conosciamo il suo spettro introdotto dall'esterno %
i metodi utilizzati sono differenti clear
all err=0; while
err==0
F=input('inserisci
il nome della function contenente i punti del filtro ideale : ','s');
if
exist(F)==0
disp('LA
FUNZIONE INTRODOTTA NON ESISTE');
else
err=1;
end end disp('Scegli
il tipo di finestra da utilizzare:'); err=0; while
err==0
disp('1.Finestra
rettangolare');
disp('2.Finestra
triangolare o di Bartlett');
disp('3.Finestra
cosinusoidale');
disp('4.Finestra
coseno rialzato o di Hanning');
disp('5.Finestra
di Hamming');
disp('6.Finestra
di Blackman');
risp=input('Introduci
il numero corrispondente:');
if risp~=1
& risp~=2 & risp~=3 & risp~=4 & risp~=5 & risp~=6
disp('Il
valore introdotto č errato.Ricomincia');
else
err=1;
end end filtro=feval(F); M=length(filtro); strM=int2str(M); disp(['Il
numero di campioni del filtro da realizzare sono: ',strM]) for
i=1:length(filtro)-1
filtroinv(i)=filtro(length(filtro)-i+1); end filtro=[filtro
filtroinv]; N=length(filtro); strN=int2str(N); disp(['Il
numero di campioni del filtro ideale considerando anche le frequenze '...
'negative
sono: ',strN]) if
risp==1
% FINESTRA
RETTANGOLARE
fin=ones(1,N);
strfinestra='rettangolare'; end if
risp==2
% FINESTRA
TRIANGOLARE O DI BARTLETT
for
i=2:(N+1)/2
fin(i)=(2/(1-N))*(i-(N+1)/2);
fin(N-i+2)=(2/(1-N))*(i-(N+1)/2);
end
fin(1)=1;
strfinestra='triangolare
o di Bartlett'; end if
risp==3
%
FINESTRA COSINUSOIDALE
for
i=2:(N+1)/2
fin(i)=cos(pi*(i-1)/N);
fin(N-i+2)=cos(pi*(i-1)/N);
end
fin(1)=1;
strfinestra='cosinusoidale'; end if
risp==4
%
FINESTRA COSENO RIALZATO O DI HANNING
for
i=2:(N+1)/2
fin(i)=0.5*(1+cos(2*pi*(i-1)/N));
fin(N-i+2)=0.5*(1+cos(2*pi*(i-1)/N));
end
fin(1)=1;
strfinestra='coseno
rialzato o di Hanning'; end if
risp==5
%
FINESTRA DI HAMMING
for
i=2:(N+1)/2
fin(i)=0.54+0.46*cos(2*pi*(i-1)/N);
fin(N-i+2)=0.54+0.46*cos(2*pi*(i-1)/N);
end
fin(1)=1;
strfinestra='di
Hamming'; end if
risp==6
%
FINESTRA DI BLACKMAN
for
i=2:(N+1)/2
fin(i)=0.42+0.5*cos(2*pi*(i-1)/N)+0.08*cos(4*pi*(i-1)/N);
fin(N-i+2)=0.42+0.5*cos(2*pi*(i-1)/N)+0.08*cos(4*pi*(i-1)/N);
end
fin(1)=1;
strfinestra='di
Blackman'; end %CALCOLO
DELLA RISPOSTA ALL'IMPULSO %DISEGNO
DELLA RISPOSTA IN FREQUENZA DELLE FINESTRE E DEL FILTRO IDEALE E REALE x1=(-0.5:1/(N-1):0.5); graft=[fin((N+3)/2:N)
fin(1:(N+1)/2)]; figure plot(x1,graft); xlabel('t/NT'); title(['forma
della funzione della finestra ',strfinestra]); zoom finn=[fin(1:(N+1)/2)
zeros(1,39*N) fin((N+3)/2:N)];
% DFT
della finestra ffinn=abs(fft(finn)); graff=[ffinn(40*N-199:40*N)
ffinn(1:201)]; x2=(-5:1/40:5); figure plot(x2,graff); xlabel('fNT'); title(['modulo
della risposta in frequenza della finestra ',strfinestra]); zoom for
i=1:length(finn)
if
ffinn(i)<1e-8
ffinn(i)=1e-8;
end end dBfinn=20*log10(ffinn); dBgraff=[dBfinn(40*N-199:40*N)
dBfinn(1:201)]; figure plot(x2,dBgraff); xlabel('fNT'); ylabel('dB'); title(['modulo
della risposta in frequenza della finestra ',strfinestra,'
in dB']); zoom x3=(-0.5:1/(N-1):0.5); figure hold
on grafico=plot(x3,[filtro((N+3)/2:N)
filtro(1:(N+1)/2)],'.r'); set(grafico,'linestyle','.','markersize',10) plot(x3,[filtro((N+3)/2:N)
filtro(1:(N+1)/2)]); title('modulo
della risposta in frequenza del filtro ideale'); xlabel('fT'); zoom risposta=real(ifft(filtro));
%
operazione di finestratura rispf=risposta.*fin; filtrof=abs(fft([rispf(1:(N+1)/2)
zeros(1,39*N) rispf((N+3)/2:N)])); x4=(-0.5:1/(40*N-40):0.5); figure hold
on grafico=plot(x3,[filtro((N+3)/2:N)
filtro(1:(N+1)/2)],'.r'); set(grafico,'linestyle','.','markersize',10); plot(x4,[filtrof(20*N+21:40*N)
filtrof(1:20*N-19)]); title(['modulo
della risposta in frequenza del filtro reale realizzato '...
'con la
finestra ',strfinestra]); xlabel('fT'); zoom for
i=1:length(filtrof)
if
filtrof(i)<1e-8
filtrof(i)=1e-8;
end end dBfiltrof=20*log10(filtrof); figure plot(x4,[dBfiltrof(20*N+21:40*N)
dBfiltrof(1:20*N-19)]); xlabel('fT'); ylabel('dB'); title(['modulo
della risposta in frequenza del filtro reale realizzato '...
'con la
finestra ',strfinestra,'
in dB']); zoom function
vet=basso N=21; vet=[ones(1,(N-1)/5+1)
zeros(1,0.8*(N-1))];
|