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
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%
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:
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:
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);
Excelente Material. Obrigado!
ResponderExcluirSensacional
ResponderExcluirParabéns, um excelente material para estudo dos filtros, muito bem explicado!
ResponderExcluir