Escolar Documentos
Profissional Documentos
Cultura Documentos
Para a comparação entre as ordens mínimas dos filtros utilizou-se uma máscara de um
filtro passa-baixa com os parâmetros abaixo:
Parâmetro Valor
Banda de passagem 4000 Hz
Banda de corte 12000 Hz
Ripple na banda de passagem 5 dB
Atenuação mínima na banda de
40 dB
corte
Na forma gráfica:
|H(ω)|
1
RP = 5
dB
A = 40 dB
ω ω
ω (rad/s)
P S
2-) Forneça uma tabela comparativa indicando a ordem obtida para cada família
de filtros considerando a máscara estabelecida. Note que neste caso a máscara é a
mesma para cada tipo de filtro:
Freqüência
Filtro Ordem
de corte
Butterworth 4 3794,7 Hz
Chebyshev 1 4000,0 Hz
(Ripple na banda de 3
passagem)
Chebyshev 2
3 10674 Hz
(Ripple na banda de corte)
Elíptico 3 4000,0 Hz
Fs = 40000;
%Determinacao do filtro em s
[B_bu, A_bu] = butter(N_bu, Wn_bu, 's');
[B_c1, A_c1] = cheby1(N_c1, Rp, Wn_c1, 's');
[B_c2, A_c2] = cheby2(N_c2, Rs, Wn_c2, 's');
[B_el, A_el] = ellip(N_el, Rp, Rs, Wn_el, 's');
%Determinacao do filtro em z
[Bd_bu,Ad_bu] = bilinear(B_bu, A_bu, Fs);
[Bd_c1,Ad_c1] = bilinear(B_c1, A_c1, Fs);
[Bd_c2,Ad_c2] = bilinear(B_c2, A_c2, Fs);
[Bd_el,Ad_el] = bilinear(B_el, A_el, Fs);
Este código será utilizado no início dos demais códigos que faremos ao longo do
trabalho e não repetiremos.
Localização dos pólos e zeros no plano s:
%Resposta ao impulso
[H_bu,T_bu] = impz(Ad_bu,Bd_bu);
[H_c1,T_c1] = impz(Ad_c1,Bd_c1);
[H_c2,T_c2] = impz(Ad_c2,Bd_c2);
[H_el,T_el] = impz(Ad_el,Bd_el);
%Plotagem
figure(1);SUBPLOT(4,1,1);plot(T_bu, H_bu);grid
on;ylabel('Amplitude');xlabel('Amostras');title('Resposta impulsiva - Filtro
Butterworth');
figure(1);SUBPLOT(4,1,2);plot(T_c1, H_c1);grid
on;ylabel('Amplitude');xlabel('Amostras');title('Resposta impulsiva - Filtro Chebyshev
I');
figure(1);SUBPLOT(4,1,3);plot(T_c2, H_c2);grid
on;ylabel('Amplitude');xlabel('Amostras');title('Resposta impulsiva - Filtro Chebyshev
II');
figure(1);SUBPLOT(4,1,4);plot(T_el, H_el);grid
on;ylabel('Amplitude');xlabel('Amostras');title('Resposta impulsiva - Filtro Eliptico');
%Resposta ao degrau
[Y_bu,X_bu] = dstep(Ad_bu,Bd_bu);
[Y_c1,X_c1] = dstep(Ad_c1,Bd_c1);
[Y_c2,X_c2] = dstep(Ad_c2,Bd_c2);
[Y_el,X_el] = dstep(Ad_el,Bd_el);
%Plotagem
figure(1);SUBPLOT(2,2,1);plot(Y_bu);grid
on;ylabel('Amplitude');xlabel('Amostras');title('Resposta ao degrau - Filtro
Butterworth');
figure(1);SUBPLOT(2,2,2);plot(Y_c1);grid
on;ylabel('Amplitude');xlabel('Amostras');title('Resposta ao degrau - Filtro Chebyshev
I');
figure(1);SUBPLOT(2,2,3);plot(Y_c2);grid
on;ylabel('Amplitude');xlabel('Amostras');title('Resposta ao degrau - Filtro Chebyshev
II');
figure(1);SUBPLOT(2,2,4);plot(Y_el);grid
on;ylabel('Amplitude');xlabel('Amostras');title('Resposta ao degrau - Filtro Eliptico');
%Resposta ao degrau
[Y_bu,X_bu] = step(sys_bu);
[Y_c1,X_c1] = step(sys_c1);
[Y_c2,X_c2] = step(sys_c2);
[Y_el,X_el] = step(sys_el);
%Resposta ao impulso
[H_bu,T_bu] = impulse(sys_bu);
[H_c1,T_c1] = impulse(sys_c1);
[H_c2,T_c2] = impulse(sys_c2);
[H_el,T_el] = impulse(sys_el);
T_bu = Fs * T_bu;
T_c1 = Fs * T_c1;
T_c2 = Fs * T_c2;
T_el = Fs * T_el;
%Plotagem do degrau
figure(1);SUBPLOT(2,2,1);plot(Y_bu);grid
on;ylabel('Amplitude');xlabel('t');title('Resposta ao degrau - Filtro Butterworth');
figure(1);SUBPLOT(2,2,2);plot(Y_c1);grid
on;ylabel('Amplitude');xlabel('t');title('Resposta ao degrau - Filtro Chebyshev I');
figure(1);SUBPLOT(2,2,3);plot(Y_c2);grid
on;ylabel('Amplitude');xlabel('t');title('Resposta ao degrau - Filtro Chebyshev II');
figure(1);SUBPLOT(2,2,4);plot(Y_el);grid
on;ylabel('Amplitude');xlabel('t');title('Resposta ao degrau - Filtro Eliptico');
%Plotagem do impulso
figure(2);SUBPLOT(2,2,1);plot(T_bu, H_bu);grid
on;ylabel('Amplitude');xlabel('t');title('Resposta impulsiva - Filtro Butterworth');
figure(2);SUBPLOT(2,2,2);plot(T_c1, H_c1);grid
on;ylabel('Amplitude');xlabel('t');title('Resposta impulsiva - Filtro Chebyshev I');
figure(2);SUBPLOT(2,2,3);plot(T_c2, H_c2);grid
on;ylabel('Amplitude');xlabel('t');title('Resposta impulsiva - Filtro Chebyshev II');
figure(2);SUBPLOT(2,2,4);plot(T_el, H_el);grid
on;ylabel('Amplitude');xlabel('t');title('Resposta impulsiva - Filtro Eliptico');
7-) Utilizando o comando hold, plot em um único gráfico todas as cinco respostas
de magnitude das famílias estudadas, para que uma comparação possa ser feita.
Crie uma segunda figura para que a resposta em fase possa ser comparada.
%Resposta em frequencia
[Y_bu,X_bu] = freqz(Ad_bu,Bd_bu);
[Y_c1,X_c1] = freqz(Ad_c1,Bd_c1);
[Y_c2,X_c2] = freqz(Ad_c2,Bd_c2);
[Y_el,X_el] = freqz(Ad_el,Bd_el);
%Eixo x em frequencia
x_axis = linspace(0,size(M_bu,1),size(M_bu,1));
x_axis = (Fs/2)*x_axis/size(M_bu,1);
%Separa fase
A_bu = unwrap(angle(Y_bu))*180/pi;
A_c1 = unwrap(angle(Y_c1))*180/pi;
A_c2 = unwrap(angle(Y_c2))*180/pi;
A_el = unwrap(angle(Y_el))*180/pi;
Código Matlab:
clc;
%Sinais de teste
s_teste_p = sin(2*pi*t*1000) + sin(2*pi*t*2000) + sin(2*pi*t*3000);
s_teste_a = sin(2*pi*t*13000) + sin(2*pi*t*15000) + sin(2*pi*t*19000);
%--------------------------------------------------------------------------
%Passa-alta
%--------------------------------------------------------------------------
%Definiçao da mascara
fp = 4000; %Hz
fs = 12000; %Hz
fp = (Fs/pi)*tan(pi*fp/Fs) %Pre-warping
fs = (Fs/pi)*tan(pi*fs/Fs) %Pre-warping
Wp = fp*2*pi; %rad/s
Ws = fs*2*pi; %rad/s
Aten = 100; %Atenuacao linear
Rs = 20*log10(Aten); %Atenuaçao convertida em dB
Rp = 5; %Aumento do ripple para evidenciar seus efeitos
%Determinacao do filtro em z
[Ad_bu,Bd_bu] = bilinear(B_bu, A_bu, Fs);
[Ad_c1,Bd_c1] = bilinear(B_c1, A_c1, Fs);
[Ad_c2,Bd_c2] = bilinear(B_c2, A_c2, Fs);
[Ad_el,Bd_el] = bilinear(B_el, A_el, Fs);
%Filtrando sinal p
s_teste_p_filt_bu = filter(Ad_bu,Bd_bu, s_teste_p);
s_teste_p_filt_c1 = filter(Ad_c1,Bd_c1, s_teste_p);
s_teste_p_filt_c2 = filter(Ad_c2,Bd_c2, s_teste_p);
s_teste_p_filt_el = filter(Ad_el,Bd_el, s_teste_p);
%Filtrando sinal p
s_teste_a_filt_bu = filter(Ad_bu,Bd_bu, s_teste_a);
s_teste_a_filt_c1 = filter(Ad_c1,Bd_c1, s_teste_a);
s_teste_a_filt_c2 = filter(Ad_c2,Bd_c2, s_teste_a);
s_teste_a_filt_el = filter(Ad_el,Bd_el, s_teste_a);
%Eixo x
x_axis = linspace(-size(s_teste_a,2)/2,size(s_teste_a,2)/2,size(s_teste_a,2));
x_axis = Fs*x_axis/size(s_teste_a,2);
%Espectros
figure(1);SUBPLOT(5,2,1);stem(x_axis,abs(fftshift(fft(s_teste_p))));title('Sinal P
original');axis([-Inf,Inf,0,2000]);grid on;ylabel('Amplitude');xlabel('Frequencia
(Hz)');
figure(1);SUBPLOT(5,2,3);stem(x_axis,abs(fftshift(fft(s_teste_p_filt_bu))));title('Sinal
P filtrado por Passa-baixa Butterworth');axis([-Inf,Inf,0,2000]);grid
on;ylabel('Amplitude');xlabel('Frequencia (Hz)');
figure(1);SUBPLOT(5,2,5);stem(x_axis,abs(fftshift(fft(s_teste_p_filt_c1))));title('Sinal
P filtrado por Passa-baixa Chebyshev I');axis([-Inf,Inf,0,2000]);grid
on;ylabel('Amplitude');xlabel('Frequencia (Hz)');
figure(1);SUBPLOT(5,2,7);stem(x_axis,abs(fftshift(fft(s_teste_p_filt_c2))));title('Sinal
P filtrado por Passa-baixa Chebyshev II');axis([-Inf,Inf,0,2000]);grid
on;ylabel('Amplitude');xlabel('Frequencia (Hz)');
figure(1);SUBPLOT(5,2,9);stem(x_axis,abs(fftshift(fft(s_teste_p_filt_el))));title('Sinal
P filtrado por Passa-baixa Eliptico');axis([-Inf,Inf,0,2000]);grid
on;ylabel('Amplitude');xlabel('Frequencia (Hz)');
%No tempo
figure(2);SUBPLOT(5,2,1);plot(t,s_teste_p);title('Sinal P original');axis([0,0.005,-
3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s) -- Limitado');
figure(2);SUBPLOT(5,2,3);plot(t,s_teste_p_filt_bu);title('Sinal P filtrado por Passa-
baixa Butterworth');axis([0,0.005,-3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s)
-- Limitado');
figure(2);SUBPLOT(5,2,5);plot(t,s_teste_p_filt_c1);title('Sinal P filtrado por Passa-
baixa Chebyshev I');axis([0,0.005,-3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s)
-- Limitado');
figure(2);SUBPLOT(5,2,7);plot(t,s_teste_p_filt_c2);title('Sinal P filtrado por Passa-
baixa Chebyshev II');axis([0,0.005,-3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s)
-- Limitado');
figure(2);SUBPLOT(5,2,9);plot(t,s_teste_p_filt_el);title('Sinal P filtrado por Passa-
baixa Eliptico');axis([0,0.005,-3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s) --
Limitado');
%--------------------------------------------------------------------------
%Passa-alta
%--------------------------------------------------------------------------
%Definiçao da mascara
fp = 12000; %Hz
fs = 4000; %Hz
fp = (Fs/pi)*tan(pi*fp/Fs) %Pre-warping
fs = (Fs/pi)*tan(pi*fs/Fs) %Pre-warping
Wp = fp*2*pi; %rad/s
Ws = fs*2*pi; %rad/s
Aten = 100; %Atenuacao linear
Rs = 20*log10(Aten); %Atenuaçao convertida em dB
Rp = 5; %Aumento do ripple para evidenciar seus efeitos
%Determinacao da ordem dos filtros
[N_bu, Wn_bu] = buttord(Wp, Ws, Rp, Rs, 's');
[N_c1, Wn_c1] = cheb1ord(Wp, Ws, Rp, Rs, 's');
[N_c2, Wn_c2] = cheb2ord(Wp, Ws, Rp, Rs, 's');
[N_el, Wn_el] = ellipord(Wp, Ws, Rp, Rs, 's');
%Determinacao do filtro em s
[B_bu, A_bu] = butter(N_bu, Wn_bu, 'high', 's');
[B_c1, A_c1] = cheby1(N_c1, Rp, Wn_c1, 'high', 's');
[B_c2, A_c2] = cheby2(N_c2, Rs, Wn_c2, 'high', 's');
[B_el, A_el] = ellip(N_el, Rp, Rs, Wn_el, 'high', 's');
%Determinacao do filtro em z
[Ad_bu,Bd_bu] = bilinear(B_bu, A_bu, Fs);
[Ad_c1,Bd_c1] = bilinear(B_c1, A_c1, Fs);
[Ad_c2,Bd_c2] = bilinear(B_c2, A_c2, Fs);
[Ad_el,Bd_el] = bilinear(B_el, A_el, Fs);
%Filtrando sinal p
s_teste_p_filt_bu = filter(Ad_bu,Bd_bu, s_teste_p);
s_teste_p_filt_c1 = filter(Ad_c1,Bd_c1, s_teste_p);
s_teste_p_filt_c2 = filter(Ad_c2,Bd_c2, s_teste_p);
s_teste_p_filt_el = filter(Ad_el,Bd_el, s_teste_p);
%Filtrando sinal p
s_teste_a_filt_bu = filter(Ad_bu,Bd_bu, s_teste_a);
s_teste_a_filt_c1 = filter(Ad_c1,Bd_c1, s_teste_a);
s_teste_a_filt_c2 = filter(Ad_c2,Bd_c2, s_teste_a);
s_teste_a_filt_el = filter(Ad_el,Bd_el, s_teste_a);
%Eixo x
x_axis = linspace(-size(s_teste_a,2)/2,size(s_teste_a,2)/2,size(s_teste_a,2));
x_axis = Fs*x_axis/size(s_teste_a,2);
%Espectros
figure(1);SUBPLOT(5,2,2);stem(x_axis,abs(fftshift(fft(s_teste_a))));title('Sinal A
original');axis([-Inf,Inf,0,2000]);grid on;ylabel('Amplitude');xlabel('Frequencia
(Hz)');
figure(1);SUBPLOT(5,2,4);stem(x_axis,abs(fftshift(fft(s_teste_a_filt_bu))));title('Sinal
A filtrado por Passa-alta Butterworth');axis([-Inf,Inf,0,2000]);grid
on;ylabel('Amplitude');xlabel('Frequencia (Hz)');
figure(1);SUBPLOT(5,2,6);stem(x_axis,abs(fftshift(fft(s_teste_a_filt_c1))));title('Sinal
A filtrado por Passa-alta Chebyshev I');axis([-Inf,Inf,0,2000]);grid
on;ylabel('Amplitude');xlabel('Frequencia (Hz)');
figure(1);SUBPLOT(5,2,8);stem(x_axis,abs(fftshift(fft(s_teste_a_filt_c2))));title('Sinal
A filtrado por Passa-alta Chebyshev II');axis([-Inf,Inf,0,2000]);grid
on;ylabel('Amplitude');xlabel('Frequencia (Hz)');
figure(1);SUBPLOT(5,2,10);stem(x_axis,abs(fftshift(fft(s_teste_a_filt_el))));title('Sina
l A filtrado por Passa-alta Eliptico');axis([-Inf,Inf,0,2000]);grid
on;ylabel('Amplitude');xlabel('Frequencia (Hz)');
%No tempo
figure(2);SUBPLOT(5,2,2);plot(t,s_teste_a);title('Sinal A original');axis([0,0.001,-
3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s) -- Limitado');
figure(2);SUBPLOT(5,2,4);plot(t,s_teste_a_filt_bu);title('Sinal A filtrado por Passa-
alta Butterworth');axis([0,0.001,-3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s) --
Limitado');
figure(2);SUBPLOT(5,2,6);plot(t,s_teste_a_filt_c1);title('Sinal A filtrado por Passa-
alta Chebyshev I');axis([0,0.001,-3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s) --
Limitado');
figure(2);SUBPLOT(5,2,8);plot(t,s_teste_a_filt_c2);title('Sinal A filtrado por Passa-
alta Chebyshev II');axis([0,0.001,-3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s)
-- Limitado');
figure(2);SUBPLOT(5,2,10);plot(t,s_teste_a_filt_el);title('Sinal A filtrado por Passa-
alta Eliptico');axis([0,0.001,-3,3]);grid on;ylabel('Amplitude');xlabel('Tempo (s) --
Limitado');
Comparação entre dois sinais de teste (A e P) e as resposta de cada filtro para cada sinal
em relação ao espectro:
Comparação entre dois sinais de teste (A e P) e as resposta de cada filtro para cada sinal
em relação ao tempo: