segunda-feira, 2 de junho de 2014

Lab - Filtros FIR e IIR

A escolha entre os filtros FIR e IIR depende da aplicação específica e deve considerar as características de cada um.

Os filtros FIR tem resposta de fase linear. Isso implica que nenhuma distorção de fase é produzida no sinal filtrado. Essa característica é importante em diversas aplicações como processamento de áudio e imagem, biomedicina e transmissão de dados.

Filtros FIR são realizados de modo não-recursivo, e assim são sempre estáveis. O mesmo não pode ser garantido para os filtros IIR. Os efeitos da precisão finita e dos erros de quantização são menos severos para os filtros FIR.

Os filtros IIR, em geral, necessitam de menos coeficientes que os FIR para atender a uma mesma especificação de projeto. Um filtro de menor ordem tem menor tempo de execução. Filtros analógicos podem ser facilmente convertidos em filtros digitais IIR equivalentes.

De modo geral pode-se usar as indicações abaixo:

- Utilizar um filtro IIR sempre que for importante uma resposta bem seletiva no domínio da frequência ou quando for necessário realizar a conversão das especificações de um filtro analógico;

- Utilizar um filtro FIR quando o número de coeficientes não é grande (pois a estabilidade da estrutura FIR é garantida) e especialmente quando a distorção de fase desejada for pequena.

A principal desvantagem dos filtros FIR é que muitas vezes necessitam de um filtro de ordem muito maior do que os filtros IIR para alcançar um determinado nível de desempenho. Correspondentemente, o atraso destes filtros é frequentemente muito maior do que para um desempenho igual do filtro IIR.


 Laboratório MATLAB – Filtros FIR e IIR

Para filtros do tipo FIR, utiliza-se a função FIR1. Esta função tem como sintaxe principal:

B = FIR1(N,Wn);

A função retornará ao vetor B o valor dos coeficientes do filtro FIR. Além dos parâmetros N, número de amostragem, e Wn, freqüência normalizada, pode-se utilizar as definições de tipos de filtro (‘HIGH’, ‘BANDPASS’ e ‘STOP’) e definição do tipo de janelamento a ser utilizado:

Para janela retangular e de hamming, utilizamos respectivamente:

B = FIR1(N,Wn, boxcar(N+1));

B = FIR1(N,Wn, hamming(N+1));


1) Plotar as curvas de resposta para janela retangular e janela de hamming de um filtro passa-baixas, com N = 11 e Wn = 0.2:

- Janela retangular

No Matlab:

b = fir1(11, 0.2, boxcar(12));
[H,W] = freqz(b,1,1024);
plot(W,20*log10(abs(H)));
title('Janela Retangular');
xlabel('Frequência Normalizada (xpirad/amostra)');
ylabel('Magnitude(dB)');




- Janela de Hamming

No Matlab:

b = fir1(11, 0.2, hamming(12));
[H,W] = freqz(b,1,1024);
plot(W,20*log10(abs(H)));
title('Janela de Hamming');
xlabel('Frequência Normalizada (xpirad/amostra)');
ylabel('Magnitude(dB)');



2) Projetar um filtro FIR passa-baixa com banda passante de 0 a 1kHz e banda de corte a partir de 1,5 a 4kHz. Especifique uma ondulação da banda passante de 5% e uma atenuação de 40dB da banda de corte: 

No Matlab:

fsamp = 8000;
fcuts = [1000 1500];
mags = [1 0];
devs = [0.05 0.01];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
freqz(hh)



3) Escreva um programa no MATLAB para projetar um filtro FIR e traçar a resposta em magnitude e fase para a especificação dada usando a janela Kaiser.
a. Ondulação da banda de passagem = 0,087 dB
b. Atenuação da banda de corte = 60 dB
c. Limite da faixa de freqüência de passagem = 0.4π
d. Frequência da borda da banda de corte = 0.6π


No Matlab:

fs = 100;                %rad/sec, frequência de amostragem
pf = 0.4*pi;             %rad/sec, banda da Frequencia de passagem
sf = 0.6*pi;             %rad/sec, banda da Frequencia de corte
fsamp = fs/(2*pi);
 % fs em hertz
