Você está na página 1de 8

Mestrado Integrado em Engenharia Electrotécnica e de Computadores

Aquisição e Processamento de Sinal


Edição 2017-2018

Familiarização com o Matlab / Octave


O software Matlab necessita de licenças para ser executado. Na Feup as licenças são
disponibilizadas através da rede informática e têm sido relatados problemas na sua utilização.
Os problemas surgem porque o servidor de licenças não está contactável ou porque o número
de utilizadores é superior ao número de licenças disponibilizadas pela Feup.

Como alternativa ao Matlab existem os softwares livres: GNU Octave, Scilab, Sage, FreeMat,
etc. Algumas alternativas, como é o caso do Octave, são muito semelhantes ao Matlab e
grande parte do código escrito para Matlab corre diretamente em Octave.

Apesar do Octave não possuir todas as funcionalidades do Matlab, possui as funcionalidades


usadas na Unidade Curricular de APS.

Assim para evitar problemas com as licenças, especialmente durante a prova final, os
estudantes são aconselhados a usar o Octave em detrimento do Matlab em APS.

O Octave pode ser instalado nas máquinas pessoais dos estudantes (Linux ou Windows)
através dos link: https://www.gnu.org/software/octave/ .

As packages do Octave são o equivalente das toolboxes no Matlab. Em APS são necessárias as
seguintes packages do Octave: signal, symbolic e control. Podem ser obtidas a partir do link:
https://octave.sourceforge.io/packages.php .

Salvo indicação em contrário, neste documento a partir deste ponto quando o Matlab é
referido está implícito que estão a ser referidos os dois softwares: Matlab e Octave.

Este guião não pretende ser um manual nem um tutorial para o Matlab. Já existem inúmeras
publicações em livros convencionais, em livros eletrónicos e na web.

Assim, com este guião pretende-se apenas orientar o estudante num primeiro contacto com o
Matlab, e indicar algumas das funções mais úteis à unidade curricular.

{cjr, raraujo, amc}@fe.up.pt APS 2ºsem (versão de 2018-01-29) Pág. 1/8


Este guião foi desenvolvido para o estudante o executar sozinho. Mas caso sinta alguma
dificuldade, não hesite em contactar os docentes da unidade curricular.

O Matlab está disponível na feup nas máquinas do Lab. I 103, na máquina ‘apps.fe.up.pt’ (via
Remote Desktop) e em diversas salas de informática.

Se possuir acesso à feup via VPN também pode usar a máquina ‘apps.fe.up.pt’ a partir de
qualquer máquina com acesso à internet.

Passo 1:

Crie uma diretoria (folder) de trabalho designada neste texto como %caminho%. Ex:
c:\grupos\G01\trabalho

Descarregue o conteúdo do ficheiro Lab1.zip para a diretoria que criou

Carregue o Matlab

No prompt do Matlab mude para a diretoria criada:

>> cd %caminho%

Ex: >> cd c:\grupos APS\G01\trabalho

Se o caminho conter espaços deve colocar o caminho entre apóstrofes:

Ex: >> cd 'c:\grupos APS\G 01\trabalho'

Verifique a diretoria onde está com o comando:

>> pwd

Consulte o conteúdo do ficheiro s1.m

Pode usar qualquer editor de texto, mas o editor do Matlab: File->Open->s1.m, tem
vantagens ao adaptar-se à sintaxe do Matlab.

Em alternativa pode fazer duplo click em s1.m que se o Matlab estiver corretamente
instalado, abre o ficheiro s1.m no editor.

Execute o script fazendo no prompt:

>> s1

Analise cuidadosamente o ficheiro, verificando o que cada instrução faz, recorrendo ao help do
Matlab sempre que for preciso. Com isto deve ficar com as noções básicas e mínimas que lhe
permitem trabalhar com o Matlab.

{cjr, raraujo, amc}@fe.up.pt APS 2ºsem (versão de 2018-01-29) Pág. 2/8


Passo 2:

Crie uma função (CustomRms.m) que receba como argumento um vetor e retorne o valor
eficaz do sinal associado a esse vetor:

𝑁−1
1
𝑋𝑟𝑚𝑠 = √ ∑ 𝑥[𝑘]2
𝑁
𝐾=0

Teste a função que criou com o script do ficheiro CustomRms_teste.m.

Justifique analiticamente os resultados obtidos para os valores Xrmsk k={1..5}. Notas: soma de
sinais de frequências múltiplas inteiras entre si; soma de sinais com componente DC; soma de
sinais de igual frequência e esfasamento diferente.

Leia a documentação do Matlab acerca da função rms. Compare os resultados da função que
escreveu com a função do Matlab.

