Você está na página 1de 55

INTRODUO AO USO DO MATLAB E DA "TOOLBOX" DE SINAIS

NOTAS DE AULA

PAULO LO M. OSORIO ( DEE/PUC-RIO )

2002

AVISO

Estas notas destinam-se aqueles que esto usando o Matlab pela primeira vez. Os exemplos apresentados utilizam uma pequena parcela das funes disponveis e tem por objetivo familiarizar o usurio com as funes e os comandos mais comuns. H tambm uma introduo ao uso das principais funes da "toolbox signal", que de grande utilidade no estudo de sinais e sistemas discretos. Atualmente existe no mercado uma oferta considervel de livros que se utilizam do Matlab para implementar exemplos e exerccios. Uma listagem desses livros pode ser encontrada na pgina da Mathworks ( http://www.mathworks.com ).

1.Introduo

O Matlab foi originalmente desenvolvido para ser um "laboratrio matricial". Atualmente ele um sistema interativo e uma linguagem de programao para a computao tcnica e cientfica em geral. A sua filosofia de processamento est baseada em matrizes. Como os comandos do Matlab so muito similares maneira como expressamos as solues dos problemas em termos matemticos, a tarefa de se escrever solues computacionais no Matlab muito mais rpida do que escrever programas em linguagens de alto nvel, tais como FORTRAN e C. Alm disto, ele possui facilidades grficas que tornam a interface homem mquina muito amigvel.

2. rea de Trabalho (Workspace)

Quando o programa Matlab acionado a mensagem abaixo ir aparecer na tela. O prompt (>>) indica que o Matlab est esperando pela entrada de comandos.

To get started, select "MATLAB Help" from the Help menu. >> O Matlab trabalha com duas janelas: uma janela de comandos que usada para a entrada dos comandos, dados, e para mostrar os resultados na tela, e uma outra janela grfica onde so gerados os grficos. As duas janelas so apagadas quando do incio de cada sesso de Matlab. A janela de comando pode ser limpa durante uma sesso de trabalho atravs do comando clc. Para se limpar a janela grfica usado o comando clg. A medida que se trabalha na janela de comando, o Matlab memoriza os comandos entrados, bem como as variveis que foram criadas. Desta forma, os comandos e as variveis

ficam residentes no espao de trabalho do Matlab, e podem ser chamados sempre que se desejar. Para se limpar o espao de trabalho usa-se o comando clear. O Matlab uma linguagem sensvel ao tipo (caracter maisculo ou minsculo) utilizado, ou seja, RH, Rh, rH e rh so tratadas como variveis diferentes. Os comandos de Matlab so usualmente entrados em linhas separadas, embora possa-se ter mltiplos comandos na mesma linha, desde que separados por ponto e vrgula (;). Os comentrios so entrados precedidos do sinal de porcentagem (%). Alm de executar comandos que so entrados pelo teclado, o Matlab tambm capaz de executar seqncias de comandos que esto armazenadas em arquivos com extenso .m, como ser mostrado no item 9.2. Estes arquivos so chamados de arquivos-M. O comando what mostra uma listagem dos arquivos-M, disponveis no diretrio corrente. Estes arquivos podem ser vistos por meio do comando type. Se o arquivo especificado com este comando no tiver uma extenso, ele assumido como sendo do tipo M.

3. Matrizes, Vetores e Escalares

O Matlab, como j foi dito, orientado para trabalhar com matrizes. Uma matriz notada como A(i,j) ou a(i,j), em que A e a so matrizes diferentes. O ndice i se refere s linhas e o ndice j s colunas. O tamanho de uma matriz especificado pelo nmero de linhas e colunas. Uma matriz que possui somente uma linha ou somente uma coluna chamada de vetor. Por outro lado, se uma matriz possuir somente uma linha e uma coluna, ela um escalar. H vrias formas de se criar uma matriz no Matlab, sendo a mais simples atravs de uma lista de nmeros entre colchetes, como mostrado abaixo.

a = 0.5; b = [ 1 3 5 7 9]; c = [2;4;6;8;10]; 6

D = [1 2 3;4 5 6;7 8 9];

Um comando muito til o whos que mostra o nome de todas as variveis existentes no espao de trabalho global, bem como os seus tipos e dimenses. Se as variveis acima estiverem no espao de trabalho, o resultado da aplicao desse comando o seguinte:

whos Name Size Bytes Class

D a b c

3x3 1x1 1x5 5x1

72 8 40 40

double array double array double array double array

Grand total is 20 elements using 160 bytes

Deve-se observar, nos exemplos acima, que todas linhas esto finalizadas por ponto e vrgula (;). Isto evita que as matrizes sejam impressas na tela. A omisso do (;), faz com que o resultado de um dado comando aparea imediatamente na tela, como por exemplo:

b=[1 3 5 7 9] b = 1 3 5 7 9

Nos exemplos acima a um escalar, b um vetor linha, c um vetor coluna, e D uma matriz 3x3. Observe que os nmeros dentro dos colchetes ou esto separados por vrgulas ou por espaos. O ponto e vrgula separa as linhas da matriz. Uma forma alternativa de se entrar a matriz D a seguinte:

D = [1 2 3 4 5 6 7 8 9];

O Matlab permite tambm se definir uma matriz a partir de outra j existente. Por exemplo, considere os seguintes comandos:

A = [1 .53 1-2*j]; B = [0 -3 A];

Isto equivalente a:

B = [ 0 -3 1 .53 1-2*j];

Pode-se tambm mudar ou adicionar valores num vetor atravs de subscrito referenciado em parntesis. O seguinte comando:

B(1) = -1;

troca o primeiro elemento do vetor B de 0 para -1. Um vetor tambm pode ser estendido pela definio de novos elementos. O vetor B que possui 5 elementos passa a ter 7 elementos se o seguinte comando for executado:

B(7) = pi;

Neste caso B(6) ter , automaticamente, o valor 0.

Exerccio 3.1: Dadas as matrizes abaixo, verifique suas dimenses atravs do Matlab

1. 2. 3. 4. 5.

A = [1 0 0 0 1]; B = [3; 4; -1; 2-j]; C = [ 3; 4; -1; 2 -j]; D = [1 2 3; 4 5 6; 7 8 9]; E = [3 -5 0 11; 9 7 3.5 2.1; -1 4... 0 1; 3.4 5.6 7.8 9.1]

6. 7. 8.

F = [A([1 2 3]) 5 6]; G = [A ; F]; H = [E(2,1) A];

Um vetor tambm pode ser criado usando-se o comando (:). Se (:) for usado para separar dois nmeros inteiros m e n, ele ir gerar todos os nmeros inteiros entre m e n. Por exemplo, o comando abaixo gera um vetor chamado X com os inteiros de 1 a 10.

X = 1:10;

Se o operador (:) for usado para separar trs nmeros a, b, e c , ento o comando gera valores entre a e c com o incremento dado por b. Nos exemplos abaixo o vetor Y contm os nmeros de 10 a 1, enquanto o vetor Z formado pelos nmeros no intervalo [-p , p ], separados de p/10.

Y = 10:-1:1;

Z = -pi:pi/10:pi;

O comando (:) tambm pode ser usado para selecionar submatrizes a partir de uma outra matriz. Por exemplo seja a matriz D: 9

D = [1 2 3;4 5 6;7 8 9];

os comandos:

dl2 = D(2,:); dc1 = D(:,1); dd = D(2:3,1:2);

% Segunda linha da matriz D. % Primeira coluna da matriz D. % dd = [4 5;7 8]

Exerccio 3.2: Dada a matriz R abaixo, verifique as suas respostas usando o Matlab.

-p -0.1 R = 0.1p -5.9

0.5 1.3 2.2 3.2 -5.6 1.2 4.3 7.8 9.2 3.3 -4.7 -0.4

1. 2. 3. 4. 5. 6.

A = R(:,2); b = R(3,:); c= R(1:3,2:4); C = R(1:2:5, :); D = [4:9; 1:6]; E = R';

No Matlab vlido se ter uma matriz vazia. Por exemplo, uma matriz vazia pode ser gerada com o seguinte comando:

a = [ ]

Deve-se observar que uma matriz vazia diferente de uma matriz que s contenha zeros.

10

Os valores de uma matriz, vetor, ou escalar tambm podem entrar atravs do comando
input. Isto muito til quando se tem o programa num arquivo tipo M.

z = input('Entre com o valor de z

')

4. Operaes Escalares

As operaes aritmticas entre dois escalares so mostrada na Tabela 1

Operao Adio Subtrao Multiplicao Diviso direita Diviso esquerda Exponenciao

Forma Algbrica a+b a-b ab a/b b\a ab

MATLAB a+b a-b a*b a/b a\b a^b

Tabela 1: Operaes aritmticas entre dois escalares

O resultado de uma operao que no relacionada diretamente a uma varivel automaticamente colocado numa varivel chamada de ans, que pode ser usada como qualquer outra varivel, como por exemplo:

>> 3*pi^2 ans = 29.6088 >> sqrt(ans) ans = 5.4414

11

>> x = (ans-3)/2 x = 1.2207

O Matlab possui muitas funes do tipo built-in, como por exemplo:

>> pi ans = 3.1416 >> exp(1) ans = 2.7183 >> log(ans) ans = 1

Como o Matlab possui um nmero muito grande de funes, para entend-las o melhor usar o comando help, que pode ser invocado a partir da janela do Matlab, ou como uma linha de comando do tipo help < nome do comando>. Por exemplo:

>> help ans

ANS Most recent answer. ANS is the variable created automatically when expressions are not assigned to anything else. ANSwer.

Deve-se chamar a ateno para a maneira como os valores numricos das variveis so mostrados no Matlab. O seu controle feito atravs do comando format. O default a formatao chamada de format short, ou seja:

12

>> pi

ans =

3.1416

H vrias formas possveis de formatao, que podem ser vistas usando o comando
help format. Por exemplo o comando format compact suprime a linha extra que

aparece nas outras formataes. Esta formatao a utilizada na maioria dos exemplos apresentados.

>> format compact >> pi ans = 3.1416

Uma outra formatao o format long, que apresenta o resultado com 15 digitos.

>> format long >> pi ans = 3.14159265358979

Deve-se observar que o Matlab trabalha internamente com preciso dupla em todas as suas operaes, e que o comando format altera apenas a forma com que os resultados so apresentados.

13

5. Criao de Matrizes e Vetores

O Matlab possui comandos que permitem a criao de algumas matrizes e vetores especiais:

zeros(m,n) ones(m,n) eye(m,n) diag(v)

cria uma matriz m x n de zeros. cria uma matriz m x n de uns. cria uma matriz identidade m x n. cria uma matriz n x n com v na diagonal principal (v um vetor de tamanho n).

Com as funes zeros e ones pode-se criar vetores, como por exemplo:

>> x = zeros(1,5) x = 0 0 0 0 0

>> y = ones(5,1) y = 1 1 1 1 1

Os comandos size e length permitem determina as dimenses de matrizes e vetores, respectivamente. Por exemplo:

>> size(x) ans =

14

>> [m,n] = size(y) m = 5 n = 1 >> lx = length(x) lx = 5 >> ly = length(y) ly = 5

Deve-se observar que o comando length no consegue diferenciar se o vetor linha ou coluna.

6. Operaes com Vetores

Sejam os vetores a e b dados por:


a = 1:5; b = 1:2:9;

As operaes adio, subtrao, multiplicao, e diviso de um vetor por um escalar so aplicadas a todos os elementos do vetor:
a*2 ans = 2 4

10

15

As operaes matemticas entre vetores no so to simples quanto aquelas entre vetores e escalares. Quando dois vetores forem de mesmo tamanho, as operaes de adio, subtrao, multiplicao, e diviso so aplicadas elemento a elemento. Por exemplo:
a+b ans = 2 5 ans-a ans = 1 3

8 5

11 7

14 9

A multiplicao e diviso elemento por elemento feita de maneira similar, exceto por uma pequena alterao na notao:
a.*b ans = 1 6

15

28

45

Os vetores a e b foram multiplicados elemento a elemento usando o operador (.*), que diferente da operao multiplicao matricial (*). A diviso de vetores elemento a elemento requer o uso do smbolo ponto (.):
a./b ans = 1.0000 b.\a ans = 1.0000

0.6667 0.6667

0.6000 0.6000

0.5714 0.5714

0.5556 0.5556

A exponenciao de vetores tambm feita elemento a elemento, podendo ser definida de vrias maneiras:
a.^2 ans = 1 4

16

25

os elementos individuais de a elevados ao quadrado.


2.^a

16

ans = 2 4 8 16 32

neste caso o escalar 2 elevado a uma potncia dada por cada elemento de a. a.^b ans =
1 8 243 16384 1953125

aqui cada elemento do vetor a elevado a uma potncia dada por cada elemento do vetor b. A Tabela 2 mostra um resumo das operaes aritmticas com vetores.

Operao Adio Subtrao Multiplicao Diviso direita Diviso esquerda Exponenciao

Forma Algbrica a+b a-b ab a/b b\a ab

MATLAB a+b a-b a.* b a. / b a. \ b a. ^ b

Tabela 2: Operaes aritmticas elemento a elemento entre dois vetores

7. Grficos

O Matlab oferece um processador grfico com extensiva capacidade de gerar toda a gama de grficos, e ao mesmo tempo simplificando muito o seu uso. Pode-se gerar grficos com apenas um comando. O grfico mais simples o de um conjunto de pontos no plano x-y. Por exemplo:

x = 1:6; y = [-1 1/4 1 pi 2 1]; plot(x,y)

17

O grfico resultante mostrado na Figura 1. Observe que o Matlab une os pontos do grfico por meio de retas.
3.5

2.5

1.5

0.5

-0.5

-1

1.5

2.5

3.5

4.5

5.5

Figura 7.1 Grfico x-y

Um grfico alternativo, mostrado na Figura 7.2, pode ser obtido da seguinte forma:
plot(x,y,'+')
3.5

2.5

1.5

0.5

-0.5

-1

1.5

2.5

3.5

4.5

5.5

Figura 7.2: Forma alternativa do grfico x-y.

18

Aos grficos das figuras 7.1 e 7.2 pode-se acrescentar ttulo, nomes dos eixos, e reticulado. Pode-se tambm controlar as cores das curvas, bem como o tipo de linha utilizado. possvel se ter mais de uma curva num mesmo grfico. Alm destas, h muitas outras facilidades grficas oferecidas pelo Matlab. Uma boa opo para se aprender mais sobre os recursos da funo plot o de entrar com o comando help plot. O Matlab pode gerar diversos tipos de grficos: curvas em 2D, superfcies em 3D, grficos de contorno de superfcies em 3D, curvas paramtricas em 2D e em 3D. Os detalhes de como so gerados esses grficos podem ser encontrados com o auxlio do help. O comando subplot cria diversos grficos numa mesma janela grfica. A sua sintaxe subplot(m,n,k), em que mn o nmero de grficos a serem criados, organizado numa matriz com m linhas e n colunas, e k a ordem em que aparecem os grfico ao longo das linhas. Vejamos o seguinte exemplo: 4 grficos sero gerados numa mesma janela, e mostrados na Figura 7.3.

x = 0:pi/20:2*pi; n = 0:.3:6; subplot(2,2,1) plot(x, sin(x)) subplot(2,2,2) plot(x, exp(-x)) subplot(2,2,3) stem(n, sin(2*pi*n/4)) subplot(2,2,4) stem(n, 0.5.^n)

19

1 0.8 0.6

0.5

0 0.4 -0.5 0.2 0

-1

1 0.8 0.6

0.5

0 0.4 -0.5 0.2 0

-1

Figura 7.3: Grficos mltiplos numa mesma janela.

8. Operaes com Matrizes

As operaes de multiplicao por escalar, soma e subtrao de matrizes so efetuadas elemento a elemento de forma similar aos vetores, como visto anteriormente. A operao de transposio de matrizes ou vetores feita por meio do ( ' ), ou seja, b = a' faz com que a matriz b seja a transposta da matriz a. O produto escalar definido como a soma dos produtos dos elementos correspondentes de dois vetores do mesmo tamanho. No Matlab isto implementado da seguinte forma:

prod_esc = sum(P.*Q);

em que P e Q so ambos vetores linha ou vetores coluna. O produto de AB de duas matrizes A e B s existir se o nmero de colunas de A for idntico ao nmero de linhas de B. Por exemplo: 20

A = [0 1 2;-1 3 5]; B = [1 2 3;-1 0 5;4 5 -2]; C = A*B C = 7 16 D = B*A ??? Error using ==> * Inner matrix dimensions must agree. 10 23 1 2

Do exemplo acima pode-se ver que o Matlab no executa a operao D=BA, pois ela no satisfaz as condies para multiplicao de duas matrizes. Do que foi visto acima possvel simplificar a operao de produto escalar entre dois vetores linhas P e Q, usando o seguinte comando:

prod_esc = P*Q'

A inversa de uma matriz quadrada A pode ser computada no Matlab atravs da instruo
inv(A). Por exemplo:

B = 1 -1 4 2 0 5 3 5 -2

inv_B = inv(B) inv_B = 6.2500 -4.5000 -4.7500 3.5000 -2.5000 2.0000

21

1.2500 B*inv_B ans = 1.0000 0.0000 0.0000

-0.7500

-0.5000

0.0000 1.0000 0.0000

0.0000 0.0000 1.0000

No exemplo acima, foi computado tambm o produto B*B-1 , que nada mais do que a matriz identidade. O determinante de uma matriz pode ser computado, utilizando-se a instruo det(A), como mostrado no exemplo abaixo:

A = 1 -1 4 det(A) ans = -4 2 0 5 3 5 -2

Vamos supor que se deseje resolver o seguinte sistema de equaes lineares:

2x1 + x2 - 3x3 = 5 3x1 - 2x2 + 2x3 = 5 5x1 - 3x2 - x3 = 16

Este sistema pode ser escrito na forma matricial, como: 22

AX = B
2 1 -3 A = 3 -2 2 5 -3 -1 x1 X = x2 x3 5 B = 5 16

A determinao de X pode ser feita por diviso de matrizes ou pela utilizao da matriz inversa, ou seja:

X = B/A

A = [2 1 -3;3 -2 2;5 -3 -1]; B = [5 5 16]'; X = A\B X = 1 -3 -2

A outra soluo utiliza a matriz inversa, ou seja:

X = A-1B

A = [2 1 -3;3 -2 2;5 -3 -1]; B = [5 5 16]'; X = inv(A)*B X = 1.0000

23

-3.0000 -2.0000

9. Programao em Matlab

A soluo de problemas mais complexos pode ser implementada atravs da programao na prpria linguagem do Matlab. O programa pode ser escrito num arquivo texto com extenso .m. O Matlab fornece um editor de textos ASCII que permite criar e editar tais arquivos.

9.1 Loops e Operaes Condicionais

A linguagem de programao do Matlab fornece comandos para loops e operaes condicionais. H dois tipos de loops: um do tipo for e outro do tipo while. Um loop: tipo for repete as instrues dentro do loop medida que o ndice do loop assume os valores de um dado vetor linha. Por exemplo:

for k = [1 2 3] x(k) = k^2; end x x = 1 4 9

A forma mais comum de escrever esse loop seria:

24

for k = 1:3 x(k) = k^2; end

Observe que 1:3 eqivalente a [1 2 3]. importante salientar que em termos de eficincia deve-se sempre procurar usar funes tipo built-in e operadores sempre que possvel. Isto deve-se ao fato que os scripts e as funes definidas pelo o usurio ( e a maioria das funes existentes nas toolboxes ) so interpretadas, em vez de compiladas. Isto significa que quando um arquivo .m executado, cada instruo lida e depois executada, em vez de todo o programa ser compilado na linguagem da mquina para depois ser executado. Por isso que muitas vezes os programas escritos em Matlab so muito mais lentos que os escritos em outras linguagens como C e Fortran, por exemplo. As duas seqncias de comandos abaixo do o mesmo resultado:
t = (0: .0001:10; y=sin(t);

e
t = 0:.0001:10; for i=1:length(t) y(i)=sin(t(i)); end

Entretanto, no meu computador, a segunda implementao 25 vezes mais lenta que a primeira. Isto deve-se ao fato que a primeira seqncia de comandos utiliza a funo seno vetorizada ( built-in ), ou seja, as operaes com vetores sero sempre mais eficientes que os loops no Matlab. O loop while se repete enquanto uma dada expresso for verdadeira. O exemplo abaixo mostra um algoritmo para calcular a raiz quadrada do valor de x. A varivel eps fornecida pelo Matlab e serve para medir a preciso das operaes em ponto flutuante. Seu valor 2.2204e-016.

25

x = 3; xp = x/2; df = 1; while df > eps y = 0.5*(xp + x/xp); df = abs(y-xp); xp = y; end y y = 1.73205080756888

As operaes condicionais no Matlab so similares s de outras linguagens de alto nvel. Os operadores lgicos so: <, >, <=, >=, = = (igual), ~ = (diferente). Estes operadores so binrios e retornam os valores 0 e 1 ( para argumentos escalares ).

4 > 3 ans = 1 4 < 3 ans = 0 4 == 3 ans = 0 4 ~= 3 ans = 1

A forma geral de um comando tipo if : 26

if expresso 1

comandos
elseif expresso 2

comandos
else

comandos
end

O primeiro bloco de comandos aps uma expresso no nula ser executado.

9.2 Scripts e Funes

Um script simplesmente uma coleo de comandos do Matlab escritos num arquivo tipo m ( um arquivo texto com extenso .m). Ao se entrar no prompt com o nome do arquivo (sem a extenso .m), os comandos so executados como se tivessem sido entrados diretamente no espao de trabalho do Matlab.

Por exemplo, vamos supor que o arquivo seno.m contenha o script mostrado abaixo.
% Programa para gerar um grfico da funo seno % Gerao um vetor x com N amostras entre 0 e 2pi x = linspace(0,2*pi,N); y = sin(x); % gera o vetor y a partir de x plot(x,y),title('Grfico do Seno') xlabel ('ngulo em rad'),ylabel('Amplitude'),grid

Se entrarmos no espao de trabalho com os seguintes comandos:


N=50; a=1; seno

27

a Figura 9.1 ir aparecer.

Grfico do Seno 1

0.8

0.6 0.4

0.2 Amplitude

0 -0.2

-0.4 -0.6

-0.8

-1

3 4 ngulo em rad

Figura 9.1: Grfico da funo sen(x).

Como pode ser visto neste exemplo, os comandos que aparecem no script podem se referir a variveis que j existam no espao de trabalho do Matlab. Quando um script executado, as suas variveis passam tambm a fazer parte do espao de trabalho. As funes so bem mais gerais que os scripts, pois permitem ao usurio criar novos comandos no Matlab. As diversas toolboxes que fazem parte to Matlab so constitudas por funes. A funo difere do script apenas na primeira linha, que tem a seguinte sintaxe:

function [saida1,saida2,....] = nomedafuncao(entrada1,entrada2,....)

Com exceo desta linha, as demais so linhas com comandos do Matlab, de maneira similar aos scripts. Diferentemente dos scripts, as variveis que aparecem na funo so internas, ou 28

seja, elas no aparecem no espao de trabalho do Matlab. Por exemplo, vamos considerar uma funo que compute a mdia e a varincia de um conjunto de nmeros. Seja estat o nome dessa funo. Abaixo esta mostrada a listagem do arquivo estat.m.

function [m,v] = estat(x) % Funo que computa a mdia e a varincia de x nx = length(x); m = sum(x)/nx; v = sum((x - m).^2)/(nx-1);

Para testar a funo:


x = rand(1,100); [med,var] = estat(x) med = 0.4652 var = 0.0778

29

10. Uso da "Toolbox Signal"

Esta "toolbox" possui uma coleo muito grande de funes que so largamente utilizadas em processamento de sinais.

10.1 Gerao de Sinais Elementares Os sinais para serem tratados pelo computador devem estar na forma discreta, embora possamos gerar grficos como se eles fossem contnuos, para isto basta que se use um nmero suficientemente grande de pontos do sinal contnuo. Estes pontos, ou amostras, so obtidos pelo processo de amostragem. que consiste em dividir o eixo do tempo, por exemplo, em intervalos com espaamento uniforme Dt, que chamado de intervalo de amostragem. O inverso do intervalo de amostragem denominado de freqncia de amostragem fs, que indica a cadncia com que uma dada varivel amostrada, no caso mais comum esta varivel o tempo. Para se gerar um vetor t no intervalo [0,1s], com Dt = 0,001s (fs = 1 kHz), usam-se os seguintes comandos:

fs = 1000;

% freqncia de amostragem

t = 0:1/fs:1; % vetor com amostras separadas de 0,001s (1 ms)

Exemplo 10.1: Gerar uma onda quadrada peridica com amplitude unitria, com freqncia

fundamental de 10 Hz, e ciclo de repetio de 50% ( ciclo de repetio a poro de cada ciclo para a qual o sinal positivo, e 0 < cr < 100%).

% Programa para gerar uma onda quadrada A = 1; f0 = 10; % amplitude de pico % freqncia fundamental em Hz

30

cr = 50; fs = 1000;

% onda quadrada simtrica em % % freqncia de amostragem em Hz % gera o eixo do tempo

t = 0:1/fs:1;

onda_quadrada = A*square(2*pi*f0*t,cr); plot(t,onda_quadrada), xlabel('t (s)'),ylabel('Amplitude') title('Onda Quadrada Simtrica') axis([0 1 -1.5 1.5]);

A onda quadrada resultante mostrada na Figura 10.1


Onda Quadrada Simtrica 1.5

0.5 Amplitude

-0.5

-1

-1.5 0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Figura 10.1: Onda Quadrada Simtrica

Exerccio 10.1: Gere uma onda triangular simtrica com amplitude 2 de pico, freqncia

fundamental de 5 Hz, e amostrada com fs = 2 kHz. Use a funo sawtooth do Matlab.

Exemplo 10.2: Gerar uma onda quadrada simtrica e discreta, com amplitude unitria,

freqncia fundamental de p/6 rad, e no intervalo [-15,15].

31

% Programa para gerar uma onda quadrada discreta A = 1; wd = pi/6; cr = 50; % amplitude de pico % freqncia fundamental em rad % onda quadrada simtrica em % % gera os ndices das amostras

n = -15:15;

dquadrada = A*square(wd*n,cr); stem(n,dquadrada), xlabel('n'),ylabel('Amplitude') title('Onda Quadrada Simtrica') axis([-15 15 -1.5 1.5]);

A onda quadrada discreta mostrada na Figura 10.2.


Onda Quadrada Simtrica 1.5

0.5 Amplitude

-0.5

-1

-1.5 -15

-10

-5

10

15

Figura 10.2: Onda Quadrada Discreta com wd = p/6

Da mesma forma que se pode gerar uma onda quadrada contnua ou discreta, tambm podem ser gerados sinais senoidais ou cossenoidais atravs das funes sin(wt+f) e cos(wt+f).

32

Exerccio 10.2: Gere um sinal senoidal contnuo de amplitude unitria, com freqncia

fundamental de 2 Hz, no intervalo [-1,1], e com fase inicial nula. Utilize uma freqncia de amostragem de 500 Hz.

Exerccio 10.3: Gere uma seqncia cossenoidal com amplitude de pico de 2, freqncia

fundamental de p/4, no intervalo [-10,10]. Considere a fase inicial como sendo -p/3.

Exemplo 10.3: Gerar o sinal x(t) = 5e-4t sen(20pt). Considere a freqncia de amostragem como

sendo de 1 kHz.

% Programa para gerar uma senide amortecida. fs = 1000; fo = 10; a = -4; fi = 0; A = 5; t = 0:1/fs:1; % freq. de amostragem % freq. fundamental % coef. da exponencial % fase inicial % amplitude da senide % eixo do tempo

x = A*sin(2*pi*fo*t + fi).*exp(a*t); plot(t,x),xlabel('t (s)'),ylabel('Amplitude')

title('Senide Amortecida') axis([0 1 -6 6]);

A Figura 10.3 mostra a senide amortecida gerada pelo programa acima.

Exerccio 10.4: Gere a seqncia senoidal amortecida dada por x[n] = 5(0,8)nsen(pn/4), no

intervalo [0,20].

33

Senide Amortecida 6 4 2 Amplitude 0 -2 -4 -6

0.2

0.4 t (s)

0.6

0.8

Figura 10.3: Senide Amortecida

A gerao de seqncias tipo delta ( d[n] ) e degrau unitrio ( u[n] ) pode ser feita com o auxlio das funes zeros(m,n) e ones(m,n). Por exemplo, para se gerar a seqncia u[n-10] com 50 amostras, escreve-se a seguinte linha de comando:

u = [zeros(1,10),ones(1,40)];

Para se gerar uma seqncia d[n-6] com 50 amostras, pode-se fazer assim:

delta = zeros(1,50); delta(1,6) = 1;

A energia de uma seqncia de durao finita x[n] dada por:


E x = x[n]x * [n] = | x[n] | 2
n =0 n =0 N -1 N -1

34

o que pode ser computado no Matlab como:

Ex = sum(x.*conj(x)); ou Ex = sum(abs(x).^2);

De forma similar, a potncia mdia de um sinal peridico com perodo N dada por:
1 N -1 | x[n] |2 N n =0

Px =

10.2 Sistemas Discretos

Para um sistema linear e invariante (SLI) caracterizado por uma resposta impulsional h[n], a sada y[n], para uma entrada x[n], dada pelo somatrio da convoluo:

y[n] = h[n] * x[n] =

k =-

h[k]x[n - k]

Se o sistema tambm for causal, ento:


y[n] = h[k]x[n - k]
k =0 n

A expresso acima pode ser facilmente computada usando-se a funo conv(h,x).

Exemplo 10.4: Um SLIC possui uma resposta impulsional dada por h[n] = (0,85)n u[n]. Para

uma entrada x[n] = u[n] - u[n-15], determine as 40 primeiras amostras da sada y[n].

35

% Programa para computar a convoluo de duas seqncias % h[n]=(0.85)^n e x[n]=u[n] - u[n-15] N=40; n=0:N-1; h=(.85).^n; x=[ones(1,15),zeros(1,25)]; y=conv(x,h); subplot(3,1,1) stem(n,x),xlabel('n'),ylabel('x[n]'),title('Entrada') subplot(3,1,2) stem(n,h) xlabel('n'),ylabel('h[n]'),title('Resposta Impulsional') subplot(3,1,3) stem(n,y(1:N)),xlabel('n'),ylabel('y[n]'),title('Sada')

A entrada x[n], a resposta impulsional do sistema h[n], e a sada do sistema y[n] so mostrada na Figura 10.4.

A sada de um SLI discreto tambm pode ser obtida atravs da soluo da equao diferena que descreve este sistema.

ak y[n - k ] = b k x[n - k ]
k =0 k =0

O Matlab possui uma funo filter(a,b,x), em que a = [1, a1,a2,...aN], b = [b0,b1,....bM], e x o vetor com as amostras da entrada, para resolver numericamente a equao diferena acima.

36

Entrada 1 x[n] 0.5 0 1 h[n] 0.5 0 10 y[n] 5 0 0 5 10 15 20 25 30 35 40 0 5 10 15 20 Sada 25 30 35 40 0 5 10 15 20 25 Resposta Impulsional 30 35 40

Figura 10.4: Resposta de um SLI a uma entrada tipo pulso.

Exemplo 10.5: Determinar as respostas impulsional e ao degrau do sistema descrito pela

equao diferena y[n] - 1,2728y[n-1] + 0,81y[n-2] = 0,5372x[n].

% Programa para computar as respostas impulsional e ao degrau %do sistema descrito por y[n]-1.2728y[n-1]+0.81y[n-2] = %0,532x[n]. N = 50; % nmero de amostras % coeficientes da ED

b = 0.5372; a = [1 -1.2728 0.81]; imp = [1 zeros(1,N-1)]; deg = [ones(1,N)]; h = filter(b,a,imp); y = filter(b,a,deg); n = 0:N-1;

% gera o impulso

% gera o degrau unitrio % cmputo da resposta impulsional % cmputo da resposta ao degrau

37

subplot(2,1,1) stem(n,h) xlabel('n'),ylabel('h[n]'),title('Resposta Impulsional') subplot(2,1,2) stem(n,y) xlabel('n'),ylabel('y[n]'),title('Resposta ao Degrau')

A Figura 10.5 mostra as respostas impulsional e ao degrau do sistema do Exemplo 10.5.

Resposta Impulsional 1 0.5 h[n] 0 -0.5 0

10

20

30

40

50

Resposta n Degrau ao 2 1.5 y[n] 1 0.5 0 0 10 20 n


Figura 10.5: Respostas impulsional e ao degrau do sistema do Exemplo 10.4.

30

40

50

No Exemplo 10.5, o sistema dito recursivo ou IIR (Infinite Impulse Response), pois a resposta impulsional de durao infinita. H tambm os sistemas no-recursivos ou FIR (Finite Impulse Response), cuja resposta impulsional de durao finita. Um exemplo destes sistemas o filtro de mdia mvel descrito pela seguinte equao diferena:

38

y[n] =

1 M -1 x[n - k] M k =0

Exemplo 10.6: Um sinal s[n] = 3 + 4(0,95)nsen(p/8 n) contaminado por um rudo com

distribuio uniforme entre -0,5 e 0,5.Ser utilizado um filtro de mdia mvel para diminuir os efeitos do rudo aditivo.

A Figura 10.6 mostra as duas seqncias s[n] e r[n].


Sinal sem Ruido 8 6 s[n] 4 2 0 0 10 20 Ruido 0.5 30 40 50

r[n]

-0.5

10

20 n

30

40

50

Figura 10.6: Sinal s[n] e rudo r[n] com ditribuio uniforme

As seqncias s[n] e r[n] so somadas, resultando na seqncia x[n], que nada mais do que o sinal original s[n] contaminado pelo rudo aditivo r[n]. Para se atenuar o efeito indesejvel deste rudo, pode-se passar o sinal x[n] por um filtro de mdias mveis. No presente exemplo, usou-se um filtro com 3 atrasos (M = 3). A Figura 10.7a mostra o sinal

39

original s[n], o rudo r[n], e a soma dos dois x[n]. A Figura 10.7b mostra as curvas da entrada x[n] e da sada y[n] do filtro de mdias mveis. Deve-se observar que a sada y[n] muito prxima do sinal original s[n], exceto por um atraso de uma amostra, o que conseqncia do processo de filtragem.

Amplitudes

6 4 2 0 -2 0 10

r[n] s[n] x[n]

20 n

30

40

50

Amplitudes

6 4 2 0 -2 0 10 20 n

s[n] y[n]

30

40

50

Figura 10.7: a) sinal s[n], rudo r[n] e x[n]=s[n]+r[n]; b) sinal s[n] e sada do filtro y[n]

% Programa que exemplifica o uso de filtros de mdia mvel N = 50; n = 0:N-1; s = (4*sin(n*pi/8).*(.95).^n) + 3*ones(1,N); r = rand(1,N) - 0.5; % rudo com distribuio uniforme figure(1) subplot(2,1,1) stem(n,s),xlabel('n'),ylabel('s[n]'),title('Sinal sem Ruido') subplot(2,1,2)

40

stem(n,r),xlabel('n'),ylabel('r[n]'),title('Ruido') x = s + r; M = 3; % nmero de atrasos do filtro

b = ones(1,M)/M; y = filter(b,1,x); figure(2) subplot(2,1,1) plot(n,r,'g-',n,s,'y--',n,x,'b:') xlabel('n'),ylabel('Amplitudes') legend('g-','r[n]','y--','s[n]','b:','x[n]') axis([0 50 -2 8]); subplot(2,1,2) plot(n,s,'y-',n,y,'b:'),xlabel('n'),ylabel('Amplitudes') legend('y-','s[n]','b:','y[n]') axis([0 50 -2 8]);

10.3 Anlise de Fourier

A transformada de Fourier de uma seqncia discreta definida como:

X(e jw ) =

n =-

x[n]e

- jwn

em que X(ejw) uma funo contnua e complexa.

Exemplo 10.7: Calcular a transformada de Fourier da seqncia x[n] = (0,5)n u[n].

X (e jw ) = (0,5) n e - jwn =
n =0

1 e jw = jw 1 - 0,5e - jw e - 0,5
41

Observe que na soluo acima, o somatrio nada mais do que a soma de uma progresso geomtrica cuja razo (0,5e-jw). No Exemplo 10.7, como x[n] uma seqncia de durao infinita no se pode usar o Matlab para computar X(ejw) diretamente. Entretanto, pode-se computar X(ejw) usando-se a expresso acima, no intervalo [0,p] e ento traar grficos de magnitude e fase, ou das partes real e imaginria.

Exemplo 10.8: Computar e plotar os espectros de magnitude e fase de X(ejw), bem como as suas partes real e imaginria.

% Programa para computar e plotar os espectros de amplitude e % fase da DTFT de x[n]=(0,5)^n u[n], a partir da expresso % X(w)= exp(jw)/[exp(jw) - 0,5]. N = 256; w = (0:N-1)*pi/N; ex = exp(j*w); X = ex./(ex - .5*ones(1,N)); ampl = abs(X); fase = angle(X); rex = real(X); imx = imag(X); wnorm = w/pi; subplot(2,2,1) plot(wnorm,ampl) xlabel('Freqncia normalizada') ,ylabel('Magnitude'), title('Espectro de Amplitude') subplot(2,2,3) % normalizao do eixo das freqncias % cmputo do mdulo de X(jw) % cmputo da fase de X(jw) % eixo das freqncias dividido em N pontos

42

plot(wnorm,fase),xlabel('Freqncia Normalizada') ylabel('Radianos'),title('Espectro de Fase') subplot(2,2,2) plot(wnorm,rex),xlabel('Freqncia Normalizada'),ylabel('Real[X(jw)]'),title('Parte Real') subplot(2,2,4) plot(wnorm,imx),xlabel('Freqncia Normalizada') ylabel('Imag[X(jw)]'),title('Parte Imaginria')
Espectro de Amplitude 2 Magnitude 1.5 1 0.5 Real[X(jw)] 2 1.5 1 0.5 Parte Real

0.5 1 Frequncia Normalizada Espectro de Fase

0.5 1 Frequncia Normalizada Parte Imaginria

0 -0.2 -0.4 -0.6 Imag[X(jw)] 0 0.5 1 Frequncia Normalizada

0 -0.2 -0.4 -0.6 -0.8 0 0.5 1 Frequncia Normalizada

normalizado, ou seja, a freqncia p corresponde ao valor 1. Muitos autores chamam este ponto

Radianos

Figura 10.8: Grficos da transformada de Fourier: magnitude e fase; partes real e imaginria.

Nos grficos da Figura 10.8 deve-se observar que o eixo das freqncias est

43

de freqncia de Nyquist, pois a freqncia que corresponde metade da freqncia de amostragem. Um outro ponto que deve ser observado o que se refere forma de se plotar uma funo complexa X(ejw). Isto pode ser feito atravs de grficos que mostrem as partes real e imaginria, ou de grficos de magnitude e fase. Esta ltima forma a preferida quando a funo complexa estiver relacionada a sistemas lineares discretos, como por exemplo filtros digitais. No caso em que a seqncia discreta x[n] for de durao finita, ento ser possvel se utilizar o Matlab para o cmputo da transformada de Fourier. Na realidade o que se faz computar a Transformada Discreta de Fourier (DFT), que uma seqncia discreta, definida como:
N -1 n =0 2p kn N

X [k ] = x[n]e

k [0, N - 1]

Pode-se mostrar que os X[k] so amostras de X(ejw) igualmente espaadas de 2p/N no crculo unitrio, ou seja X(ejw) a envoltria das amostras representadas por X[k].

Exemplo 10.9: Repetir o Exemplo 10.7, utilizando a DFT para computar X(ejw). Como x[n] deve ser finita, o que se pode fazer obter uma verso truncada de x[n] num intervalo finito adequado. No programa abaixo foi utilizada a funo fft(x,M) para computar a DFT da seqncia x de comprimento N, com M pontos. Se M for omitido o cmputo da DFT se dar com o nmero de pontos de x, neste caso N. Se M>N, ento sero apendados (M-N) zeros ao final da seqncia x. Este procedimento no altera a forma da envoltria de X[k], apenas a define melhor. A FFT (Fast Fourier Transform) apenas um algoritmo que computa de forma eficiente a DFT. Esses algoritmos so mais rpidos quando M for uma potncia inteira de 2 (M= 2p).

44

% Programa para computar a transformada de Fourier usando o % algoritmo de FFT N = 256; x = (.5).^(0:N-1); % gerao da seqncia x[n] Xc = fft(x); X = Xc(1:N/2+1); ampl = abs(X); fase = angle(X); rex = real(X); imx = imag(X); wnorm = 0:2/N:1; subplot(2,2,1) plot(wnorm,ampl) xlabel('Freqncia Normalizada'),ylabel('Magnitude') title('Espectro de Amplitude') subplot(2,2,3) plot(wnorm,fase) xlabel('Freqncia Normalizada'),ylabel('Radianos') title('Espectro de Fase') subplot(2,2,2) plot(wnorm,rex) xlabel('Freqncia Normalizada'),ylabel('Real[X(jw)]') title('Parte Real') subplot(2,2,4) plot(wnorm,imx) xlabel('Freqncia Normalizada'),ylabel('Imag[X(jw)]') title('Parte Imaginria') % normalizao do eixo das freqncias % cmputo da DFT de x[n] % freqncias no intervalo [0,pi] % cmputo do mdulo de X(jw) % cmputo da fase de X(jw)

45

Comparando-se os resultados mostrados nas Figuras 10.8 com os da Figura 10.9 , pode-se ver que a aproximao obtida utilizando a DFT muito boa.

2 Magnitude 1.5 1 0.5

Espectro de Amplitude

2 Real[X(jw)] 1.5 1 0.5

Parte Real

0.5 1 Frequncia Normalizada Espectro de Fase

0.5 1 Frequncia Normalizada Parte Imaginria

0 Radianos -0.2 -0.4 -0.6 Imag[X(jw)] 0 0.5 1 Frequncia Normalizada

0 -0.2 -0.4 -0.6 -0.8 0 0.5 1 Frequncia Normalizada

Figura 10.9: Grficos da transformada de Fourier obtidos atravs da DFT.

Exemplo 10.11: Computar e plotar a DFT da seqncia x[n] = u[n] -u[n-8], com 8, 16, 32, e 64 pontos.

% Programa que ilustra o efeito de se apendar zeros a uma % seqncia finita x = ones(1,8); % x[n]=u[n]-u[n-8] XO = fft(x); % fft com 8 pontos

X1 = fft(x,16); % fft com 16 pontos, 8 zeros apendados a x[n]

46

X2 = fft(x,32); % fft com 32 pontos, 24 zeros apendados a x[n] X3 = fft(x,64); % fft com 64 pontos, 56 zeros apendados a x[n] subplot(2,2,1) stem([(0:4)/4],abs(XO(1:5))) xlabel('Freqncia Normalizada'),ylabel('Magnitude') title('N = 8') subplot(2,2,3) stem([(0:8)/8],abs(X1(1:9))) xlabel('Freqncia Normalizada'),ylabel('Magnitude') title('N = 16 (8 zeros)') subplot(2,2,2) stem([(0:16)/16],abs(X2(1:17))) xlabel('Freqncia Normalizada'),ylabel('Magnitude') title('N = 32 (24 zeros)') subplot(2,2,4) stem([(0:32)/32],abs(X3(1:33))) xlabel('Freqncia Normalizada'),ylabel('Magnitude') title('N = 64 (56 zeros)')

O programa acima computa 4 DFTs com diferentes nmeros de pontos. A primeira com 8 pontos, a segunda com 16 pontos, sendo que destes 8 so zeros que foram apendados ao final de x[n]. As outras duas so computadas com 32 e 64 pontos, sendo que nestes casos foram apendados 24 e 56 zeros respectivamente. Os resultados mostrados na Figura 10.10 indicam que ao se apender zeros a uma seqncia finita, obtm-se uma amostragem mais fina da envoltria X(ejw), sem que isto altere a sua forma.

47

Exerccio 10.5: Para a seqncia x[n] = u[n] - 2u[n-8] + u[n-16] compute e plote |X[k]|, para

N=16, e N=64 (apendendo-se 48 zeros). Comente os resultados.

N=8 8 Magnitude Magnitude 6 4 2 0 0 0.5 1 Freqncia Normalizada N = 16 (8 zeros) 8 6 4 2 0 0

N = 32 (24 zeros)

0.5 1 Freqncia Normalizada N = 64 (56 zeros)

8 Magnitude Magnitude 0 0.5 1 Freqncia Normalizada 6 4 2 0

8 6 4 2 0 0 0.5 1 Freqncia Normalizada

Figura 10.10: O efeito de se apender zeros ao final de uma seqncia finita

10.4 Resposta em Freqncia dos Sistemas Lineares Invariantes e Discretos (SLID)

A resposta em freqncia de um SLID dada por H(ejw), que nada mais do que a transformada de Fourier da resposta impulsional h[n] do sistema. Como H(ejw) uma funo complexa, a resposta em freqncia composta da resposta em magnitude, ou em amplitude, que |H(ejw)|, e da resposta em fase que o argumento de H(ejw).

48

O Matlab possui uma funo que permite computar a resposta em freqncia a partir dos coeficientes da equao diferena que descreve o sistema. tambm possvel comput-la a partir dos coeficientes da funo de transferncia H(z), que a transformada z de h[n]. Estes coeficientes so na realidade os mesmos da equao diferena. A funo [H,w]=freqz(b,a,N). Maiores detalhes podem ser obtidos atravs do help do Matlab.

Exemplo 10.12: Para o sistema de 2a ordem do Exemplo 10.5, descrito por y[n] - 1,2728y[n-1] +0,81y[n-2] = 0,532x[n], determine e plote a resposta em freqncia do sistema.

% Programa para computar a resposta em freqncia do SLI % descrito por: % y[n] - 1,2728y[n-1] + 0,81y[n-2] = 0,532x[n]. b = 0.532; a = [1 -1.2728 .81]; N = 128; % # de pontos para o cmputo da FFT

[H w] = freqz(b,a,N); subplot(2,1,1) plot(w/pi,abs(H)) xlabel('Freqncia Normalisada'),ylabel('Magnitude') title('Resposta em Magnitude') subplot(2,1,2) plot(w/pi,angle(H)) xlabel('Freqncia Normalisada'),ylabel('Radianos') title('Resposta em Fase')

Exerccio 10.6: Repetir o Exemplo 10.12 usando a opo whole em freqz. Esta opo permite

computar a resposta em freqncia no intervalo [0,2p]. O que pode ser dito em termos de simetria das resposta em magnitude e fase? 49

Resposta em Magnitude 4 Magnitude 3 2 1 0 0 0.2 0.4 0.6 Freqncia Normalisada Resposta em Fase 0.8 1

0.5 0 Radianos -0.5 -1 -1.5 -2 0 0.2 0.4 0.6 Freqncia Normalisada 0.8 1

Figura 10.11: Respostas em Magnitude e Fase do sistema do Exemplo 10.12.

Exemplo 10.13: Para um filtro tipo mdia mvel, determine e plote as respostas de magnitude e fase, para M = 3, e M = 10.

% Programa para computar a resposta em freqncia do SLI % descrito por: y[n] ={x[n] + x[n-1] + x[n-2] +...+ x[n-M]}/M. % Este sistema um filtro de mdia mvel b1 = [1 1 1]/3; b2 = ones(1,10)/10; a = 1; N = 128; % # de pontos para o cmputo da FFT

50

[H1 w] = freqz(b1,a,N); [H2 w] = freqz(b2,a,N); subplot(2,1,1) plot(w/pi,abs(H1),'r:',w/pi,abs(H2),'b--') xlabel('Freqncia Normalisada'),ylabel('Magnitude') title('Resposta em Magnitude'),legend('r:','M=3','b--','M=10'); subplot(2,1,2) plot(w/pi,angle(H1),'r:',w/pi,angle(H2),'b--') xlabel('Freqncia Normalisada'),ylabel('Radianos') title('Resposta em Fase'),legend('r:','M=3','b--','M=10');

Resposta em Magnitude 1 0.8 Magnitude 0.6 0.4 0.2 0 0 0.2 0.4 0.6 Freqncia Normalisada Resposta em Fase 0.8 1 M=3 M=10

2 1 Radianos 0 -1 -2 -3 0 0.2 0.4 0.6 Freqncia Normalisada M=3 M=10 0.8 1

Figura 10.12: Resposta em freqncia de um filtro de mdia mvel, com M=3, e M=10.

51

10.5 Transformada z

A transformada z unilateral definida como:


X ( z ) = x[n]z - n
n =0

No caso de SLI a transformada z de h[n] H(z), que uma funo racional da forma H(z)=N(z)/D(z), em que N(z) e D(z) so polinmios em z. As razes de N(z) = 0 so os zeros de H(z), e as razes de D(z) = 0 correspondem aos plos de H(z). H(z) chamada de funo sistema ou funo de transferncia, servindo juntamente com h[n], para caracterizar os SLIs. O Matlab possui funes que permitem decompor H(z) em seus plos e zeros

([z,p,k]=tf2zp(num,den)), ou fazer um grfico dos plos e zeros no plano z ( zplane(num,den) ). H tambm uma funo que permite obter H(z) na forma racional, a partir de seus plos e zeros ( [num,den] = zp2tf(z,p,k) ).

Exemplo 10.13: Expressar a FT, dada abaixo, na forma fatorada, fazer um grfico de p/olos e zeros e indicar a regio de convergncia. 1 - 1,2071z -1 - 2,6464z -2 + 2,1213z -3 1 + 0,02722z -1 - 0,4446z -2 + 0,5439z -3 + 0,324z -4

H ( z) =

% Programa para determinar na forma fatorada uma funo % racional e fazer um diagrama de plos e zeros num = [1 -1.2071 -2.6464 2.1213]; den = [1 0.0272 -0.4446 0.5439 0.3240]; [zeros polos ganho] = tf2zp(num,den) zplane(num,den)

52

zeros =

2.0000 -1.5000 0.7071

polos =

0.6364 + 0.6364i 0.6364 - 0.6364i -0.8000 -0.5000

ganho =

A figura 10.13 mostra o diagrama de plos e zeros de H(z). A regio de convergncia o exterior do crculo de raio | 0,6364 + 0,6364i | = 0,9, que corresponde ao mdulo dos plos mais afastados da origem, para uma soluo causal. A transformada inversa de H(z) a resposta impulsional h[n]. Esta transformada pode ser computada de diversas maneiras, porm no caso em que H(z) for racional, mais conveniente utilizar o mtodo da expanso em fraes parciais. Com este mtodo possvel se obter uma expresso para h[n] na forma fechada. O Matlab possui a funo [r,p,k]=residuez(num,den), que permite computar os plos de H(z), os coeficientes da expanso em fraes parciais.

53

1.5 1 0.5 0 -0.5 -1 -1.5

Imaginary part

-1.5

-1

-0.5

0 0.5 Real part

1.5

Figura 10.13: Diagrama de plos e zeros de H(z) do Exemplo 10.13.

Exemplo 10.14: Determinar h[n] da FT dada abaixo, pelo mtodo da expanso em fraes parciais. z(z - 1) z - 1,1z + 0,14z + 0,08
3 2

H ( z) =

% Programa para determinar os plos e os coeficientes da % expanso em fraes parciais de uma funo racional em z.

num = [0 1 -1]; den = [1 -1.1 .14 .08]; [coeficientes polos constante] = residuez(num,den)

54

coeficientes =

-0.6667 2.3810 -1.7143

polos =

0.8000 0.5000 -0.2000

constante =

[]

A expanso em fraes parciais ser da forma: z z z - 0,667 - 1,7143 z - 0,5 z - 0,8 z + 0,2

H ( z ) = 2,381

o que resulta numa transformada inversa causal dada por:

h[n] = [2,381(0,5)n -0,667(0,8)n - 1,7143(-0,2)n]u[n]

55

Você também pode gostar