next up previous   
Next: Banco di filtri: esecuzione del programma Up:Introduzione  Previous: Analisi spettrale non parametrica: esecuzione del programma
Intro Gen: Introduzione Generale  Home: Home page

 

BANCO DI FILTRI

Con questo programma verrà dimensionato un banco di filtri come combinazione di un filtro polifase e FFT.

Il procedimento seguito consiste nello scomporre lo spettro di un generico segnale in un numero di canali da noi fissato a priori, utilizzando un opportuno filtro passabasso e sottocampionando sia la risposta all’impulso del segnale che del filtro per il numero di canali considerati.

La risposta all’impulso del filtro è introdotta utilizzando una workspace ossia un file di dati di MATLAB  ( hanno estensione ‘mat’ ).

 

banco.m

 

% PROGETTO DI UN BANCO DI FILTRI ( decomposizione multicanale del segnale )

 

% La risposta all'impulso del filtro passabasso verrà introdotta dall'esterno

 

% Lo spettro del segnale introdotto quindi sarà suddiviso in un numero di blocchi pari

% a quelli richiesti dalle nostre specifiche per cui non ci sarà alcuna elaborazione

% del segnale in queste bande

 

clear all

 

err=0;

while err==0 

   disp('inserisci il nome del file (.mat) contenente i campioni ');

   H=input('della risposta all''impulso del filtro passabasso : ','s');

   H=[H,'.mat'];

   if exist(H)==0

      disp('LA WORKSPACE INTRODOTTA NON ESISTE');

   else

      err=1;

   end

end

load(H);

N=length(h);

strN=int2str(N);

disp(['la risposta all''impulso del filtro è composta da ',strN,' campioni']);

err=0;

while err==0

   M=input('introduci il numero di canali : ');

   if M>N

      disp('Il numero di canali richiesto è troppo elevato! ');

   else

      err=1;

   end

end

if floor(N/M)~=ceil(N/M)

   h=[h',zeros(1,M-mod(N,M))];

   disp('ATTENZIONE : il rapporto tra la lunghezza della risposta all''impulso ');

   disp('             del filtro e il numero di canali non è un numero intero! ');

   N=length(h);

end

K=N/M;

err=0;

while err==0

   F=input('inserisci il nome della function contenente il segnale : ','s');

   if exist(F)==0

      disp('LA FUNZIONE INTRODOTTA NON ESISTE');

   else

      err=1;

   end

end

f=feval(F);

L=length(f);

[H,w]=freqz(h,1,L);

 

figure

plot(w/(2*pi),abs(H))

xlabel('f/fc')

set(gcf,'color',[1,1,1]);

title('spettro del filtro utilizzato')

axis([min(w/(2*pi)) max(w/(2*pi)) 0 max(abs(H))])

for m=1:M

   for k=0:K-1

      hh(k+1)=h(k*M+m);

   end

   pass1=[zeros(1,m-1) f];

   for k=0:floor((L-1)/M)

      ff(k+1)=pass1(k*M+1);

   end

   pass2=conv(ff,hh);

   lung=length(ff);

   convol(:,m)=pass2(1:lung)';

   clear ff hh

end

for i=1:lung

   dft(i,:)=fft(convol(i,:));

end

for i=1:M

   spettro(:,i)=abs(fft(dft(:,i)))*M;

end

 

mas=max(max(spettro));

 

freq=(-1/(2*M):1/(M*lung):(1/(2*M))*(1-1/(M*lung)))+1/M;

for i=1:M

   figure

   freq=freq-1/M;

   plot(freq,[spettro(ceil(lung/2)+1:lung,i)' spettro(1:floor(length(spettro)/2)+1,i)'])

   xlabel('f/fc')

   set(gcf,'color',[1,1,1]);

   stri=int2str(i);

   title(['spettro del segnale nella banda ',stri])

   axis([min(freq) max(freq) 0 mas])

   fine=[spettro(ceil(lung/2)+1:lung,i)' spettro(1:floor(length(spettro)/2)+1,i)' fine];

end

figure

freq=((1/(2*M))-1:1/(M*lung):(1/(2*M))*(1-1/(M*lung)));

plot(freq,fine)

xlabel('f/fc')

set(gcf,'color',[1,1,1]);

title('spettro del segnale rimettendo insieme tutte le bande')

 


  sinus.m

 

function vet=sinus1;

 

tempo=500e-3;

T=5/50010;

f1=500;

f2=1500;

f3=2500;

f4=3500;

f5=4500;

campioni=tempo/T;

k=(1:1:campioni);

xf=(k-1)*T;

yf=(sin(2*pi*f1*xf)+0.8*sin(2*pi*f2*xf)+0.6*sin(2*pi*f3*xf)+...

   0.4*sin(2*pi*f4*xf)+0.2*sin(2*pi*f5*xf));

vet=yf;

figure

plot(xf,yf);

xlabel('sec');

set(gcf,'color',[1,1,1]);

title('grafico del segnale nel tempo');

zoom

ff=abs(fft(yf));

figure

freq=[-1/2:1/campioni:(1/2)*(1-1/campioni)];

plot(freq,[ff(ceil(campioni/2):campioni) ff(1:floor(campioni/2))]);

xlabel('f/fc');

set(gcf,'color',[1,1,1]);

title('spettro del segnale');

triang.m

 

function r=triang;

 

f=5000;      

tempo=500e-3;

T=1/10000;

campioni=(tempo/T)+1;

k=(1:campioni);

x=(k-(length(k)+1)/2)*T;

for i=1:length(x)

   if i~=(length(k)+1)/2

      y(i)=2*(sin(pi*f*x(i))./(pi*(T^-1)*x(i))).^2;

   end

end

y((length(k)+1)/2)=2*(f*T)^2;

r=y;

figure

plot(x*1000,y);

xlabel('ms');

set(gcf,'color',[1,1,1]);

title('grafico del segnale nel tempo');

ff=abs(fft(r));

figure

freq=[-1/2:1/campioni:(1/2)*(1-1/campioni)];

plot(freq,[ff(ceil(campioni/2):campioni) ff(1:floor(campioni/2))]);

xlabel('f/fc');

set(gcf,'color',[1,1,1]);

title('spettro del segnale');

 

 

workspace utilizzate ( filtri passabasso )

 (scaricare i seguenti file con estensione .MAT)

 

1)       Basso1_4.mat : banda passante compresa tra  f1 = 0 Hz  e  f2 = 0,125·fc Hz

Il filtro viene utilizzato per la scomposizione in 4 canali dello spettro di un generico segnale.

All’interno della workspace è presente un vettore di 204 elementi.

 

Download : Basso1_4.mat   

 

2)       Basso1_5.mat : banda passante compresa tra  f1 = 0 Hz  e  f2 = 0,1·fc Hz       

Il filtro viene utilizzato per la scomposizione in 5 canali dello spettro di un generico segnale.

All’interno della workspace è presente un vettore di 205 elementi.

 

Download : Basso1_5.mat   

 

Entrambi realizzati con un filtro FIR in cui è usata una finestra rettangolare.

 

 

3)       Basso2_4.mat : banda passante compresa tra  f1 = 0 Hz  e  f2 = 0,125·fc Hz 

Il filtro viene utilizzato per la scomposizione in 4 canali dello spettro di un generico segnale.

All’interno della workspace è presente un vettore di 204 elementi.

 

Download : Basso2_4.mat   

 

4)       Basso2_5.mat : banda passante compresa tra  f1 = 0 Hz  e  f2 = 0,1·fc Hz     

Il filtro viene utilizzato per la scomposizione in 5 canali dello spettro di un generico segnale.

All’interno della workspace è presente un vettore di 205 elementi.

 

Download : Basso2_5.mat   

 

Entrambi realizzati con un filtro FIR in cui è usata una finestra di Hamming.

 

 

5)     Basso3_5.mat : banda passante compresa tra  f1 = 0 Hz  e  f2 = 0,1·fc Hz      

Il filtro viene utilizzato per la scomposizione in 5 canali dello spettro di un generico segnale.

All’interno della workspace è presente un vettore di 205 elementi.

Realizzato con un filtro FIR a fase lineare secondo l’approssimazione di Chebyshev, utilizzando l’algoritmo di Remez: la banda di transizione fissata è compresa tra ft1 = 0,095 · fc Hz   e   ft2 = 0,105 · fc Hz  ed inoltre il valore del ripple fissato nella banda passante e arrestata è lo stesso.

 

Download : Basso3_5.mat   

 

 

ALTRO ESEMPIO: vedere che filtro è il seguente file .MAT

 

Download : Basso4_5.mat   

 

 


next up previous   
Next: Banco di filtri: esecuzione del programma Up:Introduzione  Previous: Analisi spettrale non parametrica: esecuzione del programma
Intro Gen: Introduzione Generale  Home: Home page
Vito Marinelli
11-6-2000

HyperCounter
BPath Contatore