18.01.2015 Views

MATLAB 1) Introdução 2) Geração de Sinais Amostrados

MATLAB 1) Introdução 2) Geração de Sinais Amostrados

MATLAB 1) Introdução 2) Geração de Sinais Amostrados

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

<strong>MATLAB</strong><br />

1) Introdução<br />

O aplicativo Matlab é uma das ferramentas mais úteis para as áreas <strong>de</strong> processamento <strong>de</strong><br />

sinais, controle, e outras aplicações. O “Mat” do nome Matlab está relacionado com “Matriz”, ou<br />

seja, é um laboratório que permite a manipulação eficiente <strong>de</strong> matrizes. Po<strong>de</strong>-se dizer também que o<br />

Matlab permite também a manipulação eficiente <strong>de</strong> vetores, já que um vetor <strong>de</strong> tamanho N po<strong>de</strong> ser<br />

visto como uma matriz <strong>de</strong> Nx1.<br />

Uma das melhores formas <strong>de</strong> se familiarizar com o Matlab é através do comando intro, que<br />

provê uma turnê pelas características básicas do programa.<br />

Exercício 1<br />

Use o comando intro e, com atenção, procure enten<strong>de</strong>r todos os exemplos fornecidos.<br />

A aplicação predominante no presente curso será o processamento digital se sinais. Para<br />

isto, preparamos algumas técnicas em Matlab que facilitarão o uso do aplicativo para esta tarefa.<br />

2) Geração <strong>de</strong> <strong>Sinais</strong> <strong>Amostrados</strong><br />

Como primeiro exemplo, geraremos a seguinte função senoidal no Matlab:<br />

f(t)=sin(2*pi*fo*t)<br />

On<strong>de</strong> fo=1 Hz.<br />

A função é mostrada na seguinte figura:<br />

1<br />

Senoi<strong>de</strong> <strong>de</strong> 1 Hz<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

0<br />

f(t)<br />

-0.2<br />

-0.4<br />

-0.6<br />

-0.8<br />

-1<br />

0 0.2 0.4 0.6 0.8 1<br />

Tempo (seg.)<br />

1


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

Para permitir o processamento <strong>de</strong> sinais por computador, o sinal analógico <strong>de</strong>ve ser<br />

digitalizado por um conversor analógico para digital (A/D). Neste processo o sinal é amostrado em<br />

vários instantes, em intervalos <strong>de</strong> tempo constante. O intervalo <strong>de</strong> tempo é o período <strong>de</strong> amostragem<br />

(T), e o recíproco <strong>de</strong> T é a freqüência <strong>de</strong> amostragem (f s = 1/T). A unida<strong>de</strong> <strong>de</strong> tempo do período <strong>de</strong><br />

amostragem em geral é segundos, e a <strong>de</strong> Freqüência é em Hz. 100 Hz significa que 100 amostras do<br />

sinal são tomadas em 1 segundo.<br />

Po<strong>de</strong>-se simular funções amostradas no Matlab. O exemplo abaixo mostra como se po<strong>de</strong><br />

simular a amostragem <strong>de</strong> uma senói<strong>de</strong> no Matlab:<br />

Exercício 2<br />

Siga os passos <strong>de</strong>scritos para simular a amostragem <strong>de</strong> uma onda senoidal no seguinte<br />

exemplo. Digite os comandos na Matlab, e observe os efeitos.<br />

1) Crie o eixo do tempo:<br />

t=0:0.05:1;<br />

O comando acima cria uma variável (vetor) com os elementos 0, 0.05, 0.1, ..., 1. O ponto e<br />

vírgula evita que a variável seja exibida na tela. Tente rodar o comando acima e observe o que<br />

acontece. Caso você tenha errado, e o vetor inteiro comece a aparecer na tela, você po<strong>de</strong> parar o<br />

processo usando CTRL-C.<br />

O comando size(t) exibe o tamanho da matriz t, e o comando length(t) mostrará o comprimento do<br />

vetor. Experimente estes comandos.<br />

2) Crie a função:<br />

f=sin(2*pi*t);<br />

O comando acima cria um vetor cujas componentes são a função senoidal calculada a cada valor do<br />

vetor t. Assim, no Matlab, você po<strong>de</strong> calcular o seno <strong>de</strong> um vetor, ou mesmo <strong>de</strong> uma matriz.<br />

Execute este comando.<br />

3) Plotar a função:<br />

plot(t,f)<br />

Este comando faz a plotagem do sinal, tendo f no eixo y, e o correspon<strong>de</strong>nte t no eixo x.<br />

Execute este comando.<br />

4) Coloque o Titulo e as variáveis dos eixos x e y:<br />

title(‘Funcao Senoidal’)<br />

xlabel(‘Tempo (segundos)’)<br />

ylabel(‘Amplitu<strong>de</strong> (Volts)’)<br />

2


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

Experimente os comandos acima.<br />

Tente também os seguintes comandos:<br />

plot(f,t)<br />

plot(f)<br />

plot(t)<br />

O que aconteceu no primeiro comando No segundo comando, a senói<strong>de</strong> foi plotada, mas o<br />

eixo y mostrou simplesmente o número da amostra, mas não o tempo correspon<strong>de</strong>nte a cada abcissa<br />

y. Explique o que acontece no terceiro exemplo.<br />

Tente também as seguintes opções:<br />

plot(t,f,’*’)<br />

plot(t,f,’b*’)<br />

plot(t,f,’.’)<br />

plot(t,f,’c.’)<br />

plot(t,f,’-’)<br />

plot(t,f,’y-’)<br />

Observe as cores e características dos gráficos. Agora digite help plot, e leia<br />

cuidadosamente as <strong>de</strong>scrições da função plot.<br />

Agora digite a seguinte função:<br />

grid<br />

Note o efeito da função, e digite help grid, para ver as características <strong>de</strong>sta função.<br />

Agora gere uma segunda função:<br />

f2=sin(2*pi*2*t)<br />

E plote as funções f e f2 no mesmo gráfico:<br />

plot(t,f,t,f2)<br />

Verifique as cores dos gráficos. Agora digite:<br />

plot(t,f,’b*’,t,f2,’c-.’)<br />

E verifique os efeitos.<br />

Agora tente os seguintes comandos:<br />

stem(t,f)<br />

stem(t,f2)<br />

3


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

O que estes comandos fazem Digite help stem, e estu<strong>de</strong> o funcionamento <strong>de</strong>sta função.<br />

Tente mudar as cores dos traçados <strong>de</strong>sta função. Note que a função não é tão flexível quanto a cores<br />

do traçado quanto a função plot.<br />

3) Geração <strong>de</strong> sinais mais complexos<br />

Digite os seguintes vetores:<br />

A=[0 1 2 3 4 5 6];<br />

B=[0 2 4 6 8 10 12];<br />

Tente multiplicar A*B. Note que o Matlab não realizará tal operação. O fato é que o Matlab<br />

sempre interpretará o vetor como uma matriz, e o programa sempre interpreta uma multiplicação<br />

como uma multiplicação <strong>de</strong> matrizes. Entretanto, há uma opção que permite ao usuário fazer uma<br />

multiplicação ponto a ponto <strong>de</strong> dois vetores ou matrizes (isto é o primeiro elemento do resultado é o<br />

produto dos primeiros elementos dos fatores, o segundo elemento do resultado é o produto dos<br />

segundos elementos dos fatores, e assim por diante). Tente digitar:<br />

C=A.*B<br />

Note que o vetor C é o resultado da multiplicação ponto a ponto do dos vetores A e B.<br />

Exercício 3<br />

Queremos plotar a seguinte função no intervalo 0


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

Para isto, criamos primeiro o vetor representando a variável x, e em seguida a função em<br />

questão:<br />

x=0:0.05:4;<br />

y=x.^3-6*x.^2+11*x-6;<br />

plot(x,y)<br />

Note que o operador “.^” é também um operador ponto a ponto, que eleve cada elemento da<br />

matriz à potência <strong>de</strong>sejada. Tente digitar x^2, e veja que este comando não funcionará. Tente<br />

<strong>de</strong>scobrir porque (lembre-se que o Matlab sempre assume operações matriciais).<br />

PROBLEMAS<br />

1) Gere e plot a função f(t)=exp(-t)sin(2*5*pi*t), no intervalo 0


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

EXERCÍCIOS COM O <strong>MATLAB</strong><br />

Nesta seção, veremos algumas funções extras do Matlab. Primeiramente, consi<strong>de</strong>remos o<br />

seguinte trecho a seguir. Analise atentamente o programa abaixo (consulte o help para as funções<br />

que você não conhece):<br />

% exemplo: geracão <strong>de</strong> uma forma <strong>de</strong> onda ruidosa<br />

t=0:0.01:pi; %linha 1<br />

y=2*sin(5*t); %linha 2<br />

figure(GCF) %linha 3<br />

plot(t,y) %linha 4<br />

pause %linha 5<br />

ruido=randn(1,length(t)); %linha 6<br />

plot(t,ruido) %linha 7<br />

pause %linha 8<br />

y_ruido=y+ruido; %linha 9<br />

plot(t,y_ruido); %linha 10<br />

Execute o programa. A linha 1 cria o vetor do tempo <strong>de</strong> amostragem. A linha 2 cria uma<br />

função senoidal (qual é a freqüência). A linha três faz com que a janela com o gráfico seja<br />

colocada à frente <strong>de</strong> todas as outras. A linha 4 plota uma senói<strong>de</strong>, como mostrado abaixo:<br />

2<br />

1.5<br />

1<br />

0.5<br />

0<br />

-0.5<br />

-1<br />

-1.5<br />

-2<br />

0 0.5 1 1.5 2 2.5 3 3.5<br />

O comando pause, na linha 5, causa uma pausa no programa. Para continuar o programa, o<br />

usuário <strong>de</strong>ve pressionar . [Pergunta: o que acontece se este comando for substituído por<br />

pause(2) Dica: use o comando help].<br />

A linha 6 utiliza o comando randn (utilize o help para apren<strong>de</strong>r sobre este comando). Este<br />

comando gera uma seqüência <strong>de</strong> números aleatórios com distribuição normal, com uma linha e<br />

tantas colunas quanto for o comprimento do vetor t. O comando lenght(t) fornece o número <strong>de</strong><br />

elementos <strong>de</strong> t. Observe a plotagem do sinal <strong>de</strong> ruído:<br />

6


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

3<br />

2<br />

1<br />

0<br />

-1<br />

-2<br />

-3<br />

0 0.5 1 1.5 2 2.5 3 3.5<br />

Em seguida, a linha 9 calcula uma nova variável y_noise, que é o sinal senoidal mais o<br />

ruído. Observe o resultado:<br />

4<br />

3<br />

2<br />

1<br />

0<br />

-1<br />

-2<br />

-3<br />

-4<br />

-5<br />

0 0.5 1 1.5 2 2.5 3 3.5<br />

Neste exemplo, você apren<strong>de</strong>u como gerar um sinal com ruído.<br />

Agora, vejamos outros comandos. Para isto consi<strong>de</strong>re o seguinte código:<br />

% Exemplo 2<br />

A=[1 2 3; 4 5 6]<br />

B=[3 4 ; 3 6 ; 7 8]<br />

C=[1 2 3 ; 4 5 6 ; 7 8 9];<br />

D=[5 6 ; 7 8 ; 9 10];<br />

pause<br />

size(A)<br />

size(B)<br />

pause<br />

7


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

length(A)<br />

length(B)<br />

Após executar o código acima, realize manualmente, e em seguida usando o Matlab, as<br />

seguintes operações (indique quando a operação não é possível):<br />

A*B=<br />

B*A=<br />

A*C=<br />

A^2=<br />

A.^2=<br />

C^2=<br />

C.^2=<br />

A’=<br />

C*inv(C)=<br />

[B B B]=<br />

[A;A;A]<br />

% exemplo 3<br />

Veremos agora alguns comandos estatísticos. Consi<strong>de</strong>re o seguinte trecho <strong>de</strong> código:<br />

A=[ 1 2 3 4 5 6 7] %linha 1<br />

B=mean(A) %linha 2<br />

C=std(A) %linha 3<br />

Pause %linha 4<br />

RUIDOSO=randn(1,5000); %linha 5<br />

figure(gcf) %linha 6<br />

plot(RUIDOSO) %linha 7<br />

title('sinal ruidoso') %linha 8<br />

pause %linha 9<br />

MEDIA_RUIDOSO=mean(RUIDOSO) %linha 10<br />

DP_RUIDOSO=std(RUIDOSO) %linha 11<br />

Pause %linha 12<br />

