Você está na página 1de 20

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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:
Senoide de 1 Hz 1 0.8 0.6 0.4 0.2 f(t) 0 -0.2 -0.4 -0.6 -0.8 -1 0 0.2 0.4 0.6 Tempo (seg.) 0.8 1

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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 (fs= 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))
2

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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

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)=x3-6x2+11x-6
4

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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=x3+2x2-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

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:
2

1.5

0.5

-0.5

-1

-1.5

-2

0.5

1.5

2.5

3.5

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:
6

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

-1

-2

-3

0.5

1.5

2.5

3.5

Em seguida, a linha 9 calcula uma nova varivel y_noise, que o sinal senoidal mais o rudo. Observe o resultado:
4 3 2 1 0 -1 -2 -3 -4 -5

0.5

1.5

2.5

3.5

% 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

Neste exemplo, voc aprendeu como gerar um sinal com rudo. Agora, vejamos outros comandos. Para isto considere o seguinte cdigo:

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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

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

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.

imaginario (x,y) M a=tan-1(y/x) X=M sin() Real

M cos()

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(x2+y2) 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:
10

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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 (1o., 2o., 3o., ou 4o.) 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))
11

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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 60o 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=Ar+ j Ai B=Br+ j Bi Estes nmeros complexos so sujeitos s seguintes regras: Soma: Valor de j: Quadrado de i: Multiplicao: A+B=(Ar + Br) + j ( Ai + Bi) j=i=sqrt(-1) i2=-1 A . B=( Ar+ j Ai).( Br+ j Bi)= Ar Br +j Ai Br+j BrAi+j2AiBi = (ArBr - AiBi)+j (ArBi+AiBr) Raiz n-sima (frmula de de Moivre): A =
1/n n

a+2kp |A| n R-jI (note a eliminao da parte complexa)


12

Complexo conjugado de R+jI :

Multiplicao de um nmero complexo por seu conjugado: (A+jB)(A-jB)=A2+B2

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

Eliminao de partes complexas no denominador: A+jB = A+jB C-jD = (AC-BD) + j(AD-BC) C+jD C+jD C-jD C2+D2 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) M2 5) sqrt(M) 6) M1/3 7) M1/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: ej = cos + j sin e-j = cos - j sin Ou equivalentemente: cos = ej + e-j 2 j sin = e e-j j2 Note que cos = Re (ej) sin = Im (ej)
13

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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)=e2jt 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 f2. Plote as partes reais de f1 e f2 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 f2. Plote no mesmo grfico as partes imaginrias de f e f2. 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 :
14

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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 2k, 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:
50 40 30 20 10 0 0 10 20 30 40 50 60 70 80 90 100

4 2 0 -2 -4

10

20

30

40

50

60

70

80

90

100

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.
15

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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:
50 40 30 20 10 0 0 20 40 60 80 100 120 140

4 2 0 -2 -4

20

40

60

80

100

120

140

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 fs 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 fs/N. Por exemplo, a
16

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

primeira amostra corresponderia freqncia zero, a Segunda a fsN, a terceira a 2fs/N, e a n-sima a (n-1)fs/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:

17

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

1.4

1.2

Amplitude

0.8

0.6

0.4

0.2

10

20

30

40

50 60 Freqncia

70

80

90

100

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
18

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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.
19

Tpicos em Processamento de Sinais Departamento de Engenharia Eltrica Faculdade de Tecnologia Universidade de Braslia

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.

20

Você também pode gostar