pf1 = pf/(2*pi);
% pf em hetz
sf1 = sf/(2*pi);
% sf em hertz
d1 = 10^(-0.05*60);     %Ondulação da banda de corte
d2 = (10^(0.05*0.087)-1)/(10^(0.05*0.087)+1); %Ondulação da banda de passagem
fcuts = [pf1 sf1];        %Frequencia da banda de passagem e de corte
mags = [1 0];           %atribuição da magnitude
%d3 = min(d1,d2);
devs = [d2 d1];         %Definição do desvio
w = 0:0.01:pi;
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fs);
h = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
[H,f] = freqz(h,1,w);   % resposta de freqüência e vetor de freqüência
gain = 20*log10(abs(H));
a = angle(H);
%Traçando os gráficos
subplot(2,1,1);
plot(f/pi, gain); grid on;
title('Resposta em Magnitude da janela Kaiser');
xlabel('Frequência Normalizada');
ylabel (' Ganho em dB');
subplot(2,1,2);
plot(f/pi, a); grid on;
title('Resposta de fase da janela Kaiser');
xlabel('Frequência Normalizada');
ylabel('Angulo');



4) Escreva um programa no MATLAB para projetar um filtro FIR e traçar a resposta em magnitude e fase usando janela retangular, Hamming e Hanning.
a. Ondulação da banda de passagem = 0,4 dB
b. Atenuação da banda de corte = 44 dB
c. Freqüência limite da banda de passagem = 3000Hz
d. Frequência da borda da banda de corte = 2000Hz
e. Freqüência de Amostragem = 8000 Hz

No Matlab:

fsamp = 8000;      
%frequência de amostragem
fcuts = [2000 3000];
mags = [0 1];       
%magnitude
d1 = 10^(-0.05*44);
%Ondulação da banda de corte
d2 = (10^(0.05*0.1)-1)/(10^(0.05*0.1)+1);
%ondulação da banda de passagem
devs = [d2 d1];     %Definição do desvio
W = 0:0.01:pi;                                         
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);  %para obter a ordem

% Janela de Hanning
 h = hann(n+1);
b = fir1(n,Wn,h);
w = 0:0.01:pi;
[H,f] = freqz(b,1,w);
gain = 20*log10(abs(H));
an = angle(H);

%plotagem da resposta em magnitude e fase da janela de Hanning
figure;
subplot(2,1,1);
plot(f/pi, gain); grid on;
title('Resposta em Magnitude da Janela Hanning');
xlabel('Frequência Normalizada');
ylabel('Ganho em dB');
subplot(2,1,2);
plot(f/pi, an); grid on;
title('Resposta em Fase da Janela Hanning');
xlabel('Frequência Normalizada');
ylabel(' Angulo');



No Matlab:

% janela HAMMING
h = hamming(n+1);
b = fir1(n,Wn,h);
w = 0:0.01:pi;
[H,f] = freqz(b,1,w);
gain = 20*log10(abs(H));
an = angle(H);

%plotagem da resposta em magnitude e fase da janela de Hamming
figure;
subplot(2,1,1);
plot(f/pi, gain); grid on;
title ('Resposta em Magnitude da janela Hamming');
xlabel('Frequência Normalizada');
ylabel (' Ganho em dB');
subplot(2,1,2);
plot(f/pi, an); grid on;
title('Resposts em fase da janela Hamming');
xlabel (' Frequência Normalizada');
ylabel(' Angulo');


No Matlab: 

%janela RECTANGULAR
h = rectwin(n+1);
b = fir1(n,Wn,h);
w = 0:0.01:pi;
[H,f] = freqz(b,1,w);
gain = 20*log10(abs(H));
an = angle(H);

%plotagem da resposta em magnitude e phase da janela Retangula
figure;
subplot(2,1,1);
plot(f/pi,gain); grid on;
title ('Resposta em Magnitude para janela Retangular');
xlabel ('Frequencia Normalizada');
ylabel (' Ganho em dB');
subplot(2,1,2);
plot (f/pi, an); grid on;
title ('Resposta em Fase da janela Retangular');
xlabel('frequencia Normalizada');
ylabel('Angulo');



Filtros IIR Clássicos

 

Os filtros IIR clássicos são: Butterworth, elíptico, Chebyshev Tipos I e II.

