O documento descreve projetos de filtros digitais não-recursivos realizados no MATLAB, incluindo:
1) Projeto de filtros passa-baixa e passa-altas com frequência de corte de 9kHz usando janela retangular.
2) Análise da resposta em frequência dos filtros projetados.
3) Simulação da filtragem de um sinal multisenoidal para verificar o funcionamento dos filtros.
Projeto de filtros digitais e simulações no MATLAB
1. PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
ENGENHARIA ELETRÔNICA E DE TELECOMUNICAÇÕES
Telecomunicação XIV: Processamento de sinais
PROJETO DE FILTROS DIGITAIS
E
SIMULAÇÕES NO MATLAB
Ciro Marcus
1
2. Hermano Felipe
Nilcilaine de Macedo
Rodrigo Carmo
Belo Horizonte
2010
Ciro Marcus
Hermano Felipe
Nilcilaine de Macedo
Rodrigo Carmo
Trabalho Final
Simulações Utilizando o MatLab - T4
2
3. Trabalho apresentado ao Curso de
Engenharia Eletrônica e de
Telecomunicações da Pontifícia
Universidade Católica de Minas
Gerais como requisito parcial de
avaliação da disciplina
Telecomunicação XIV Processamento
de sinais.
Orientadora: Maria Luiza
3
5. 1. OBJETIVO
Projetos de filtros digitais não-recursivos, análise da resposta em freqüência e operação dos
filtros através do programa MatLab.`
Projeto do Filtro Digital Não-Recursivo
Projeto, propriamente dito, de 2 filtros, um passa-baixas e outro passa-altas de
freqüência de corte 9KHz, 91 elementos, ganho unitário na faixa de passagem, com
janela retangular. Escolha a taxa de amostragem; justifique sua escolha.
Análise da Resposta em Frequência ( Diagramas de Módulo e Fase)
Traçar os gráficos da resposta em freqüência, módulo e fase, dos 2 filtros projetados
indicando a freqüência de corte e ganho da faixa de passagem.
Análise de Operação:
Faça a excitação dos filtros através de um sinal multisenoidal composto por senóides
de frequência pertencente e maior e/ou menor que a faixa de passagem dos filtros
especificados. O sinal aplicado aos dois filtros deve ser o mesmo. Mostre graficamente
os efeitos da filtragem analisando os espectros de frequência dos sinais de entrada e
saída. Interprete o resultado.
5
6. 2. DESENVOLVIMENTO
Freqüência de amostragem:
De acordo com o teorema de Nyquist, a freqüência de amostragem tem que ser igual ou
maior a duas vezes a maior freqüência de corte para que o sinal possa ser reconstituído com o
mínimo de perda.
Utilizando o MATLAB para projetar o filtro Passa-alta.
%*************************************************************************
% Engenharia Eletrônica e de Telecomunicação
%
% Trabalho Final - Simulações Utilizando o MatLab - T1
%
% Disciplina: Processamento de Sinais
% Profa. Maria Luisa Grossi Vieira Santos
%
% Nomes: Ciro Marcus
% Hermano Felipe
% Nilcilaine Macedo
% Rodrigo Carmo
%
% Dados: Filtro Passa-Alta
% Frequencia de corte = 9kHz
% 91 elementos
% Ganho unitário na faixa de passagem
% Janela retangular
%*************************************************************************
close all;
clear all;
clc;
%Frequencia de corte filtro passa alta
%Wn = 9000/(45000/2)= 0,4
Wn = [0.4]; % Vetor com Freq. corte inferior/superior
N = 91; % Elementos do filtro
Ws = 45000; % Frequencia de amostragem
% De acordo com o teorema de Nyquist, a frequencia de
% amostragem tem que ser igual ou maior a duas vezes a
% maior frequencia de corte para que o sinal possa ser
% reconstituído com o mínimo de perda.
% Resposta janela retangular
Janela_retangular = fir1((N-1),Wn,'high',rectwin(N));
%Calculos para Resposta em Freqüência
%RETANGULAR
[Hr,wr] = freqz(Janela_retangular,1);
%Gráficos modulo/fase para janela retangular
figure(2);
subplot(2,1,1);
%Gráfico de modulo Db x Hz
6
7. plot(wr*Ws/(2*pi),20*log10(abs(Hr)));grid minor;
title('Filtro Janela Retangular - Resposta em Frequência');
xlabel('Hertz');
ylabel('(dB)');
%Gráfico de fase graus x Hz
subplot(2,1,2);
plot(wr*Ws/(2*pi),angle(Hr)*180/pi);grid minor;
xlabel('Hertz');
ylabel('Fase (graus)');
%Análise de Operação:
%Sinal MultiSenoidal
% Conversão do tempo discreto para intervalo de amostras (sinais discretos)
%Frequências para as senóides
freq1=1000;
freq2=3000;
freq3=6000;
freq4=9000; %frequencia de corte do filtro
freq5=12000;
freq6=15000;
freq7=18000;
%Base de tempo para os sinais senoidais
t = (1:800)/Ws;
%Sinais Senoidais Individuais
sin1 = sin(2*pi*freq1*t);
sin2 = sin(2*pi*freq2*t);
sin3 = sin(2*pi*freq3*t);
sin4 = sin(2*pi*freq4*t);
sin5 = sin(2*pi*freq5*t);
sin6 = sin(2*pi*freq6*t);
sin7 = sin(2*pi*freq7*t);
figure(1)
plot(t,sin1,'c',t,sin2,'m',t,sin3,'y',t,sin4,'k',t,sin5,'r',t,sin6,'g',t,si
n7,'b');
title('Sinais gerados por várias senóides')
grid on;
%Geração dos Sinal Multisenoidal através da soma das várias senóides
MultiSenoidal=sin1+sin2+sin3+sin4+sin5+sin6+sin7;
% Filtragem dos sinais
% MultiSenoidalal Filtrado: janela retangular
MFJR = filter( Janela_retangular,1,MultiSenoidal );
% Resposta Temporal
t=((1:800)/Ws)*1000; % Delta T em milisegundos
figure(3);
subplot(2,1,1);
plot(t,MultiSenoidal);
grid on;
title('Sinal MultiSenoidal - Resposta Temporal');
subplot(2,1,2);
7
8. plot(t,MFJR); grid on;
title('Janela Retangular do Sinal filtrado');
%Resposta em Freqüência
% Modulo da transformada de Fourier para sinais
%Modulo da transformada de Fourier
%Para o sinal MultiSenoidal
MTFSM = abs(fft(MultiSenoidal)); %Original
MTFSMFR = abs(fft(MFJR)); %Janela Retangular
%Intervalo de Freqüências para metade dos 800 pontos
f = Ws*(0:399)/800;
figure(4);
subplot(2,1,1);
plot(f,MTFSM(1:400)); grid minor;
title('Sinal Multisenoidal - Resposta em Freqüência');
subplot(2,1,2);
plot(f,MTFSMFR(1:400)); grid minor;
title('Janela Retangular do Sinal filtrado');
8
10. GRÁFICO 2
Senoides utilizadas para geração do sinal multisenoidal à ser aplicado nos filtros.
Fig.2
Resposta temporal de um sinal multisenoidal.
Fig.3
10
11. GRÁFICO 3
Gráfico de filtragem do sinal multisenoidal aplicado no filtro Passa-Alta:
Fig.4
De acordo com o primeiro gráfico, tivemos aplicado na entrada do filtro 7 sinais com
freqüências distintas sendo elas 1kHz, 3kHz, 6kHz, 9kHz, 12kHz, 15kHz e 18kHz.
No segundo gráfico podemos observar o resultado após a atuação do filtro passa-alta,
apenas as freqüências maiores que os 9kHz ainda estão presentes no sinal.
11
12. Utilizando o MATLAB para projetar o filtro Passa-baixa.
%*************************************************************************
% Engenharia Eletrônica e de Telecomunicação
%
% Trabalho Final - Simulações Utilizando o MatLab - T1
%
% Disciplina: Processamento de Sinais
% Profa. Maria Luisa Grossi Vieira Santos
%
% Nomes: Ciro Marcus
% Hermano Felipe
% Nilcilaine Macedo
% Rodrigo Carmo
%
% Dados: Filtro Passa-Baixa
% Frequencia de corte = 9kHz
% 91 elementos
% Ganho unitário na faixa de passagem
% Janela retangular
%*************************************************************************
close all;
clear all;
clc;
%Frequencia de corte filtro passa baixa
%Wn = 9000/(45000/2)= 0,4
Wn = [0.4]; % Vetor com Freq. corte inferior/superior
N = 91; % Elementos do filtro
Ws = 45000; % Frequencia de amostragem
% De acordo com o teorema de Nyquist, a frequencia de
% amostragem tem que ser igual ou maior a duas vezes a
% maior frequencia de corte para que o sinal possa ser
% reconstituído com o mínimo de perda.
% Resposta janela retangular
Janela_retangular = fir1((N-1),Wn,'low',rectwin(N));
%Calculos para Resposta em Freqüência
%RETANGULAR
[Hr,wr] = freqz(Janela_retangular,1);
%Gráficos modulo/fase para janela retangular
figure(2);
subplot(2,1,1);
%Gráfico de modulo Db x Hz
plot(wr*Ws/(2*pi),20*log10(abs(Hr)));
grid minor;
title('Filtro Janela Retangular - Resposta em Frequência');
xlabel('Hertz');
ylabel('(dB)');
%Gráfico de fase graus x Hz
subplot(2,1,2);
plot(wr*Ws/(2*pi),angle(Hr)*180/pi);grid minor;
xlabel('Hertz');
ylabel('Fase (graus)');
12
13. %Análise de Operação:
%Sinal MultiSenoidal
% Conversão do tempo discreto para intervalo de amostras (sinais discretos)
%Frequências para as senóides
freq1=1000;
freq2=3000;
freq3=6000;
freq4=9000; %frequencia de corte do filtro
freq5=12000;
freq6=15000;
freq7=18000;
%Base de tempo para os sinais senoidais
t = (1:800)/Ws;
%Sinais Senoidais Individuais
sin1 = sin(2*pi*freq1*t);
sin2 = sin(2*pi*freq2*t);
sin3 = sin(2*pi*freq3*t);
sin4 = sin(2*pi*freq4*t);
sin5 = sin(2*pi*freq5*t);
sin6 = sin(2*pi*freq6*t);
sin7 = sin(2*pi*freq7*t);
figure(1)
plot(t,sin1,'c',t,sin2,'m',t,sin3,'y',t,sin4,'k',t,sin5,'r',t,sin6,'g',t,si
n7,'b');
title('Sinais gerados por várias senóides')
grid on;
%Geração dos Sinal Multisenoidal através da soma das várias senóides
MultiSenoidal=sin1+sin2+sin3+sin4+sin5+sin6+sin7;
% Filtragem dos sinais
% MultiSenoidalal Filtrado: janela retangular
MFJR = filter( Janela_retangular,1,MultiSenoidal );
% Resposta Temporal
t=((1:800)/Ws)*1000; % Delta T em milisegundos
figure(3);
subplot(2,1,1);
plot(t,MultiSenoidal);
grid on;
title('Sinal MultiSenoidal - Resposta Temporal');
subplot(2,1,2);
plot(t,MFJR); grid on;
title('Janela Retangular do Sinal filtrado');
%Resposta em Freqüência
% Modulo da transformada de Fourier para sinais
%Modulo da transformada de Fourier
%Para o sinal MultiSenoidal
MTFSM = abs(fft(MultiSenoidal)); %Original
MTFSMFR = abs(fft(MFJR)); %Janela Retangular
13
14. %Intervalo de Freqüências para metade dos 800 pontos
f = Ws*(0:399)/800;
figure(4);
subplot(2,1,1);
plot(f,MTFSM(1:400)); grid minor;
title('Sinal Multisenoidal - Resposta em Freqüência');
subplot(2,1,2);
plot(f,MTFSMFR(1:400)); grid minor;
title('Janela Retangular do Sinal filtrado');
14
15. GRÁFICO 1
Resposta freqüência de um filtro passa baixa com janela retangular.
Fig.5
15
Frequencia de corte = 9kHz
Ganho = 0dB
16. GRÁFICO 2
Sinal multisenoidal aplicada no filtro.
Fig.6
Resposta temporal do sinal multisenoidal aplicado e resposta temporal de um filtro passa baixa.
Fig.7
16
17. GRÁFICO 3
Gráfico de filtragem do sinal multisenoidal aplicado no filtro Passa-Alta:
Fig.8
De acordo com o primeiro gráfico, tivemos aplicado na entrada do filtro 7 sinais com
freqüências distintas sendo elas 1kHz, 3kHz, 6kHz, 9kHz, 12kHz, 15kHz e 18kHz.
No segundo gráfico podemos observar o resultado após a atuação do filtro passa-
baixa, apenas as freqüências menores que os 9kHz ainda estão presentes no sinal.
17
18. Analise os filtros projetados em relação à estabilidade. Interprete.
Como vantagens, os filtros FIR possuem resposta de fase linear e estabilidade,
portanto, fazendo uma análise gráfica da resposta temporal da saída do sinal multisenoidal
aplicado aos filtros, percebemos que a resposta fica restrita a apenas valores finitos, não
tendendo em nenhum momento a valores infinitos o que nos comprova a estabilidade dos
filtros projetados.
FIG.9
18
Amplitude
constante.
19. CONCLUSÃO
O projeto do filtro digital não recursivo apresentados neste trabalho, e sua
simulação, nos facilitou o entendimento de um filtro passa-baixa e passa-alta, como
podemos ver no diagrama de espectro de freqüências onde simulamos freqüências
abaixo da freqüência de corte, e freqüências acima, para tanto, no filtro passa
baixa, o sinal multisenoidal aplicado, apenas as freqüências acima da freqüência de
corte não passaram, ou tiveram suas freqüências atenuadas em 20Db/Dec,
podendo ser atenuadas com valores até maiores como por exemplo 40Db/Dec,
dependendo dos pólos inseridos no filtro. A mesma idéia aconteceu para o filtro
passa-alta.
O uso de filtro digitais ajuda no ganho da qualidade da informação, já que o
mesmo poderá eliminar ruídos indesejados e também faixas do sinal original.
O Matlab foi um ferramenta e software utilizada no desenvolvimento de
projetos de filtro digitais com uma programação intermediária, e conseguimos obter
resultados satisfatórios afim de comprovar na teoria o funcionamento dos filtros
digitais.
19
21. 1ª Questão: Determine se cada um dos sinais discretos, a seguir, é ou não periódico. Calcule
o período fundamental, se aplicável, e plote dois períodos de cada sinal, utilizando a função
"stem" do MatLab.
Para sen ou cos
Para ou
a) ( )
+=
48
2
1
ππ
nsennx
Para K = 1 o período fundamental será de N = 8
b) ( )
+=
65
cos2
ππ
nnx
Para K = 1 o período fundamental será de N = 10
c) ( ) )n(xnx)n(x 21 +=
Devido a soma dos sinais e o período fundamental de será um valor de
amostra comum entre ambos, ou seja N = 40 amostras.
21
23. 2ª Questão: Considere o sinal descrito por ))13()1(()( −−−= nununnz .
a) Plote este sinal versus o tempo;
b) Decomponha este sinal em seus componentes par e ímpar e plote cada uma das partes em
função do tempo;
c) Reconstrua o sinal original a partir de seus componentes par e ímpar, plotando o resultado.
MatLab:
clc;
clear all;
close all;
% 2)QUESTAO
%=========================================
%a)
%criando a função degrau
u = inline('t >= 0');
%cria um vetor com 21 pontos entre 0 e 20
n = linspace(0, 20, 21);
%
%criando a função z(n)
z=n.*(u(n-1)-u(n-13));
figure
stem(n,z)
title('Letra a')
grid on
%=========================================
%b)
%sinal par - o vetor z foi invertido, e somado ao sinal z já existente e
%tudo foi dividido por 2
z_par = [fliplr(z) z(2:length(z))]./2;
n_aux = [(-1).*fliplr(n) n(2:length(n))]
figure
stem(n_aux,z_par)
title('Letra b - sinal par');
grid on
%
%Sinal Ímparr=> juntamos o sinal z, com o resultado da funcao fliplr(z)
%com amplitude invertida e dividimos tudo por 2
z_impar = [-1.*fliplr(z) z(2:length(z))]./2;
figure
stem(n_aux,z_impar)
title('Letra b - sinal impar');
grid on
%=========================================
%c)
%Recompondo o sinal=>somamos o sinal par com o sinal ímpar
z_recomp = z_impar + z_par;
figure
stem(n_aux, z_recomp)
title('Letra c - sinal recomposto');
grid on
23
26. 3ª Questão: Utilizando a função "conv" do MatLab, obtenha a saída do sistema que tem como
resposta ao impulso ( ) { })11()2(9,0)( −−−= nununh
n
, quando em sua entrada for aplicado
o sinal { })15()(2)( −−= nununx . Plote em um mesmo gráfico (utilizando as funções
"subplot" e "stem") x(n) e h(n), de forma que os sinais possam ser completamente
visualizados. Plotar a saída y(n).
MatLab:
clc;
clear all;
close all;
% 3)QUESTAO
%=========================================
%criando a função degrau
u = inline('t >= 0');
n = linspace(-40, 40, 81);
%=========================================
%criando a funcao h(n)
h=((0.9).^n).*(u(n-2)-u(n-11));
figure
subplot(2,1,1)
stem(n,h)
title('RESPOSTA AO IMPULSO h(n)');
axis ([-5 15 -0.5 1])
grid on
%=========================================
%criando a funcao x(n)
x= 2*(u(n)-u(n-15));
subplot(2,1,2)
stem(n,x)
title('SINAL APLICADO x(n)');
axis ([-5 19 -0.5 2.5])
grid on
%=========================================
%fazendo a convolução de h(n) e x(n) e jogando o resultado em y(n)
y = conv(h,x);
% o vetor resultado da funcao conv tem o TAMANHO DO VETOR H + TAMANHO DO
% VETOR X -1
%entao o eixo n tem que ir de -(TAMANHO DO VETOR H + TAMANHO DO VETOR X)/2
%ate (TAMANHO DO VETOR H + TAMANHO DO VETOR X)/2 -1
n = linspace(-1*(length(h)+length(x))/2, ((length(h)+length(x))/2)-1,
length(h)+length(x)-1);
figure
stem(n,y)
title('SAÍDA DO SISTEMA y(n)');
axis ([-5 30 -5 12])
grid on
26
28. 4ª Questão: Utilize o comando "residuez" do MatLab para fazer a expansão em frações
parciais da função de transferência abaixo. Em seguida, obtenha a resposta ao impulso do
sistema. Analise se o sistema é causal e/ou estável, justifique suas respostas.
( )
2
1
z
5.0²
2
3
³
2
1
2
3
²³
>
++
+++
=
zzz
zzz
zH
MatLab:
clc;
clear all;
close all;
num=[1 1 3/2 1/2];
den=[1 3/2 1/2];
[R,P,K]=residuez(num, den)
z=tf('s');
tf=(z^3+z^2+(3/2)*z+(1/2))/(z^3+(3/2)*z^2+(1/2)*z);
[y,t]=impulse(tf);
impulse(tf)
figure
stem(t,y)
axis([-2 10 -2 2])
grid on
Expansão em frações parciais:
Resultado da função residuez
R =
2
-1
P =
-1.0000
-0.5000
K =
0 1
Segundo o HELP DO MATLAB
28
29. B(z) r(1) r(n)
---- = ------------ +... ------------ + k(1) + k(2)z^(-1) ...
A(z) 1-p(1)z^(-1) 1-p(n)z^(-1)
Logo:
B(z) 2 (-1) 1
---- = ------------ + ----------------- + ----------------
A(z) 1-(-1)z^(-1) 1-(-0.5) z^2
O sistema composto pela função de transferência ( )
2
1
z
5.0²
2
3
³
2
1
2
3
²³
>
++
+++
=
zzz
zzz
zH é
causal, pois é um sistema unilateral direito e não exclui o infinito e é um sistema estável, uma
vez que a circunferência unitária está contida na região de convergência.
Gráficos obtidos:
Gráfico 1 - Resposta ao impulso
Fig17
29
30. Gráfico 2 - Resposta ao impulso com função STEM
Fig.18
30
31. Referências Bibliográficas:
• DINIZ, P.S.R & outros: Processamento Digital de Sinais - Projeto e Análise de Sistemas;
Bookman; 2004.
• S. HAYKIN & B. V. VEEN: Sinais e Sistemas; Bookman; 2001.
• S. D. STEARNS & R. A. DAVID: Signal Processing Algorithms in MatLab; 1996.
• PROAKIS, J.G. & MANOLAKIS: D.G.: Digital Signal Processing - Principles, Algorithms and
Applications; McMillan Publishing Co., 1992.
31