MAISRUIDO=5*randn(1,5000); %linha 13<br />

MEDIA=mean(MAISRUIDO) %linha 14<br />

DP=std(MAISRUIDO) %linha 15<br />

8


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

Use o comando help para estudar os comandos mean, e std. Execute o programa. Tome<br />

cuidado <strong>de</strong> só incluir o ponto-e-vírgula quando necessário. Estes comandos calculam a média e o<br />

<strong>de</strong>svio padrão dos vetores em questão (relembre na literatura o que estes termos significam). Na<br />

linha 2, o resultado, B, será a média dos elementos do vetor A Na linha 3, o resultado C será o<br />

<strong>de</strong>svio padrão dos elementos do vetor A. Calcule A e B manualmente, e cheque os resultados com<br />

os resultados do Matlab.<br />

Na linha 5 um sinal <strong>de</strong> ruído normal é gerado, e é plotado na linha 6. A média e o <strong>de</strong>svio<br />

padrão são calculados e mostrados nas linhas 10 e 11. Note que a função randn gera ruído aleatório<br />

com média 0, e <strong>de</strong>svio padrão 1 (na verda<strong>de</strong>, próximos <strong>de</strong> 0 e 1). Para obter um ruído com maior<br />

intensida<strong>de</strong> (maior <strong>de</strong>svio padrão), basta multiplicar o ruído pelo <strong>de</strong>svio padrão <strong>de</strong>sejado, como é<br />

feito nas linhas 13, 14 e 15. Analise com cuidado estas três últimas linhas.<br />

EXERCÍCIOS<br />

1) Usando o comando help, aprenda a lidar com os comandos max, min, mean, median, sort.<br />

2) Usando o comando help, aprenda a usar os comandos fix, floor, ceil, round, mod,<br />

rem, sign.<br />

3) Gere uma senói<strong>de</strong> com freqüência <strong>de</strong> 50 Hz e amplitu<strong>de</strong> 3V, amostrada a uma freqüência <strong>de</strong><br />

amostragem <strong>de</strong> 1 kHz. Adicione a esta senói<strong>de</strong> ruído gaussiano com <strong>de</strong>svio padrão <strong>de</strong> 2V. Plote<br />

o sinal resultante. Determine os valores máximo e mínimo <strong>de</strong>ste sinal. Não se esqueça <strong>de</strong> incluir<br />

título e unida<strong>de</strong>s. Procure plotar o sinal <strong>de</strong> forma que suas características fiquem claras ao leitor<br />

(<strong>de</strong>ve ficar claro que o sinal é uma senói<strong>de</strong> com ruído).<br />

4) Usando o comando help square, aprenda como gerar uma onda quadrada. Gere uma onda<br />

quadrada <strong>de</strong> 10 Hz, amostrada a uma freqüência <strong>de</strong> 1 KHz.<br />

9


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

REVISÃO: NÚMEROS COMPLEXOS<br />

1) Representação dos Números Complexos<br />

Números complexos são uma estrutura criada como uma extensão dos números reais. À<br />

primeira vista, esta estrutura parece ser artificial e inútil. Entretanto, na prática suas aplicações são<br />

inúmeras. Este capítulo apresentará uma revisão resumida do tópico, <strong>de</strong>vida à sua importância nas<br />

séries <strong>de</strong> Fourier.<br />

Um número complexo é um par or<strong>de</strong>nado <strong>de</strong> números reais (R,I), e é muito usualmente<br />

representado na seguinte forma:<br />

C=R+iI, ou C=R+jI<br />

Sendo que matemáticos preferem o uso do i, enquanto os engenheiros preferem o j. R é<br />

chamado parte real, e I é chamado parte imaginária do número complexo. Note que se I é zero, o<br />

número se transforma em puramente complexo, e se R é zero, o número é puramente imaginário.<br />

Os números complexos seguem certas regras algébricas, que a princípio parecem estranhas,<br />

mas que permitem a extensão <strong>de</strong> várias técnicas matemáticas, bem como possibilitam um gran<strong>de</strong><br />

números <strong>de</strong> aplicações. É muito comum se representar os números complexos em um plano<br />

or<strong>de</strong>nado x,y, da forma ilustrada na Figura 1.<br />

imaginario<br />

M cos(α)<br />

(x,y)<br />

