Você está na página 1de 20

Tpicos em Processamento de Sinais

Departamento de Engenharia Eltrica


Faculdade de Tecnologia
Universidade de Braslia
1
MATLAB
1) Introduo
O aplicativo Matlab uma das ferramentas mais teis para as reas de processamento de
sinais, controle, e outras aplicaes. O Mat do nome Matlab est relacionado com Matriz, ou
seja, um laboratrio que permite a manipulao eficiente de matrizes. Pode-se dizer tambm que o
Matlab permite tambm a manipulao eficiente de vetores, j que um vetor de tamanho N pode ser
visto como uma matriz de Nx1.
Uma das melhores formas de se familiarizar com o Matlab atravs do comando intro, que
prov uma turn pelas caractersticas bsicas do programa.
Exerccio 1
Use o comando intro e, com ateno, procure entender todos os exemplos fornecidos.
A aplicao predominante no presente curso ser o processamento digital se sinais. Para
isto, preparamos algumas tcnicas em Matlab que facilitaro o uso do aplicativo para esta tarefa.
2) Gerao de Sinais Amostrados
Como primeiro exemplo, geraremos a seguinte funo senoidal no Matlab:
f(t)=sin(2*pi*fo*t)
Onde fo=1 Hz.
A funo mostrada na seguinte figura:
0 0.2 0.4 0.6 0.8 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Tempo (seg.)
f(t)
Senoide de 1 Hz
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
2
Para permitir o processamento de sinais por computador, o sinal analgico deve ser
digitalizado por um conversor analgico para digital (A/D). Neste processo o sinal amostrado em
vrios instantes, em intervalos de tempo constante. O intervalo de tempo o perodo de amostragem
(T), e o recproco de T a freqncia de amostragem (f
s
= 1/T). A unidade de tempo do perodo de
amostragem em geral segundos, e a de Freqncia em Hz. 100 Hz significa que 100 amostras do
sinal so tomadas em 1 segundo.
Pode-se simular funes amostradas no Matlab. O exemplo abaixo mostra como se pode
simular a amostragem de uma senide no Matlab:
Exerccio 2
Siga os passos descritos para simular a amostragem de uma onda senoidal no seguinte
exemplo. Digite os comandos na Matlab, e observe os efeitos.
1) Crie o eixo do tempo:
t=0:0.05:1;
O comando acima cria uma varivel (vetor) com os elementos 0, 0.05, 0.1, ..., 1. O ponto e
vrgula evita que a varivel seja exibida na tela. Tente rodar o comando acima e observe o que
acontece. Caso voc tenha errado, e o vetor inteiro comece a aparecer na tela, voc pode parar o
processo usando CTRL-C.
O comando size(t) exibe o tamanho da matriz t, e o comando length(t) mostrar o comprimento do
vetor. Experimente estes comandos.
2) Crie a funo:
f=sin(2*pi*t);
O comando acima cria um vetor cujas componentes so a funo senoidal calculada a cada valor do
vetor t. Assim, no Matlab, voc pode calcular o seno de um vetor, ou mesmo de uma matriz.
Execute este comando.
3) Plotar a funo:
plot(t,f)
Este comando faz a plotagem do sinal, tendo f no eixo y, e o correspondente t no eixo x.
Execute este comando.
4) Coloque o Titulo e as variveis dos eixos x e y:
title(Funcao Senoidal)
xlabel(Tempo (segundos))
ylabel(Amplitude (Volts))
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
3
Experimente os comandos acima.
Tente tambm os seguintes comandos:
plot(f,t)
plot(f)
plot(t)
O que aconteceu no primeiro comando? No segundo comando, a senide foi plotada, mas o
eixo y mostrou simplesmente o nmero da amostra, mas no o tempo correspondente a cada abcissa
y. Explique o que acontece no terceiro exemplo.
Tente tambm as seguintes opes:
plot(t,f,*)
plot(t,f,b*)
plot(t,f,.)
plot(t,f,c.)
plot(t,f,-)
plot(t,f,y-)
Observe as cores e caractersticas dos grficos. Agora digite help plot, e leia
cuidadosamente as descries da funo plot.
Agora digite a seguinte funo:
grid
Note o efeito da funo, e digite help grid, para ver as caractersticas desta funo.
Agora gere uma segunda funo:
f2=sin(2*pi*2*t)
E plote as funes f e f2 no mesmo grfico:
plot(t,f,t,f2)
Verifique as cores dos grficos. Agora digite:
plot(t,f,b*,t,f2,c-.)
E verifique os efeitos.
Agora tente os seguintes comandos:
stem(t,f)
stem(t,f2)
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
4
O que estes comandos fazem? Digite help stem, e estude o funcionamento desta funo.
Tente mudar as cores dos traados desta funo. Note que a funo no to flexvel quanto a cores
do traado quanto a funo plot.
3) Gerao de sinais mais complexos
Digite os seguintes vetores:
A=[0 1 2 3 4 5 6];
B=[0 2 4 6 8 10 12];
Tente multiplicar A*B. Note que o Matlab no realizar tal operao. O fato que o Matlab
sempre interpretar o vetor como uma matriz, e o programa sempre interpreta uma multiplicao
como uma multiplicao de matrizes. Entretanto, h uma opo que permite ao usurio fazer uma
multiplicao ponto a ponto de dois vetores ou matrizes (isto o primeiro elemento do resultado o
produto dos primeiros elementos dos fatores, o segundo elemento do resultado o produto dos
segundos elementos dos fatores, e assim por diante). Tente digitar:
C=A.*B
Note que o vetor C o resultado da multiplicao ponto a ponto do dos vetores A e B.
Exerccio 3
Queremos plotar a seguinte funo no intervalo 0<x<4:
y(x)=(x-1)(x-2)
Para isto, criamos primeiro o vetor representando a varivel x, e em seguida a funo em
questo:
x=0:0.05:4;
y=(x-1).*(x-2);
plot(x,y)
Note o comando .*. Cada expresso entre parnteses um novo vetor, e os vetores so
multiplicados ponto a ponto, resultando no efeito desejado.
Agora geraremos a funo:
y(x)=x
3
-6x
2
+11x-6
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
5
Para isto, criamos primeiro o vetor representando a varivel x, e em seguida a funo em
questo:
x=0:0.05:4;
y=x.^3-6*x.^2+11*x-6;
plot(x,y)
Note que o operador .^ tambm um operador ponto a ponto, que eleve cada elemento da
matriz potncia desejada. Tente digitar x^2, e veja que este comando no funcionar. Tente
descobrir porque (lembre-se que o Matlab sempre assume operaes matriciais).
PROBLEMAS
1) Gere e plot a funo f(t)=exp(-t)sin(2*5*pi*t), no intervalo 0<x<6. Use vrias escolhas de
intervalo para o eixo x: 0.1 sec., 0.05 sec., etc., e escolha o que tem melhor aparncia.
2) Ache graficamente as razes da funo y=x
3
+2x
2
-x+1. (Dica: procure, por tentativa e erro o
intervalo, a o perodo de amostragem do eixo x, realizando sucessivas plotagens das tentativas).
3) Plote a seguinte funo: y=sin(x)*cos(2x)/(2+sin(x)). Escolha um eixo x apropriado (No se esquea
que as multiplicaes e divises devem ser operaes ponto a ponto).
4) Gere a funo f(t)=sin(2*pi*10*t), no intervalo 0<x<10. Qual a freqncia desta senide? Use
as seguintes escolhas de freqncia de amostragem: 5 Hz, 10 Hz, 20 Hz, 40 Hz, e 200 Hz. Use a
funo stem. Observe bem o efeito, pois ser analisado na prxima aula.
5) Gere a funo f(t)=exp(-t)sin(2*5*pi*t), e depois plote um histograma da mesma. Dica: use a
funo intro, e observe o uso da funo bar. Em seguida digite help bar, para analisar aquela
funo.
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
6
EXERCCIOS COM O MATLAB
Nesta seo, veremos algumas funes extras do Matlab. Primeiramente, consideremos o
seguinte trecho a seguir. Analise atentamente o programa abaixo (consulte o help para as funes
que voc no conhece):
% exemplo: geraco de uma forma de onda ruidosa
t=0:0.01:pi; %linha 1
y=2*sin(5*t); %linha 2
figure(GCF) %linha 3
plot(t,y) %linha 4
pause %linha 5
ruido=randn(1,length(t)); %linha 6
plot(t,ruido) %linha 7
pause %linha 8
y_ruido=y+ruido; %linha 9
plot(t,y_ruido); %linha 10
Execute o programa. A linha 1 cria o vetor do tempo de amostragem. A linha 2 cria uma
funo senoidal (qual a freqncia?). A linha trs faz com que a janela com o grfico seja
colocada frente de todas as outras. A linha 4 plota uma senide, como mostrado abaixo:
0 0.5 1 1.5 2 2.5 3 3.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
O comando pause, na linha 5, causa uma pausa no programa. Para continuar o programa, o
usurio deve pressionar <Enter>. [Pergunta: o que acontece se este comando for substitudo por
pause(2)? Dica: use o comando help].
A linha 6 utiliza o comando randn (utilize o help para aprender sobre este comando). Este
comando gera uma seqncia de nmeros aleatrios com distribuio normal, com uma linha e
tantas colunas quanto for o comprimento do vetor t. O comando lenght(t) fornece o nmero de
elementos de t. Observe a plotagem do sinal de rudo:
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
7
0 0.5 1 1.5 2 2.5 3 3.5
-3
-2
-1
0
1
2
3
Em seguida, a linha 9 calcula uma nova varivel y_noise, que o sinal senoidal mais o
rudo. Observe o resultado:
0 0.5 1 1.5 2 2.5 3 3.5
-5
-4
-3
-2
-1
0
1
2
3
4
Neste exemplo, voc aprendeu como gerar um sinal com rudo.
Agora, vejamos outros comandos. Para isto considere o seguinte cdigo:
% Exemplo 2
A=[1 2 3; 4 5 6]
B=[3 4 ; 3 6 ; 7 8]
C=[1 2 3 ; 4 5 6 ; 7 8 9];
D=[5 6 ; 7 8 ; 9 10];
pause
size(A)
size(B)
pause
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
8
length(A)
length(B)
Aps executar o cdigo acima, realize manualmente, e em seguida usando o Matlab, as
seguintes operaes (indique quando a operao no possvel):
A*B=
B*A=
A*C=
A^2=
A.^2=
C^2=
C.^2=
A=
C*inv(C)=
[B B B]=
[A;A;A]
Veremos agora alguns comandos estatsticos. Considere o seguinte trecho de cdigo:
% exemplo 3
A=[ 1 2 3 4 5 6 7] %linha 1
B=mean(A) %linha 2
C=std(A) %linha 3
Pause %linha 4
RUIDOSO=randn(1,5000); %linha 5
figure(gcf) %linha 6
plot(RUIDOSO) %linha 7
title('sinal ruidoso') %linha 8
pause %linha 9
MEDIA_RUIDOSO=mean(RUIDOSO) %linha 10
DP_RUIDOSO=std(RUIDOSO) %linha 11
Pause %linha 12
MAISRUIDO=5*randn(1,5000); %linha 13
MEDIA=mean(MAISRUIDO) %linha 14
DP=std(MAISRUIDO) %linha 15
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
9
Use o comando help para estudar os comandos mean, e std. Execute o programa. Tome
cuidado de s incluir o ponto-e-vrgula quando necessrio. Estes comandos calculam a mdia e o
desvio padro dos vetores em questo (relembre na literatura o que estes termos significam). Na
linha 2, o resultado, B, ser a mdia dos elementos do vetor A Na linha 3, o resultado C ser o
desvio padro dos elementos do vetor A. Calcule A e B manualmente, e cheque os resultados com
os resultados do Matlab.
Na linha 5 um sinal de rudo normal gerado, e plotado na linha 6. A mdia e o desvio
padro so calculados e mostrados nas linhas 10 e 11. Note que a funo randn gera rudo aleatrio
com mdia 0, e desvio padro 1 (na verdade, prximos de 0 e 1). Para obter um rudo com maior
intensidade (maior desvio padro), basta multiplicar o rudo pelo desvio padro desejado, como
feito nas linhas 13, 14 e 15. Analise com cuidado estas trs ltimas linhas.
EXERCCIOS
1) Usando o comando help, aprenda a lidar com os comandos max, min, mean, median, sort.
2) Usando o comando help, aprenda a usar os comandos fix, floor, ceil, round, mod,
rem, sign.
3) Gere uma senide com freqncia de 50 Hz e amplitude 3V, amostrada a uma freqncia de
amostragem de 1 kHz. Adicione a esta senide rudo gaussiano com desvio padro de 2V. Plote
o sinal resultante. Determine os valores mximo e mnimo deste sinal. No se esquea de incluir
ttulo e unidades. Procure plotar o sinal de forma que suas caractersticas fiquem claras ao leitor
(deve ficar claro que o sinal uma senide com rudo).
4) Usando o comando help square, aprenda como gerar uma onda quadrada. Gere uma onda
quadrada de 10 Hz, amostrada a uma freqncia de 1 KHz.
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
10
REVISO: NMEROS COMPLEXOS
1) Representao dos Nmeros Complexos
Nmeros complexos so uma estrutura criada como uma extenso dos nmeros reais.
primeira vista, esta estrutura parece ser artificial e intil. Entretanto, na prtica suas aplicaes so
inmeras. Este captulo apresentar uma reviso resumida do tpico, devida sua importncia nas
sries de Fourier.
Um nmero complexo um par ordenado de nmeros reais (R,I), e muito usualmente
representado na seguinte forma:
C=R+iI, ou C=R+jI
Sendo que matemticos preferem o uso do i, enquanto os engenheiros preferem o j. R
chamado parte real, e I chamado parte imaginria do nmero complexo. Note que se I zero, o
nmero se transforma em puramente complexo, e se R zero, o nmero puramente imaginrio.
Os nmeros complexos seguem certas regras algbricas, que a princpio parecem estranhas,
mas que permitem a extenso de vrias tcnicas matemticas, bem como possibilitam um grande
nmeros de aplicaes. muito comum se representar os nmeros complexos em um plano
ordenado x,y, da forma ilustrada na Figura 1.
(x,y)
X=M sin()
M cos()
M
Real
imaginario
a=tan
-1
(y/x)
Figura 1 - Representao grfica de um nmero complexo
O mdulo ou magnitude M de um nmero complexo representado geometricamente pela
reta ligando a origem coordenado do par ordenado, e definido como:
M=sqrt(x
2
+y
2
)
O ngulo ou fase , do nmero complexo o ngulo entre a reta mencionada e o eixo x, e
definido como:
=tan
-1
(I/R)
fcil mostrar, observando a geometria da Figura 1 que:
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
11
R=M cos()
I=M sin()
Muitas vezes o nmero complexo representado por seu mdulo e sua fase, da seguinte
maneira:
M
Exerccio 1:
Considere os seguintes nmeros:
A=1+j2
B=-2+j3
C=4-j1
D=-2-j2
1) Plote manualmente cada um do nmeros, e enumere em que quadrante o nmero est (1
o
., 2
o
.,
3
o
., ou 4
o
.) e depois plote os mesmo usando o Matlab (plot(A) plota o nmero complexo, caso o
mesmo realmente seja complexo).
2) Para cada nmero, calcule manualmente o mdulo M, e depois faa os clculos com o Matlab
(comando abs(A)). Confira os resultados com os clculos manuais.
3) Calcule manualmente os ngulos (atente para os quadrantes) e em seguida repita os clculos
em Matlab (comando atan(x/y)). Tente tambm a funo atan2(x/y), e observe que a mesma
leva em considerao o quadrante em que o nmero est.
4) A partir dos valores de M e calculados, determine x e y. Faa o mesmo em Matlab (Exemplo,
x=M*cos(alfa), y=M*sin(alfa)).
5) Digite A=1+j2, e em seguida, digite:
real(A)
imag(A)
O que acontece? Qual a funo dos comandos acima?1
6) Digite o seguinte cdigo:
A=[ 1+j*2 ; 2+j*3 ; 4-j*1 ; 2-j*2 ]
plot(A)
M=abs(A)
grid
alfa1=atan(real(A)./imag(A))
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
12
alfa2=atan2(real(A),imag(A))
Areal=M.*cos(alfa2)
Aimag=M.*sin(alfa2)
Tente entender todos os comandos. Note que os exerccios de 1 a 4 foram implementados
nesta linha. Note o carter matricial (ou vetorial) das variveis (preste ateno nos pontos do .*, e ./
.
6) Converta os seguintes nmeros para a forma R+jI:
2 /3
3 60
o
4 /2
2) lgebra dos Nmeros Complexos
Os nmeros complexos so sujeitos a regras de lgebra, algumas delas semelhantes
lgebra dos nmeros reais, e algumas diferentes. Quando os nmeros complexos so puramente
reais, a lgebra simplesmente se transforma na lgebra dos nmeros reais.
Suponha os nmeros complexos A e B:
A=A
r
+ j A
i
B=B
r
+ j B
i
Estes nmeros complexos so sujeitos s seguintes regras:
Soma: A+B=(A
r
+ B
r
) + j ( A
i
+ B
i
)
Valor de j: j=i=sqrt(-1)
Quadrado de i: i
2
=-1
Multiplicao: A . B=( A
r
+ j A
i
).( B
r
+ j B
i
)= A
r
B
r
+j A
i
B
r
+j B
r
A
i
+j
2
A
i
B
i
= (A
r
B
r
- A
i
B
i
)+j (A
r
B
i
+A
i
B
r
)
Raiz n-sima (frmula de de Moivre):
a+2kp
A
1/n
=
n
|A| n
Complexo conjugado de R+jI : R-jI
Multiplicao de um nmero complexo por seu conjugado:
(A+jB)(A-jB)=A
2
+B
2
(note a eliminao da parte complexa)
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
13
Eliminao de partes complexas no denominador:
A+jB = A+jB C-jD = (AC-BD) + j(AD-BC)
C+jD C+jD C-jD C
2
+D
2
Exerccio 2
Suponha:
M= 1+j2
N= 3+j4
Calcule primeiro manualmente, e depois em Matlab. D os resultados na forma R+jI :
1) M+N
2) MN
3) M/N
4) M
2
5) sqrt(M)
6) M
1/3
7) M
1/5
8) Determine todas as razes cbicas de 8 (Frmula de de Moivre ou Matlab)
9) Eleve todas as razes encontradas em na questo 8 ao cubo.
3) Frmula de Euler:
Duas frmulas fazem os nmeros complexos muito teis:
e
j
= cos + j sin
e
-j
= cos - j sin
Ou equivalentemente:
cos = e
j
+ e
-j
2
sin = e
j
e
-j
j2
Note que
cos = Re (e
j
)
sin = Im (e
j
)
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
14
Exerccio 3
1) Defina uma varivel de tempo com 0<t<5, amostrada em intervalos de 0.01 segundos, e calcule a
funo
f(t)=e
2jt
Usando seus conhecimentos, tente prever o comportamento desta funo. Note que a funo
formada por uma parte real senoidal, e uma parte imaginria cossenoidal. Plote a parte real e a
parte imaginria na Funo no Matlab:
ParteReal=real(f);
ParteImag=imag(f);
subplot(2,1,1)
plot(t,ParteReal)
subplot(2,1,2)
plot(t,ParteImag)
2) A funo tambm pode ser dividida em uma parte funo mdulo e fase. Tente prever a forma
das funes mdulo e fase da funo seus conhecimentos. Use o Matlab para plotar estas
funes:
Mdulo=abs(f);
Fase=atan2(imag(f),real(f));
subplot(2,1,1)
plot(t,Mdulo)
subplot(2,1,2)
plot(t,Fase)
3) Multiplique a funo complexa f, calculada no exerccio anterior, pelo nmero complexo 1+j1, e
chame a nova funo de f
2
. Plote as partes reais de f
1
e f
2
no mesmo grfico. Observe o efeito da
multiplicao por um nmero complexo. Por que este efeito ocorre? Preste bastante ateno a
esta questo, pois central para o entendimento posterior dos conceitos de resposta em
freqncia, e FFT.
4) Gere a funo f(t)=sin(2t). Multiplique esta funo por 1+j1, gerando f
2
. Plote no mesmo
grfico as partes imaginrias de f e f
2
. Note os efeitos, e explique-os.
A FFT e a DFT
O Matlab permite o clculo fcil da DFT e da FFT. Se tivermos um vetor A, de n elementos,
a DFT do mesmo :
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
15
FFTdeA=fft(A);
E para a FFT inversa, usada a seguinte forma:
IFFTdeA=ifft(FFTdeA);
Caso o nmero de elementos de A seja da forma 2
k
, o Matlab usa o algoritmo da FFT (mais
rpido). Caso contrrio, usado o algoritmo da DFT. Considere o seguinte exemplo:
t=(0:.01:.99);
f=sin(2*pi*2*t);
F=fft(f);
subplot(2,1,1)
plot(abs(F),'ko')
subplot(2,1,2)
plot(angle(F),'ko')
O resultado mostrado a seguir:
0 10 20 30 40 50 60 70 80 90 100
0
10
20
30
40
50
0 10 20 30 40 50 60 70 80 90 100
-4
-2
0
2
4
Note que foram plotados o ngulo e a fase da FFT. Isto porque o resultado um vetor com
nmeros complexos. Tente plotar o vetor sem a funo abs. Explique a razo para o resultado
aparentemente absurdo.
Neste exemplo, calculada a DFT de 1 segundo de amostragem de uma senide com 2 Hz.
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
16
Note que o resultado da fase foi estranho. A razo que a fase o resultado de divises de
nmeros muito pequenos por nmeros muito pequenos, resultando num valor no significativo.
Substitua agora a primeira linha por
t=(0:.01:1.3);
e execute o programa. O resultado mostrado a seguir:
0 20 40 60 80 100 120 140
0
10
20
30
40
50
0 20 40 60 80 100 120 140
-4
-2
0
2
4
Nota-se que neste ltimo caso ocorreu o fenmeno do leakage. Este fenmeno no
ocorreu no primeiro caso porque as amostras completavam um ciclo completo (a menos de uma
amostra). Para que no ocorra leakage, necessrio que esta precauo seja tomada.
Voltemos agora ao primeiro exemplo. Nota-se que o eixo dos x no corresponde
freqncia e sim ao nmero da amostra. Para que seja mostrada a amostra, necessrio que a
mesma seja calculada. Para tal, suponhamos que a freqncia de amostragem seja f
s
e que o sinal
contenha N amostras. Neste caso, a primeira amostra corresponderia freqncia zero, e a amostra
N (que no existe, j que as amostras vo de 0 a N-1) corresponderia freqncia de amostragem.
Assim, a freqncia de cada amostra, na DFT resultante corresponderia a f
s
/N. Por exemplo, a
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
17
primeira amostra corresponderia freqncia zero, a Segunda a f
s
N, a terceira a 2f
s
/N, e a n-sima a
(n-1)f
s
/N.
Outra observao importante com respeito amplitude. A amplitude da senide no
exemplo de 1 V, e a amplitude da DFT foi de 50. Isto se deve ao fato de que o resultado da
FFT sempre multiplicado pelo nmero de amostras. Assim, para se Ter uma estimativa
confivel das componentes espectrais, necessrio que se divida o resultado por N.
Tendo essas consideraes em mente, execute o seguinte cdigo:
clear % Limpa variveis
clf % Limpa grficos
t=(0:.01:.99); % Gera instantes das amostras
fs=100; % Freqncia de amostragem
N=length(t); % Determina o nmero de amostras
f=1+sin(2*pi*10*t);% Amostra o sinal formado por
% uma cte + senide
F=fft(f); % Calcula a DFT
Fesc=F/N; % Escalona para o valor correto
freq=(0:N-1)*fs/N; % Calcula eixo das freqncias
plot(freq,abs(Fesc),ko) % Plota o mdulo da DFT
xlabel(Freqncia ) % Label do eixo x
ylabel(Amplitude) % Label do eixo y
O resultado mostrado a seguir:
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
18
0 10 20 30 40 50 60 70 80 90 100
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Freqncia
A
m
p
l
i
t
u
d
e
FILTROS DIGITAIS
O Matlab apresenta muitas funes que facilitam a implementao de filtros digitais.
Observe o help da funo filter.
FILTER One-dimensional digital filter.
Y = FILTER(B,A,X) filters the data in vector X with the
filter described by vectors A and B to create the filtered
data Y. The filter is a "Direct Form II Transposed"
implementation of the standard difference equation:
a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
- a(2)*y(n-1) - ... - a(na+1)*y(n-na)
If a(1) is not equal to 1, FILTER normalizes the filter
coefficients by a(1).
When X is a matrix, FILTER operates on the columns of X. When X
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
19
is an N-D array, FILTER operates along the first non-singleton
dimension.
[Y,Zf] = FILTER(B,A,X,Zi) gives access to initial and final
conditions, Zi and Zf, of the delays. Zi is a vector of length
MAX(LENGTH(A),LENGTH(B))-1 or an array of such vectors, one for
each column of X.
FILTER(B,A,X,[],DIM) or FILTER(B,A,X,Zi,DIM) operates along the
dimension DIM.
See also FILTER2, FILTFILT (in the Signal Processing Toolbox).
Assim, a funo tem, em geral, trs argumentos: os vetores A e B, correspondentes aos
coeficientes dos filtros, e o vetor de entrada. O resultado da funo o vetor de sada.
Antes de fazermos um exemplo com a funo filter, vamos observar que o Matlab possui
vrias ferramentas que permitem a determinao dos coeficientes A e B. Um exemplo a funo
butter. Observe o help desta funo:
BUTTER Butterworth digital and analog filter design.
[B,A] = BUTTER(N,Wn) designs an N'th order lowpass digital
Butterworth filter and returns the filter coefficients in length
N+1 vectors B and A. The cut-off frequency Wn must be
0.0 < Wn < 1.0, with 1.0 corresponding to half the sample rate.
If Wn is a two-element vector, Wn = [W1 W2], BUTTER returns an
order 2N bandpass filter with passband W1 < W < W2.
[B,A] = BUTTER(N,Wn,'high') designs a highpass filter.
[B,A] = BUTTER(N,Wn,'stop') is a bandstop filter if Wn = [W1 W2].
When used with three left-hand arguments, as in
[Z,P,K] = BUTTER(...), the zeros and poles are returned in
length N column vectors Z and P, and the gain in scalar K.
When used with four left-hand arguments, as in
[A,B,C,D] = BUTTER(...), state-space matrices are returned.
BUTTER(N,Wn,'s'), BUTTER(N,Wn,'high','s') and BUTTER(N,Wn,'stop','s')
design analog Butterworth filters. In this case, Wn can be bigger
than 1.0.
See also BUTTORD, BESSELF, CHEBY1, CHEBY2, ELLIP, FREQZ, FILTER.
Tpicos em Processamento de Sinais
Departamento de Engenharia Eltrica
Faculdade de Tecnologia
Universidade de Braslia
20
V-se que esta funo determina os coeficientes de um filtro de Butterworth de ordem n, com uma
freqncia de corte fc. A freqncia de corte indicada de forma que o valor 1 corresponda
metade da freqncia de amostragem fs. Por exemplo, se fs=100Hz, 0.1 corresponderia a uma
freqncia de corte de 5 Hz.
Como exemplo, ser filtrada uma senide de 15 Hz, amostrada a 100 Hz, por um filtro com
fc=10 Hz.
clear
clf
t=(0:.01:1);
f=sin(2*pi*5*t); % amostragem do sinal
subplot(2,1,1)
plot(t,f) % Sinal de entrada
[B,A]=butter(1,0.1); % Calcula coeficientes do filtro de 2

ordem,
% fs/2=50Hz e fo=5Hz, entao Wn=5/50=0.1
saida=filter(B,A,f); % Filtra o sinal. Resultando no vetor de
% sada.
subplot(2,1,2)
plot(t,saida)
Execute este cdigo, e explique o resultado.
EXERCCIOS
1) Gerar um sinal f(x)=1+sin(2100t), amostrado a 1KHz.
2) Passar o sinal por um filtro passa-baixas Butterworth com fc=50 Hz.
3) Passar o sinal por um filtro passa-baixas Butterworth com fc=50 Hz.
4) O Matlab possui a funo freqz, que permite plotar a resposta em freqncia de filtros digitais.
Examine o help desta funo, e use-a para plotar a resposta em freqncia do filtro do ltimo
exemplo.

Você também pode gostar