Mestrado em Ciências da Fala e da Audição Conceitos de Sinais e Sistemas Guião Prático #3 Sistemas, Linearidade, Invariância Temporal e Resposta no tempo 1 Representação de Sistemas em MATLAB Em MATLAB podem definir-se novas funções para representar sistemas. • Implemente uma função em MATLAB simulando o efeito de um sistema que amplifique o sinal de entrada, multiplicando por um factor A. Experimente o sistema com uma sinusóide como entrada. • Modifique a função anterior prevendo o efeito de saturação. Valores superiores a um certo valor M AX não são amplificados. Considere que valores abaixo de −M AX sofrem o mesmo efeito. Experimente com sinusóides de amplitude inferior e superior a M AX. • Implemente uma função em MATLAB simulando o efeito de um sistema que não altera os valores positivos de um sinal e multiplica por −1 os valores negativos. Experimente o sistema com uma sinusóide como entrada. [Nota: este sistema designa-se geralmente de rectificador de onda completa]. 2 Propriedades de sistemas discretos Os sistemas discretos são muitas vezes caracterizados em termos de um conjunto de propriedades como: linearidade, invariância temporal, estabilidade, causalidade e invertibilidade. No(s) problema(s) seguinte(s), é dita a propriedade qu o sistema não satisfaz e as entradas que o demonstram. Para cada um, defina os vectores representando a entrada e a saída. Depois, efectue a sua representação gráfica, e com base nela, explique como essas figuras demonstram a não satisfação pelo sistema da propriedade. • O sistema y[n] = sin((π/2)x[n]) é não linear. Use os sinais x1=[1 0 0 ...] e x2=2* x1. 3 Convolução A combinação da linearidade com a invariância temporal permite caracterizar completamente um sistema pela sua resposta impulsional h[n], dado que a saída y[n] está relacionada com x[n] através da convolução, que no caso discreto consiste em : y[n] = ∞ X h[n − m]x[m]. m=−∞ Em MATLAB a função conv calcula a soma de convolução assumindo que x[n] e h[n] são sequências de duração finita. • Considere o sinal x[n] = 1 para n = 0, 1, 2, 3, 4, 5 e 0 para todos os outros valores. Calcule y[n] = x[n] ∗ h[n] [Nota: neste caso ∗ representa a convolução e não a multiplicação em MATLAB.] Apresente os resultados usando a função stem. Tente graficamente e com base na definição da convolução verificar o resultado obtido. c António J S Teixeira, 2004 1 Mestrado em Ciências da Fala e da Audição Conceitos de Sinais e Sistemas • Considere o mesmo sinal x[n] da alínea anterior e h[n] = n para n = 0, 1, 2, 3, 4, 5 e 0 para todos os outros valores. Calcule a convolução de y[n] = x[n] ∗ h[n] [Nota: neste caso ∗ representa a convolução e não a multiplicação em MATLAB.] Apresente os resultados usando a função stem. Tente graficamente e com base na definição da convolução verificar o resultado obtido. 4 O comando filter O comando filter permite obter a saída de sistemas causais, lineares e invariantes no tempo para uma dada entrada quando o sistema é especificado por uma equação diferença linear de coeficientes constantes. Por exemplo: para o sistema descrito pela equação diferença y[n]+2y[n−1] = x[n]−3x[n−1], poderá obter-se a saída, y, fazendo a=[1 2], os coeficientes que multiplicam por y, b=[1 -3], os coeficientes relativos a x[n] e x[n − 1] (por esta ordem), e, finalmente y=filter(b,a,x). • Defina os vectores a1 e b1 para descrever o sistema causal, linear e invariante no tempo (LTI) especificado por y[n] = 0.5x[n] + x[n − 1] + 2x[n − 1]. • Defina os vectores a2 e b2 para descrever o sistema causal, linear e invariante no tempo (LTI) especificado por y[n] = 0.8y[n − 1] + 2x[n]. • Defina os vectores a3 e b3 para descrever o sistema causal, linear e invariante no tempo (LTI) especificado por y[n] − 0.8y[n − 1] = 2x[n]. • Para cada um dos três sistemas anteriores, use filter para obter a resposta y[n] ao sinal x=[1 2 3 4]. O resultado deve ser: y1= 0.5000 2.0000 5.5000 9.0000 y2= 2.0000 5.6000 10.4800 16.3840 y3= 0 2.0000 5.6000 10.4800 Nota: A função filter pode calcular a convolução fazendo-se b = h e a = 1, ou usando y=filter(h,1,x). Pode repetir, caso o tempo o permita, os exercícios anteriores em que se utilizou o comando conv. 5 Resposta Impulsional de alguns sistemas Considere o sinal x=[1 zeros(1,20)] - uma representação em MATLAB do sinal geralmente designado por impulso . A resposta, saída, de um sistema quando se coloca este sinal como entrada é a chamada resposta impulsional. • Obtenha o sinal à saída do sistema definido por z[n] = 0.5x[n] + 0.5x[n − 1]. • Obtenha o sinal à saída do sistema definido por z[n] = x[n] − x[n − 1] • Obtenha o sinal à saída do sistema definido por y[n] = 0.8y[n − 1] + 2x[n]. Para cada alínea tente responder às seguintes questões: Qual é a resposta impulsional deste sistema? Alguma relação com a definição do sistema? Os valores não nulos são em número finito ? c António J S Teixeira, 2004 2 Mestrado em Ciências da Fala e da Audição 6 Conceitos de Sinais e Sistemas Efeito de alguns sistemas no sinal de voz Grave um sinal de voz a 20000 amostras/segundo e defina um vector em MATLAB com as suas amostras (wavread). • Obtenha o sinal de voz depois de processado pelo sistema definido por z[n] = 0.5x[n] + 0.5x[n − 1]. • Obtenha o sinal de voz depois de processado pelo sistema definido por z[n] = 0.33x[n] + 0.33x[n − 1] + 0.33x[n − 2]. • Obtenha o sinal de voz depois de processado pelo sistema definido por z[n] = x[n] − x[n − 1], isto é a diferença entre uma amostra e a anterior. 7 Resposta a uma sinusóide Considere, a título de exemplo, a sinusóide e 10 Hz com duração de 2 segundos amostrada a 500 amostras por segundo. • Para o sistema definido por h=[0.5 -0.5], com a ajuda do comando conv obtenha quando se coloca na entrada a sinusóide. Quais as características do sinal que obteve na saída? O que se manteve? o que se alterou ? • Repita considerando um sistema com uma resposta mais “complicada” h=rand(1,10). Alguma alteração significativa às observações anteriores ? • Repita considerando um sistema em que a=[1 rand(1,3)] e b=rand(1,4). Neste caso tem de usar filter Alguma alteração significativa às observações anteriores ? Nota: deve repetir várias vezes a execução do código MATLAB que desenvolveu. Obterá resultados diferentes em cada execução. c António J S Teixeira, 2004 3