M<br />

a=tan -1 (y/x)<br />

X=M sin(α)<br />

Real<br />

Figura 1 - Representação gráfica <strong>de</strong> um número complexo<br />

O módulo ou magnitu<strong>de</strong> M <strong>de</strong> um número complexo é representado geometricamente pela<br />

reta ligando a origem à coor<strong>de</strong>nado do par or<strong>de</strong>nado, e é <strong>de</strong>finido como:<br />

M=sqrt(x 2 +y 2 )<br />

O ângulo ou fase α, do número complexo é o ângulo entre a reta mencionada e o eixo x, e é<br />

<strong>de</strong>finido como:<br />

α=tan -1 (I/R)<br />

É fácil mostrar, observando a geometria da Figura 1 que:<br />

10


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

R=M cos(α)<br />

I=M sin(α)<br />

Muitas vezes o número complexo é representado por seu módulo e sua fase, da seguinte<br />

maneira:<br />

M ∠ α<br />

Exercício 1:<br />

Consi<strong>de</strong>re os seguintes números:<br />

A=1+j2<br />

B=-2+j3<br />

C=4-j1<br />

D=-2-j2<br />

1) Plote manualmente cada um do números, e enumere em que quadrante o número está (1 o ., 2 o .,<br />

3 o ., ou 4 o .) e <strong>de</strong>pois plote os mesmo usando o Matlab (plot(A) plota o número complexo, caso o<br />

mesmo realmente seja complexo).<br />

2) Para cada número, calcule manualmente o módulo M, e <strong>de</strong>pois faça os cálculos com o Matlab<br />

(comando abs(A)). Confira os resultados com os cálculos manuais.<br />

3) Calcule manualmente os ângulos α (atente para os quadrantes) e em seguida repita os cálculos<br />

em Matlab (comando atan(x/y)). Tente também a função atan2(x/y), e observe que a mesma<br />

leva em consi<strong>de</strong>ração o quadrante em que o número está.<br />

4) A partir dos valores <strong>de</strong> M e α calculados, <strong>de</strong>termine x e y. Faça o mesmo em Matlab (Exemplo,<br />

x=M*cos(alfa), y=M*sin(alfa)).<br />

5) Digite A=1+j2, e em seguida, digite:<br />

real(A)<br />

imag(A)<br />

O que acontece Qual é a função dos comandos acima1<br />

6) Digite o seguinte código:<br />

A=[ 1+j*2 ; 2+j*3 ; 4-j*1 ; 2-j*2 ]<br />

plot(A)<br />

M=abs(A)<br />

grid<br />

alfa1=atan(real(A)./imag(A))<br />

11


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

alfa2=atan2(real(A),imag(A))<br />

Areal=M.*cos(alfa2)<br />

Aimag=M.*sin(alfa2)<br />

Tente enten<strong>de</strong>r todos os comandos. Note que os exercícios <strong>de</strong> 1 a 4 foram implementados<br />

nesta linha. Note o caráter matricial (ou vetorial) das variáveis (preste atenção nos pontos do .*, e ./<br />

.<br />

6) Converta os seguintes números para a forma R+jI:<br />

2 π/3<br />

3 60 o<br />

4 π/2<br />

2) Álgebra dos Números Complexos<br />

Os números complexos são sujeitos a regras <strong>de</strong> álgebra, algumas <strong>de</strong>las semelhantes à<br />

álgebra dos números reais, e algumas diferentes. Quando os números complexos são puramente<br />

reais, a álgebra simplesmente se transforma na álgebra dos números reais.<br />

Suponha os números complexos A e B:<br />

A=A r + j A i<br />

B=B r + j B i<br />

Estes números complexos são sujeitos às seguintes regras:<br />

Soma: A+B=(A r + B r ) + j ( A i + B i )<br />

Valor <strong>de</strong> j: j=i=sqrt(-1)<br />

Quadrado <strong>de</strong> i: i 2 =-1<br />

Multiplicação: 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<br />

= (A r B r - A i B i )+j (A r B i +A i B r )<br />

Raiz n-ésima (fórmula <strong>de</strong> <strong>de</strong> Moivre):<br />

a+2kp<br />

A 1/n = n |A| ∠ n<br />

Complexo conjugado <strong>de</strong> R+jI : R-jI<br />

Multiplicação <strong>de</strong> um número complexo por seu conjugado:<br />

(A+jB)(A-jB)=A 2 +B 2 (note a eliminação da parte complexa)<br />

12


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

Eliminação <strong>de</strong> partes complexas no <strong>de</strong>nominador:<br />

A+jB = A+jB C-jD = (AC-BD) + j(AD-BC)<br />

C+jD C+jD C-jD C 2 +D 2<br />

Exercício 2<br />

Suponha:<br />

M= 1+j2<br />

N= 3+j4<br />

Calcule primeiro manualmente, e <strong>de</strong>pois em Matlab. Dê os resultados na forma R+jI :<br />

1) M+N<br />

2) MN<br />

3) M/N<br />

4) M 2<br />

5) sqrt(M)<br />

6) M 1/3<br />

7) M 1/5<br />

8) Determine todas as raízes cúbicas <strong>de</strong> 8 (Fórmula <strong>de</strong> <strong>de</strong> Moivre ou Matlab)<br />

9) Eleve todas as raízes encontradas em na questão 8 ao cubo.<br />

3) Fórmula <strong>de</strong> Euler:<br />

Duas fórmulas fazem os números complexos muito úteis:<br />

e jω = cos ω + j sin ω<br />

e -jω = cos ω - j sin ω<br />

Ou equivalentemente:<br />

cos ω = e jω + e -jω<br />

2<br />

sin ω = e jω − e -jω<br />

Note que<br />

j2<br />

cos ω = Re (e jω )<br />

sin ω = Im (e jω )<br />

13


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

Exercício 3<br />

1) Defina uma variável <strong>de</strong> tempo com 0


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

FFT<strong>de</strong>A=fft(A);<br />

E para a FFT inversa, é usada a seguinte forma:<br />

IFFT<strong>de</strong>A=ifft(FFT<strong>de</strong>A);<br />

Caso o número <strong>de</strong> elementos <strong>de</strong> A seja da forma 2 k , o Matlab usa o algoritmo da FFT (mais<br />

rápido). Caso contrário, é usado o algoritmo da DFT. Consi<strong>de</strong>re o seguinte exemplo:<br />

t=(0:.01:.99);<br />

f=sin(2*pi*2*t);<br />

F=fft(f);<br />

subplot(2,1,1)<br />

plot(abs(F),'ko')<br />

subplot(2,1,2)<br />

plot(angle(F),'ko')<br />

O resultado é mostrado a seguir:<br />

50<br />

40<br />

30<br />

20<br />

10<br />

0<br />

0 10 20 30 40 50 60 70 80 90 100<br />

4<br />

2<br />

0<br />

-2<br />

-4<br />

0 10 20 30 40 50 60 70 80 90 100<br />

Note que foram plotados o ângulo e a fase da FFT. Isto porque o resultado é um vetor com<br />

números complexos. Tente plotar o vetor sem a função abs. Explique a razão para o resultado<br />

aparentemente absurdo.<br />

Neste exemplo, é calculada a DFT <strong>de</strong> 1 segundo <strong>de</strong> amostragem <strong>de</strong> uma senói<strong>de</strong> com 2 Hz.<br />

15


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

Note que o resultado da fase foi estranho. A razão é que a fase é o resultado <strong>de</strong> divisões <strong>de</strong><br />

números muito pequenos por números muito pequenos, resultando num valor não significativo.<br />

Substitua agora a primeira linha por<br />

t=(0:.01:1.3);<br />

e execute o programa. O resultado é mostrado a seguir:<br />

50<br />

40<br />

30<br />

20<br />

10<br />

0<br />

0 20 40 60 80 100 120 140<br />

4<br />

2<br />

0<br />

-2<br />

-4<br />

0 20 40 60 80 100 120 140<br />

Nota-se que neste último caso ocorreu o fenômeno do “leakage”. Este fenômeno não<br />

ocorreu no primeiro caso porque as amostras completavam um ciclo completo (a menos <strong>de</strong> uma<br />

amostra). Para que não ocorra leakage, é necessário que esta precaução seja tomada.<br />

Voltemos agora ao primeiro exemplo. Nota-se que o eixo dos x não correspon<strong>de</strong> ã<br />

freqüência e sim ao número da amostra. Para que seja mostrada a amostra, é necessário que a<br />

