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

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)

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:

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.

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

c:\grupos\G01\trabalho

Ex:

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.

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

=√ ∑[] 2

−1

=0

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

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.

Justifique analiticamente os resultados obtidos para os valores Xrms k k={1

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:

a)

c)

x [ n ] [ n ] h n

[

]

[3,

2, 1]

x n

[ ] [2, 2] ]

[

h n

[3, 2, 1]

nota: [ n ] (impulso unitário) x[n]

c)

x

h

[

[

n

n

]

]

n

u n

[

u n

[

]

]

u

[ n N

]

h[n]=ones(1,N-1)

nota:

u n k

[

]

1 se n k

se n k

  0

= [1]

; x[n] = alfa.^(0:1:Nh-1);

 

d)

x n

[

h n

[

]

]

u n

[



a

n

20]

u n

[

30]

, com a

0.95

e

j

3

.nota: x[n] = [zeros(1,19),

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

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

]



k 

x [ k ] h [ n k

]

As dimensões dos vetores x[n] (N x ) e h[n] (N h ) 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:

r

xy

[ k ]



n 

x n y n k

[

]

[

]

é muito semelhante à da convolução:

[

y n

]



k 

x k h n k

[

]

[

]

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

Crie os sinais:

amostras e calcule a correlação entre eles. Conclusões ?

x[ n ] u[ n 20] u[ n 30] e y[ n ] u[ n 120] u[ n 130] com 200

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.

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:

y

[ n

]



Na

1

k

a k

a 0

y n k

[

]

Nb

0

k

b k

a 0

x [

n k

]

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

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

 

x n

[

[

y n a y n

]

]

[

n

]

[

1] x [ n ]

,

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

Passo 8:

Considere o sistema definido pela resposta impulsional:

h [ n ]

1

5

4

0

k

[

n k

]

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:

[ ]

y n



Na

k

1

a

k

a

0

y n k

[

]

Nb

0

k

b

k

a

0

x n k

[

]

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:

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

n





x [ n ] e

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

janela temporal de um sinal que se repete indefinidamente. X[n] Isto é obviamente uma abordagem muito
janela temporal de um sinal que se repete indefinidamente. X[n] Isto é obviamente uma abordagem muito

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.

A DFT é definida por:

X k

[

]

N 1

n 0

]

[

x n e

j 2 n k

N

,

k

0,1, 2,

, N

1

Note que ao contrário de

discreto em k.

X e

j

que é uma função contínua em ω,

X

[ k ]

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

é um sinal

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(

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);

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.

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.