next up previous   
Next: Filtri FIR passabasso usando le finestre: esecuzione del programma Up:Introduzione  Previous: La convoluzione: esecuzione del programma
Intro Gen: Introduzione Generale  Home: Home page

 

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

 

basso.m

 

function vet=basso

N=21;

vet=[ones(1,(N-1)/5+1) zeros(1,0.8*(N-1))];  


next up previous   
Next: Filtri FIR passabasso usando le finestre: esecuzione del programma Up:Introduzione  Previous: La convoluzione: esecuzione del programma
Intro Gen: Introduzione Generale  Home: Home page
Vito Marinelli
11-6-2000

HyperCounter
BPath Contatore