5) Projetar um filtro IIR passa-banda utilizando todos os quatro tipos de filtros. Plotar as curvas de resposta em freqüência e fase para todos estes tipos:
·         Butterworth
·         Chebyshev Tipo I
·         Chebyshov Tipo II
·         Elíptico

 

Especificações:

 

Taxa de amostragem de 7 kHz, freqüências da banda passante em 1,4 kHz e 2,1 kHz, freqüências da band de corte em 1,05 kHz e 2,45 kHz, ondulação da banda passante de 0,4 dB, e uma atenuação de 50dB na banda de corte.

 

No Matlab:


%Filtro Butterworth%

Wc = 7000;
Wp = [1400 2100] / Wc;
Ws = [1050 2450] / Wc;
Rp=0.4;
Rs = 50;
[n,Wn]=cheb1ord(Wp,Ws,Rp,Rs);
[b,a]=cheby1(n,Rp,Wn,’ bandpass’);
freqz(b,a);


No Matlab:

%Filtro Chebyshev Tipo I%

Wc = 7000;
Wp = [1400 2100] / Wc;
Ws = [1050 2450] / Wc;
Rp=0.4;
Rs = 50;
[n1,Wn1]=cheb2ord(Wp,Ws,Rp,Rs);
[b1,a1]=cheby2(n1,Rs,Wn1,’bandpass’);
freqz(b1,a1);


No Matlab:

%Filtro Chebyshev Tipo II%

Wc = 7000;
Wp = [1400 2100] / Wc;
Ws = [1050 2450] / Wc;
Rp=0.4;
Rs = 50;
[n2,Wn2]=buttord(Wp,Ws,Rp,Rs);
[b2,a2]=butter(n2,Wn2,’bandpass’);
freqz(b2,a2);
zplane(b2,a2);



No Matlab:

%Filtro Elíptico%

Wc = 7000;
Wp = [1400 2100] / Wc;
Ws = [1050 2450] / Wc;
Rp=0.4;
Rs = 50;
[n3,Wn3]=ellipord(Wp,Ws,Rp,Rs);
[b3,a3]=ellip(n,Rp,Rs,Wn3,’bandpass’);
freqz(b3,a3);




6) Projetar um filtro IIR corta-banda utilizando todos os quatro tipos de filtros. Lote de frequência e resposta de fase e também trama pólos e zeros para todos estes tipos:
·         Butterworth
·         Tipo Chebyshev I
·         Chebyshov Tipo II
·         Elíptico

Especificação:
Taxa de amostragem de 12 kHz, as freqüências de banda passante em 2,1 kHz e 4,5 kHz, frequências da banda de corte em 2,7 kHz e 3,9 kHz, ondulação da banda de passagem de 0,6 dB, e uma atenuação mínima da banda de corte de 45 dB.

No Matlab:

%Filtro Butterworth%

Wc=12000;
Wp=[2100 4500]/Wc;
Ws=[2700 3900]/Wc;
Rp=0.6;
Rs=45;
[n,Wn]=buttord(Wp,Ws,Rp,Rs);
[b,a]=butter(n,Wn,'stop');
freqz(b,a);


No Matlab:

%Filtro Chebyshev Tipo I%

Wc=12000;
Wp=[2100 4500]/Wc;
Ws=[2700 3900]/Wc;
Rp=0.6;
Rs=45;
[n1,Wn1]=cheb1ord(Wp,Ws,Rp,Rs);
[b1,a1]=cheby1(n,Rp,Wn1,'stop');
freqz(b1,a1);


No Matlab:

%Filtro Chebyshev Tipo II%

Wc=12000;
Wp=[2100 4500]/Wc;
Ws=[2700 3900]/Wc;
Rp=0.6;
Rs=45;
[n2,Wn2]=cheb2ord(Wp,Ws,Rp,Rs);
[b2,a2]=cheby2(n2,Rs,Wn2,'stop');
freqz(b2,a2);



No Matlab:

%Filtro Elíptico%

Wc=12000;
Wp=[2100 4500]/Wc;
Ws=[2700 3900]/Wc;
Rp=0.6;
Rs=45;
[n3,wn3]=ellipord(Wp,Ws,Rp,Rs);
[b3,a3]=ellip(n,Rp,Rs,Wn3,'stop');
freqz(b3,a3);

3 comentários: