LABORATÓRIO DE PROCESSAMENTO DIGITAL I (2015)
Prof. José Roberto Marques
Regras para projeto para filtros digitais rejeita faixa e passa faixa passa
baixas e passa altas utilizando o método de fixação polo zero.
O script abaixo permite a visualização dos 4 tipos básicos de filtros:
a) Rejeita faixa – frequência central = 60Hz
b) Passa faixa – frequência central de 1000Hz
c) Passa baixa – frequência de corte de 100Hz
d) Passa altas – frequência de corte de 3800Hz
Execute o código verificando qual o valor do ganho no ponto de -3dB
para cada filtro sob investigação no próprio gráfico gerado, utilizando em
seguida as funções de teste para verificar o desempenho do filtro
%CONJUNTO DE REGRAS DE FIXAÇÃO POLO-ZERO E FUNÇÕES DE TESTE disp('passa baixa de 1a ordem')
clear all; close all;
Fs=8000; %amostragem
banda=100; %largura de banda = frequencia critica
if (banda/Fs) < 1/4 alfa=1-2*(banda/Fs)*pi; else alfa=-(1-pi+2*(banda/Fs)*pi); end k0=(1-alfa)/2 c=1:4000; f=c-1; for k=1:c(end) NUM_h(k)=abs(k0*(1+exp(-i*2*pi*k/Fs))); DEN_h(k)=abs((1-alfa*exp(-i*2*pi*k/Fs))); h(k)=NUM_h(k)/DEN_h(k); end plot(c,h) grid
title('PASSA BAIXAS – frequencia de corte = 100 Hz') xlabel('frequencia (Hz)')
ylabel('Ganho (pu)');
disp('parametros do filtro') b0=k0 b1=k0 a1=alfa disp('USO:') disp('y(n)=k0*(x(n)+x(n-1))+a1*y(n-1)') pause
%IMPLEMENTAÇÃO DE UM TESTE - GERAÇÂO DO SINAL DE TESTE c=1:4000; %gere um sinal de 1000 pontos
t=(c-1)/Fs; %tempo que suporta os pontos gerados %Geração do sinal de teste
title( '10+10*cos(2*pi*20*t)+10*sin(2*pi*60*t)-10*sin(2*pi*100*t)+10*sin(2*pi*150*t)'); grid xlabel('tempo (s)'); ylabel('x(t)'); pause
Ti=0;Tf=t(length(t));Fator=32; %Definindo os parâmetros do espectro de frequencias
[Y1,f]=Mfft(x,Ti,Tf,Fs,Fator); plot(f,Y1)
grid minor
title('Espectro de frequencias de x(t)'); ylabel('Módulo do conteúdo frequencial') xlabel('frequencia (Hz)');
pause
y(1)=0;%y(2)=z(2); N=c(end);
for k=1:N-1 %ative o filtro digital
y(k+1,:)=0.0393*x(k+1)+0.0393*x(k)+0.9215*y(k,:);
end
y=y'; plot(t,y)
[Y2,f]=Mfft(y,Ti,Tf,Fs,Fator); %faça a analise espectral da saída plot(f,Y2)
grid minor
title('Espectro de frequencias de x(t)'); ylabel('Módulo do conteúdo frequencial') xlabel('frequencia (Hz)');
pause
plot(f,Y1,f,Y2,'r') grid minor
title('Espectro de frequencias de x(t) e y(t)'); ylabel('Módulo do conteúdo frequencial')
xlabel('frequencia (Hz)'); pause
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% disp('passa altas de 1a ordem')
clear all; close all;
Fs=8000; %amostragem
Fcorte=3800; %largura de banda = frequencia critica
if (Fcorte/Fs) < 1/4 alfa=1-2*(Fcorte/Fs)*pi; else alfa=-(1-pi+2*(Fcorte/Fs)*pi); end k0=(1+alfa)/2 c=1:4000; f=c-1; for k=1:c(end) NUM_h(k)=abs(k0*(1-exp(-i*2*pi*k/Fs))); DEN_h(k)=abs((1-alfa*exp(-i*2*pi*k/Fs))); h(k)=NUM_h(k)/DEN_h(k); end plot(c,h) grid
title('PASSA ALTAS – frequencia de corte = 3800 Hz') xlabel('frequencia (Hz)')
ylabel('Ganho (pu)');
xlabel('frequencia (Hz)') ylabel('Ganho (pu)');
disp('parametros do filtro') b0=k0 b1=k0 a1=alfa disp('USO:') disp('y(n)=k0*(x(n)-x(n-1))+a1*y(n-1)') pause
%IMPLEMENTAÇÃO DE UM TESTE - GERAÇÂO DO SINAL DE TESTE c=1:8000; %gere um sinal de 1000 pontos
t=(c-1)/Fs; %tempo que suporta os pontos gerados %Geração do sinal de teste
x=10+10*cos(2*pi*1000*t)+10*sin(2*pi*2000*t)-10*sin(2*pi*3800*t)+10*sin(2*pi*5000*t); plot(t,x); title( '10+10*cos(2*pi*1000*t)+10*sin(2*pi*2000*t)-10*sin(2*pi*3800*t)+10*sin(2*pi*5000*t)'); grid xlabel('tempo (s)'); ylabel('x(t)'); pause
Ti=0;Tf=t(length(t));Fator=2; %Definindo os parâmetros do espectro de frequencias
[Y1,f]=Mfft(x,Ti,Tf,Fs,Fator); plot(f,Y1)
grid minor
title('Espectro de frequencias de x(t)'); ylabel('Módulo do conteúdo frequencial') xlabel('frequencia (Hz)');
pause
y(1)=0;%y(2)=z(2); N=c(end);
for k=1:N-1 %ative o filtro digital
y(k+1,:)=0.0785*x(k+1)-0.0785*x(k)-0.8429*y(k,:);
end
y=y'; plot(t,y)
[Y2,f]=Mfft(y,Ti,Tf,Fs,Fator); %faça a analise espectral da saída plot(f,Y2)
grid minor
title('Espectro de frequencias de x(t)'); ylabel('Módulo do conteúdo frequencial') xlabel('frequencia (Hz)');
pause
plot(f,Y1,f,Y2,'r') grid minor
title('Espectro de frequencias de x(t) e y(t)'); ylabel('Módulo do conteúdo frequencial')
xlabel('frequencia (Hz)'); pause
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% disp('passa faixa de 2a ordem')
clear all; close all;
Fs=8000; %amostragem
banda=200; %largura de banda F0=1000; %frequencia central alfa=1-banda/Fs*pi;
k01=(1-alfa)*sqrt(1-2*alfa*cos(2*theta)+alfa^2)/(2*sin(2*theta)); c=1:Fs/4; f=c-1; k0=1/32.3; for k=1:c(end) NUM_h(k)=abs(k0*(1-exp(-i*4*pi*k/Fs))); DEN_h(k)=abs((1-2*alfa*cos(theta)*exp(-i*2*pi*k/Fs)+alfa^2*exp(-i*4*pi*k/Fs))); h(k)=NUM_h(k)/DEN_h(k); end plot(c,h) grid
title('PASSA FAIXA – frequencia central = 1000Hz') xlabel('frequencia (Hz)')
ylabel('Ganho (pu)');
disp('parametros do filtro') b0=k0 b2=k0 a1=2*alfa*cos(theta) a2=-alfa^2 disp('USO:') disp('y(n)=x(n)-x(n-2)+a1*y(n-1)-a2*y(n-2)') kp=1000; NUM_h(kp)=abs(k0*(1-exp(-i*4*pi*kp/Fs))); DEN_h(kp)=abs((1-2*alfa*cos(theta)*exp(-i*2*pi*kp/Fs)+alfa^2*exp(-i*4*pi*kp/Fs))); h(kp)=NUM_h(kp)/DEN_h(kp); pause
%IMPLEMENTAÇÃO DE UM TESTE - GERAÇÂO DO SINAL DE TESTE c=1:8000; %gere um sinal de 1000 pontos
t=(c-1)/Fs; %tempo que suporta os pontos gerados %Geração do sinal de teste
x=10+10*cos(2*pi*500*t)+10*sin(2*pi*800*t)-10*sin(2*pi*1000*t)+10*sin(2*pi*1200*t); plot(t,x); title( 'x=10+10*cos(2*pi*500*t)+10*sin(2*pi*800*t)-10*sin(2*pi*1000*t)+10*sin(2*pi*1200*t)'); grid xlabel('tempo (s)'); ylabel('x(t)'); pause
Ti=0;Tf=t(length(t));Fator=4; %Definindo os parâmetros do espectro de frequencias
[Y1,f]=Mfft(x,Ti,Tf,Fs,Fator); plot(f,Y1)
grid minor
title('Espectro de frequencias de x(t)'); ylabel('Módulo do conteúdo frequencial') xlabel('frequencia (Hz)');
pause
y(1)=0;y(2)=0; N=c(end);
% y(1)=z(1);y(2)=z(2);
for k=1:N-2 %ative o filtro digital
y(k+2)=0.0755*x(k+2)-0.0755*x(k)+1.3031*y(k+1)-0.8491*y(k);
end
%y=y'; plot(t,y) pause
grid minor
title('Espectro de frequencias de y(t)'); ylabel('Módulo do conteúdo frequencial') xlabel('frequencia (Hz)');
pause
plot(f,Y1,f,Y2,'r') grid minor
title('Espectro de frequencias de x(t) e y(t)'); ylabel('Módulo do conteúdo frequencial')
xlabel('frequencia (Hz)'); pause
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% disp('rejeita faixa de 2a ordem')
clear all; close all; F0=1500; banda=200; Fs=8000; c=1:Fs/4; f=c-1; alfa=1-(banda/Fs)*pi; theta=(F0/Fs)*2*pi; k0=(1-2*alfa*cos(theta)+alfa^2)/(2-2*cos(theta)) for k=1:c(end) NUM_h(k)=abs(k0*(1-2*cos(theta)*exp(-i*2*pi*k/Fs)+exp(-i*4*pi*k/Fs))); DEN_h(k)=abs((1-2*alfa*cos(theta)*exp(-i*2*pi*k/Fs)+alfa^2*exp(-i*4*pi*k/Fs))); h(k)=NUM_h(k)/DEN_h(k); end plot(c,h)
title('REJEITA FAIXA – frequencia central = 1500Hz') grid
xlabel('frequencia (Hz)') ylabel('Ganho (pu)');
disp('parametros do filtro') b0=k0 b1=k0*(-2*cos(theta)) b2=k0 a1=2*alfa*cos(theta) a2=-alfa^2 disp('USO:') disp('y(n)=x(n)-b1*x(n-1)+x(n-2)+a1*y(n-1)-a2*y(n-2)') pause
%IMPLEMENTAÇÃO DE UM TESTE - GERAÇÂO DO SINAL DE TESTE c=1:8000; %gere um sinal de 1000 pontos
t=(c-1)/Fs; %tempo que suporta os pontos gerados %Geração do sinal de teste
x=10+10*cos(2*pi*500*t)+10*sin(2*pi*1000*t)-10*sin(2*pi*1500*t)+10*sin(2*pi*2000*t); plot(t,x); title( '10+10*cos(2*pi*500*t)+10*sin(2*pi*1000*t)-10*sin(2*pi*1500*t)+10*sin(2*pi*2000*t)'); grid xlabel('tempo (s)'); ylabel('x(t)'); pause
Ti=0;Tf=t(length(t));Fator=2; %Definindo os parâmetros do espectro de frequencias
plot(f,Y1) grid minor
title('Espectro de frequencias de x(t)'); ylabel('Módulo do conteúdo frequencial') xlabel('frequencia (Hz)');
pause
y(1)=0;y(2)=0; N=c(end);
% y(1)=z(1);y(2)=z(2);
for k=1:N-2 %ative o filtro digital
y(k+2)=0.9620*x(k+2)-0.7363*x(k+1)+0.9620*x(k)+0.7353*y(k+1)-0.9229*y(k); end %y=y'; plot(t,y) pause
[Y2,f]=Mfft(y,Ti,Tf,Fs,2); %faça a analise espectral da saída plot(f,Y2)
grid minor
title('Espectro de frequencias de y(t)'); ylabel('Módulo do conteúdo frequencial') xlabel('frequencia (Hz)');
pause
plot(f,Y1,f,Y2,'r') grid minor
title('Espectro de frequencias de x(t) e y(t)'); ylabel('Módulo do conteúdo frequencial')