Passo 3:

Leia a documentação do Matlab acerca da função conv.

Teste a função usando os seguintes pares:

 x[n]   [n]

a)  nota:  [n] (impulso unitário) x[n] = [1]
h[n]  [3, 2, 1]

 x[n]  [2, 2]

c) 
h[n]  [3, 2, 1]

 x[n]   nu[ n] 1 se n  k


c)  nota: u[n  k ]   ; x[n] = alfa.^(0:1:Nh-1);
h[n]  u[ n]  u[ n  N ] 0 se n  k
h[n]=ones(1,N-1)

 x[n]  u[n  20]  u[n  30]



d)   .nota: x[n] = [zeros(1,19),
 
j
h[n]   an , com a  0.95 e 3

ones(1,10)]; h[n] = real(a.^(0:1:Nh-1))

Para h[n] limite o comprimento Nh do vetor a vários valores (ex: 40, 50, 100) e compare os
resultados.

Faça na mesma figura os traçados temporais de x[n], h[n] e y[n].

{cjr, raraujo, amc}@fe.up.pt APS 2ºsem (versão de 2018-01-29) Pág. 3/8


Passo 4:

Crie uma função (CustomConv.m) que retorne a convolução entre dois sinais x[n] e h[n] de
acordo com a seguinte equação:


y[n]   x[k ] h[n  k ]
k 

As dimensões dos vetores x[n] (Nx) e h[n] (Nh) são arbitrárias.

Confirme (parcialmente) a função com os mesmos pares de entrada que usou no passo 3.

Passo 5:

Leia a documentação acerca da função xcorr.

A operação de correlação:


rxy [k ]   x[n] y[n  k ]
n

é muito semelhante à da convolução:


y[n]   x[k ] h[n  k ]
k 

mas, e o resultado das operações ? Terão alguma relação ? A correlação é comutativa ?

Crie os sinais: x[n]  u[n  20]  u[n  30] e y[n]  u[n 120]  u[n 130] com 200
amostras e calcule a correlação entre eles. Conclusões ?

Crie os sinais x[n] e y[n] com sinusoidais de igual frequência mas desfasadas e calcule a
correlação entre eles. Conclusões ?

Passo 6:

Leia a documentação do Matlab acerca da função filter.

Use a função filter para determinar a resposta impulsional () do sistema definido pela Equação
às Diferenças com os valores:

a = [ 1 0.5 0.9 -0.3] e b = [ 5 6 -4 3 2]

Leia a documentação acerca da função impz

Compare os resultados

Leia a documentação acerca da função stepz e determine a resposta ao degrau do sistema.

{cjr, raraujo, amc}@fe.up.pt APS 2ºsem (versão de 2018-01-29) Pág. 4/8


Passo 7:

Crie uma função (CustomFilter.m) que determine a resposta de um sistema recorrendo a sua
Equação às Diferenças, conforme indicado na equação seguinte:

Na N
b
y[n]   y[n  k ]   k x[n  k ]
ak b
a
k 1 0
a
k 0 0

admitindo que o sistema parte do repouso e que a[n] e b[n] são vetores de dimensão Na e Nb
respetivamente.

Confirme (parcialmente) a função com os seguintes valores:

 x[n]   [n]

 ,

 y[ n ]  a y[ n  1]  x[ n ]

comparando os resultados das funções CustomFilter e filter.

Passo 8:

Considere o sistema definido pela resposta impulsional:

4
h[n]  15   [n  k ]
k 0

Determine os valores a e b que definem este sistema na representação recorrendo a Equação


às Diferenças.

Confirme o resultado recalculando a resposta impulsional.

Leia a documentação acerca da função freqz e determine a resposta em frequência do


sistema.

Represente o módulo e a fase da resposta em frequência no mesmo gráfico mas em eixos


separados.

Passo 9:

No passo 8 foi-lhe apresentada a função freqz que determina a resposta em frequência de um


sistema LIT representado a partir da Equação às Diferenças indicada pelos vetores a e b
segundo a equação seguinte:

Na N
b
y[n]   y[n  k ]   k x[n  k ]
ak b
a
k 1 0
a
k 0 0

Crie uma função (CustomFreqzImp.m) que determine a resposta em frequência de um sistema


LIT representado a partir da sua resposta impulsional indicada pelo vetor h:

{cjr, raraujo, amc}@fe.up.pt APS 2ºsem (versão de 2018-01-29) Pág. 5/8


h  [h[0], h[1],..., h[ N 1]]

A função CustomFreqzImp.m deve receber como entrada o vetor h e um número inteiro Np.

Deve fornecer na saída dois vetores H e w de comprimento Np. O vetor w representa Np


frequências igualmente espaçadas entre 0 e π. O vetor H representa a resposta em frequência
do sistema LIT nas frequêcnias indicadas por w.

Use a definição da transformada de fourier para implementar a função:

 

X e j   x[n] e j n
n 

Valide (parcialmente) a sua função com os resultados do passo 7 (h=[1, 1, 1, 1, 1]/5).

A função freqz foi concebida para determinar a resposta em frequência de sistemas LIT. Como
usar a função para obter a transformada de fourier de um sinal arbitrário (desde que tenha
dimensão finita como é óbvio) ?

Passo 10:

Crie o sinal sinusoidal s1:

Np=20;
n=0:1:Np-1;
s1=[sin(2*pi/Np*n)];

obtenha a sua transformada de fourier h1 e represente graficamente o valor absoluto:


h1=freqz(s1); plot(abs(h1)).

Então mas o que se passa ? O sinal s1 tem apenas uma componente espectral: um seno.
Porque é que h1 não tem apenas uma barra, indicando apenas uma frequência ?

Para o ajudar a interpretar este facto, obtenha a transformada de fourier h2 do sinal s2:

s2=[zeros(1,50), sin(2*pi/Np*n), zeros(1,10)];


e compare os valores de h1 e h2. São iguais ! Porquê ?

Passo 11:

A transformada discreta de fourier (DFT), assume que o sinal em análise representa uma janela
temporal de um sinal que se repete indefinidamente.

X[n]
Isto é obviamente uma abordagem muito grosseira e simplista da DFT, mas serve para a sua
demonstração na análise espectral de sinais. Nas aulas teóricas este assunto será abordado de
forma mais formal e rigorosa.

{cjr, raraujo, amc}@fe.up.pt APS 2ºsem (versão de 2018-01-29) Pág. 6/8


A DFT é definida por:

j2 n k 
N 1 
X [k ]   x[n] e N , k  0,1, 2,..., N  1
n 0

Note que ao contrário de X e  j  que é uma função contínua em ω, X [k ] é um sinal

discreto em k.

Em matlab a DFT é obtida com a função FFT.

Leia a documentação do matlab acerca da função FFT. Aplique a função FFT aos sinais s1 e s2 e
compare os resultados com os obtidos no passo 10.

Passo 12:

Crie uma função (CustomDFT.m) que determine a transformada discreta de fourier (DFT) de
um sinal. Deve receber como entrada o sinal x[n] de dimensão arbitrária N, e fornecer na saída
X[k] de dimensão N. Siga a definição da DFT não se preocupando com otimizações
computacionais.

Passo 13:

Aplique a função CustomDFT.m aos sinais s1 e s2 indicados no passo 10. Ao representar os


resultados graficamente não se esqueça de que estes são números complexos.

Passo 14:

Aplique a FFT nos seguintes sinais:

Np=64;
n=0:1:Np-1;
s1=ones(1,Np);
s2=sqrt(2)*sin( 2*pi/Np*n);
s3=sqrt(2)*sin( 3*2*pi/Np*n);
s4=sqrt(2)*sin( 9*2*pi/Np*n);
s5=sqrt(2)*sin(20*2*pi/Np*n);
s6=s1+s2+s3+s4+s5;
s7=sqrt(2)*sin(2*2*pi/Np*n+90*pi/180);
s8=sqrt(2)*sin(2.5*2*pi/Np*n);
s9=[ones(1,Np/2), zeros(1,Np/2)];
s10=sqrt(2)*sin(32*2*pi/Np*n);
s11=sqrt(2)*sin(40*2*pi/Np*n);
s12=sqrt(2)*sin(63*2*pi/Np*n);

Nota1: represente os resultados num gráfico com três eixos: um para o sinal, outro para o
valor absoluto da fft e outro para a fase da fft.

Nota4: Leia a documentação e use a função bar.

Nota3: Leia a documentação e use a função fftshift.

{cjr, raraujo, amc}@fe.up.pt APS 2ºsem (versão de 2018-01-29) Pág. 7/8


Nota4: Com e sem a função fftshift coloque um valor adequado para legendar o eixo
horizontal.

Localize e verifique as componentes espectrais dos vários sinais. O que se passa com a
amplitude ? Supostamente s1 tem um valor eficaz igual à unidade.

Mas o que é que se passa com os sinais s10, s11 e s12 ? Faça uma pesquisa sobre o tema
aliasing.

{cjr, raraujo, amc}@fe.up.pt APS 2ºsem (versão de 2018-01-29) Pág. 8/8

Você também pode gostar