mesma seja calculada. Para tal, suponhamos que a freqüência <strong>de</strong> amostragem seja f s e que o sinal<br />

contenha N amostras. Neste caso, a primeira amostra correspon<strong>de</strong>ria à freqüência zero, e a amostra<br />

N (que não existe, já que as amostras vão <strong>de</strong> 0 a N-1) correspon<strong>de</strong>ria à freqüência <strong>de</strong> amostragem.<br />

Assim, a freqüência <strong>de</strong> cada amostra, na DFT resultante correspon<strong>de</strong>ria a f s /N. Por exemplo, a<br />

16


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

primeira amostra correspon<strong>de</strong>ria à freqüência zero, a Segunda a f s N, a terceira a 2f s /N, e a n-ésima a<br />

(n-1)f s /N.<br />

Outra observação importante é com respeito à amplitu<strong>de</strong>. A amplitu<strong>de</strong> da senói<strong>de</strong> no<br />

exemplo é <strong>de</strong> 1 V, e a amplitu<strong>de</strong> da DFT foi <strong>de</strong> 50. Isto se <strong>de</strong>ve ao fato <strong>de</strong> que o resultado da<br />

FFT é sempre multiplicado pelo número <strong>de</strong> amostras. Assim, para se Ter uma estimativa<br />

confiável das componentes espectrais, é necessário que se divida o resultado por N.<br />

Tendo essas consi<strong>de</strong>rações em mente, execute o seguinte código:<br />

clear<br />

% Limpa variáveis<br />

clf<br />

% Limpa gráficos<br />

t=(0:.01:.99);<br />

% Gera instantes das amostras<br />

fs=100;<br />

% Freqüência <strong>de</strong> amostragem<br />

N=length(t); % Determina o número <strong>de</strong> amostras<br />

f=1+sin(2*pi*10*t);% Amostra o sinal formado por<br />

% uma cte + senói<strong>de</strong><br />

F=fft(f);<br />

% Calcula a DFT<br />

Fesc=F/N;<br />

% Escalona para o valor correto<br />

freq=(0:N-1)*fs/N; % Calcula eixo das freqüências<br />

plot(freq,abs(Fesc),’ko’) % Plota o módulo da DFT<br />

xlabel(‘Freqüência ’) % Label do eixo x<br />

ylabel(‘Amplitu<strong>de</strong>’)<br />

% Label do eixo y<br />

O resultado é mostrado a seguir:<br />

17


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

1.4<br />

1.2<br />

1<br />

Amplitu<strong>de</strong><br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

0<br />

0 10 20 30 40 50 60 70 80 90 100<br />

Freqüência<br />

FILTROS DIGITAIS<br />

O Matlab apresenta muitas funções que facilitam a implementação <strong>de</strong> filtros digitais.<br />

Observe o help da função filter.<br />

FILTER One-dimensional digital filter.<br />

Y = FILTER(B,A,X) filters the data in vector X with the<br />

filter <strong>de</strong>scribed by vectors A and B to create the filtered<br />

data Y. The filter is a "Direct Form II Transposed"<br />

implementation of the standard difference equation:<br />

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)<br />

- a(2)*y(n-1) - ... - a(na+1)*y(n-na)<br />

If a(1) is not equal to 1, FILTER normalizes the filter<br />

coefficients by a(1).<br />

When X is a matrix, FILTER operates on the columns of X. When X<br />

18


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

is an N-D array, FILTER operates along the first non-singleton<br />

dimension.<br />

[Y,Zf] = FILTER(B,A,X,Zi) gives access to initial and final<br />

conditions, Zi and Zf, of the <strong>de</strong>lays. Zi is a vector of length<br />

MAX(LENGTH(A),LENGTH(B))-1 or an array of such vectors, one for<br />

each column of X.<br />

FILTER(B,A,X,[],DIM) or FILTER(B,A,X,Zi,DIM) operates along the<br />

dimension DIM.<br />

See also FILTER2, FILTFILT (in the Signal Processing Toolbox).<br />

Assim, a função tem, em geral, três argumentos: os vetores A e B, correspon<strong>de</strong>ntes aos<br />

coeficientes dos filtros, e o vetor <strong>de</strong> entrada. O resultado da função é o vetor <strong>de</strong> saída.<br />

Antes <strong>de</strong> fazermos um exemplo com a função filter, vamos observar que o Matlab possui<br />

várias ferramentas que permitem a <strong>de</strong>terminação dos coeficientes A e B. Um exemplo é a função<br />

butter. Observe o help <strong>de</strong>sta função:<br />

BUTTER Butterworth digital and analog filter <strong>de</strong>sign.<br />

[B,A] = BUTTER(N,Wn) <strong>de</strong>signs an N'th or<strong>de</strong>r lowpass digital<br />

Butterworth filter and returns the filter coefficients in length<br />

N+1 vectors B and A. The cut-off frequency Wn must be<br />

0.0 < Wn < 1.0, with 1.0 corresponding to half the sample rate.<br />

If Wn is a two-element vector, Wn = [W1 W2], BUTTER returns an<br />

or<strong>de</strong>r 2N bandpass filter with passband W1 < W < W2.<br />

[B,A] = BUTTER(N,Wn,'high') <strong>de</strong>signs a highpass filter.<br />

[B,A] = BUTTER(N,Wn,'stop') is a bandstop filter if Wn = [W1 W2].<br />

When used with three left-hand arguments, as in<br />

[Z,P,K] = BUTTER(...), the zeros and poles are returned in<br />

length N column vectors Z and P, and the gain in scalar K.<br />

When used with four left-hand arguments, as in<br />

[A,B,C,D] = BUTTER(...), state-space matrices are returned.<br />

BUTTER(N,Wn,'s'), BUTTER(N,Wn,'high','s') and BUTTER(N,Wn,'stop','s')<br />

<strong>de</strong>sign analog Butterworth filters. In this case, Wn can be bigger<br />

than 1.0.<br />

See also BUTTORD, BESSELF, CHEBY1, CHEBY2, ELLIP, FREQZ, FILTER.<br />

19


Tópicos em Processamento <strong>de</strong> <strong>Sinais</strong><br />

Departamento <strong>de</strong> Engenharia Elétrica<br />

Faculda<strong>de</strong> <strong>de</strong> Tecnologia<br />

Universida<strong>de</strong> <strong>de</strong> Brasília<br />

Vê-se que esta função <strong>de</strong>termina os coeficientes <strong>de</strong> um filtro <strong>de</strong> Butterworth <strong>de</strong> or<strong>de</strong>m n, com uma<br />

freqüência <strong>de</strong> corte fc. A freqüência <strong>de</strong> corte é indicada <strong>de</strong> forma que o valor 1 corresponda à<br />

meta<strong>de</strong> da freqüência <strong>de</strong> amostragem fs. Por exemplo, se fs=100Hz, 0.1 correspon<strong>de</strong>ria a uma<br />

freqüência <strong>de</strong> corte <strong>de</strong> 5 Hz.<br />

Como exemplo, será filtrada uma senói<strong>de</strong> <strong>de</strong> 15 Hz, amostrada a 100 Hz, por um filtro com<br />

fc=10 Hz.<br />

clear<br />

clf<br />

t=(0:.01:1);<br />

f=sin(2*pi*5*t); % amostragem do sinal<br />

subplot(2,1,1)<br />

plot(t,f) % Sinal <strong>de</strong> entrada<br />

[B,A]=butter(1,0.1); % Calcula coeficientes do filtro <strong>de</strong> 2 ª or<strong>de</strong>m,<br />

% fs/2=50Hz e fo=5Hz, entao Wn=5/50=0.1<br />

saida=filter(B,A,f); % Filtra o sinal. Resultando no vetor <strong>de</strong><br />

% saída.<br />

subplot(2,1,2)<br />

plot(t,saida)<br />

Execute este código, e explique o resultado.<br />

EXERCÍCIOS<br />

1) Gerar um sinal f(x)=1+sin(2100t), amostrado a 1KHz.<br />

2) Passar o sinal por um filtro passa-baixas Butterworth com fc=50 Hz.<br />

3) Passar o sinal por um filtro passa-baixas Butterworth com fc=50 Hz.<br />

4) O Matlab possui a função freqz, que permite plotar a resposta em freqüência <strong>de</strong> filtros digitais.<br />

Examine o help <strong>de</strong>sta função, e use-a para plotar a resposta em freqüência do filtro do último<br />

exemplo.<br />

20

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!