Sistemas e Sinais Guião das Aulas Práticas António Navarro João Manuel Rodrigues Departamento de Electrónica e Telecomunicações Universidade de Aveiro 2005-2006 2 Aula 1 Sinais (Unidimensionais) Resumo: - Familiarização com o ambiente de trabalho. - Manipulações simples de sinais digitais unidimensionais. Este guião é um trabalho em progresso e, por enquanto, bastante incompleto. Na página das aulas práticas de SS1 poderá encontrar a última versão deste guião2 , bem como outras informações e dados referentes às aulas práticas de Sistemas e Sinais. Se detectar algum erro ou tiver alguma sugestão, por favor informe os autores. Exercı́cio 1.1 Copie o conteúdo do directório aula13 para a sua área de trabalho. Localize o ficheiro santos.wav e ouça-o usando uma aplicação apropriada. Observe a página de propriedades desse ficheiro e registe os parâmetros fundamentais do sinal: frequência de amostragem, número de canais, número de bits por amostra, duração. A partir destes valores, determine o número de bytes ocupados pela informação áudio e compare-o com a dimensão do ficheiro. (Além da informação áudio, os ficheiros WAV têm um cabeçalho que ocupa algumas dezenas de bytes.) Exercı́cio 1.2 No Matlab, pode ler o ficheiro santos.wav para uma matriz, usando o comando [x,fa,nb] = wavread(’santos.wav’); onde x é o vector ou matriz que fica com as amostras do sinal, fa indica a frequência de amostragem e nb indica o número de bits de resolução de cada amostra. Com o comando 1 http://www.ieeta.pt/˜jmr/ss/ http://www.ieeta.pt/˜jmr/ss/guiao.pdf 3 ftp://www.ieeta.pt/˜jmr/ss/aula1 2 1 sound(x,fa,nb); pode ouvir o sinal x através da placa de som, a um ritmo de fa amostras por segundo e com resolução de nb bits. Há vários pormenores a ter em conta quando se usa esta função: por um lado, o sinal x deve ter valores pertencentes ao intervalo [−1, +1[, caso contrário será ouvido com distorção; por outro lado, não é garantido que a placa de som e/ou o sistema operativo suportem frequências de amostragem ou resoluções arbitrárias. 4 Usando comandos do Matlab, A. Determine o número de canais desse sinal (ou seja, se é mono- ou estereofónico) e o número de amostras por canal. B. Calcule a duração do sinal. C. Determine o número exacto de bytes ocupados pelas amostras do sinal. D. Quantos minutos de áudio neste formato poderia gravar num CD (de 700 MB)? E num DVD (de 4.5 GB)? E. Determine os valores máximo e mı́nimo do sinal em cada canal. F. Multiplique o sinal por 1/10 e ouça o resultado. Que diferença notou? G. Multiplique o sinal por 10 e ouça o resultado. Que aconteceu? Exercı́cio 1.3 Crie uma versão monofónica fazendo a média dos dois canais do sinal x e grave o resultado usando o comando wavwrite(y,fa,nb, ’santos-mono.wav’); sendo y o sinal monofónico criado. Verifique as propriedades do novo ficheiro. Exercı́cio 1.4 Traçe um gráfico (das primeiras 1000 amostras) do sinal x com o eixo do tempo marcado em segundos. Explore o gráfico, ampliando diversas zonas com o comando axis ou usando as possibilidades de zoom fornecidas pelo Matlab. Sugestão: crie primeiro um vector t com comprimento igual ao do sinal e contendo os valores dos instantes de amostragem correspondentes. 4 Algumas frequências de amostragem mais usualmente suportadas são: 44100 amostras/s, 8000 amostras/s, e outras relacionadas com estas como 22050, 11025, 16000, 32000 e 48000 amostras/s. Resoluções de 16 ou 8 bits/amostra são usuais, algumas placas mais recentes permitem até 24 bits/amostra. 2 Exercı́cio 1.5 A partir do sinal lido anteriormente: A. Crie um novo sinal composto apenas pelas amostras de ı́ndice par. B. Ouça o novo sinal, mantendo a frequência de amostragem e a resolução. Que aconteceu ao sinal? (No que diz respeito à duração e tonalidade.) C. Ouça-o novamente, especificando agora um ritmo de amostagem de metade do original. Exercı́cio 1.6 Apesar de as amostras dos sinais áudio serem armazenadas no Matlab como números reais entre −1 e +1, no ficheiro original são de facto armazenadas como números inteiros com nb dı́gitos binários. Ao ler esses números, o comando wavread do Matlab divide-os pela máxima amplitude que pode ser codificada com nb bits, ou seja 2nb−1 (para números com sinal). Assim, as amplitudes do sinal ficam normalizadas: um sinal de amplitude máxima terá sempre amplitude 1 no Matlab, independentemente da resolução usada na gravação do sinal. Execute o comando x(1:20,:) para observar os valores das primeiras 20 linhas da matriz x. Multiplique por 215 = 32768 e verifique que os valores resultantes são inteiros. Exercı́cio 1.7 O ficheiro santosC.mp3 é uma versão do sinal santos.wav, codificado no formato MPEGLayer III com um débito de 128 kbit/s.5 A respectiva descodificação produziu o ficheiro santosD.wav. A. Leia o sinal decodificado e compare-o com o original. B. Determine o desfazamento (atraso) entre os dois sinais. (Pode fazê-lo “manualmente”, por tentativa e erro e recorrendo a gráficos. Como desafio, pense como poderia automatizar este processo e escreva uma função que o faça.) C. Calcule e ouça a diferença dos dois sinais depois de compensar o seu desfazamento. D. Determine a potência (energia média por amostra) do sinal original e do sinal diferença, e ache a relação sinal-ruı́do (SNR), expressando-a em dB (decibel).6 5 Foi usado o codificador LAME, versão 3.96.1, com a opção -h. O decibel é uma unidade de medida logarı́tmica de uma relação de potências. Assim, se dois sinais têm potências P1 e P2 , a sua relação de potências é de 10 log10 (P1 /P2 ) dB. 6 3 4 Aula 2 Sinais (Bidimensionais) Resumo: - Familiarização com o ambiente de trabalho. - Manipulações simples de sinais digitais bidimensionais (imagens). Exercı́cio 2.1 Copie o conteúdo do directório aula21 para a sua área de trabalho. Localize o ficheiro Baboon_gray.tif e Baboon_RGB.tif e visualize-os usando uma aplicação apropriada. Observe a página de propriedades desses ficheiros e registe os parâmetros fundamentais das imagens: altura, largura e número de bits por pixel. A partir destes valores, determine o número de bytes ocupados por cada imagem e compare-os com as dimensões dos respectivos ficheiros. (Além da informação de imagem, os ficheiros TIFF têm um cabeçalho que ocupa alguns bytes.) Exercı́cio 2.2 No Matlab, pode ler os ficheiros das imagens usando o comando [X,MAP] = imread(’FILENAME’, ’FMT’); e pode visualizá-las com o comando image(X); Usando comandos do Matlab, A. Determine o número exacto de bytes ocupados por cada imagem. Poderá necessitar de obter informações com o comando imfinfo. 1 ftp://www.ieeta.pt/˜jmr/ss/aula2 5 B. Num CD (de 700 MB), quantas imagens com a dimensão e resolução de Baboon_RGB.tif poderia gravar? E num DVD (de 4.5 GB)? C. Quantas imagens destas poderão ser transmitidas, por segundo, através de uma ligação ADSL de 2 Mbit/s. D. Determine os valores máximo e mı́nimo de cada imagem. E. Multiplique cada imagem por 1/2 e observe o resultado. Que diferença notou? F. Multiplique por 8 e observe o resultado. Detecta saturação? E outros artefactos? Exercı́cio 2.3 Crie uma função Y = rgb2gray(RGB); que converta uma imagem a cores (RGB) para uma imagem em nı́veis de cinzento Y. Os valores de luminância podem ser obtidos por combinação linear das componentes (R, G, B) pela expressão Y = 0.299R + 0.587G + 0.114B. Experimente converter a imagem Baboon_RGB.tif e compare o resultado com a imagem Baboon_gray.tif previamente visualizada. Exercı́cio 2.4 A. Converta a imagem a cores RGB para YUV e separe as componentes em três matrizes Y, U e V. B. Reduza por 2 a resolução vertical e horizontal das componentes U e V. C. Reponha a resolução original, repetindo os valores das amostras, e reconverta para RGB. Exercı́cio 2.5 Traçe o histograma da imagem I. 6 Aula 3 Série/Transformada de Fourier Exercı́cio 3.1 Considere uma sequência [xn ] = [1, 2, −2, 4, 6, 4, 5, 4] e a expressão da DFT dada por N −1 2π 1 X Xk = √ xn e−j N kn , N n=0 onde N é o número de elementos da sequência. A. Usando o Matlab, determine Xk . B. Visualize a parte real, imaginária, módulo e fase de Xk e tire conclusões sobre as simetrias. C. Considerando as simetrias de Xk , qual é o número mı́nimo de coeficientes que permite recuperar Xk completamente. Identifique esses coeficientes. D. Generalizando, considerando xn real de comprimento N par e as simetrias de Xk , deduza o número mı́nimo de coeficientes em função de N que permite determinar xn completamente. E. Elimine (colocando-os a zero) os coeficientes de Xk de menor energia, isto é, de valores |Xk |2 < 5. Determine a taxa de compressão obtida e a perda de qualidade. F. Elimine os coeficientes de menor energia que conduzem a uma perda de qualidade não superior a 20%. Determine a taxa de compressão obtida. G. Elimine os coeficientes de menor energia que conduzem a uma compressão de pelo menos 2 vezes. Determine a perda de qualidade. Exercı́cio 3.2 Considere uma sequência [xn ] = [1, 2, −2, 4, 6, 4, 5, 4, −1]. Repita as alı́neas do exercı́cio anterior, reparando que agora N é impar. 7 Exercı́cio 3.3 Considerando uma frequência de amostragem de 8000 Hz, gere sequências de 4000 amostras dos sinais: x(t) = cos(20π t) w(t) = cos(22π t) y(t) = 0.3 ej 40π t +0.5 se x(t) ≥ 0.1 z(t) = −0.5 se x(t) < 0.1 (3.1) (3.2) (3.3) (3.4) A. Trace gráficos destes sinais periódicos. (Represente o sinal complexo com duas linhas sobrepostas.) B. Indique as suas frequências e perı́odos. C. Aplique a DFT a cada um dos sinais e observe o resultado em módulo/fase ou parte real/parte imaginária. Identifique os ı́ndices das componentes fundamentais e relacione-as com as frequências dos sinais. Exercı́cio 3.4 A função dtmfe fornecida na pasta aula31 permite gerar sequências de tons multifrequência (DTMF) usados em sinalização telefónica. Experimente, por exemplo, sound(dtmfe(’123456789’),8000,16) . Isole cada um dos algarismos e analise-os com uma transformada discreta de Fourier (DFT) de forma a identificar as frequências das suas componentes sinusoidais com erro inferior a 20 Hz. Exercı́cio 3.5 Escreva uma função que permita descodificar sinais DTMF usando análise de Fourier e aplique essa função para tentar descodificar os sinais dtmf pin.wav 2 e dtmf santos.wav 3 . Sugestão: aplique a DFT a trechos sucessivos do sinal e avalie a energia em torno das oito frequências usadas nos tons DTMF. (Falta indicar as especificações dos sinais DTMF: frequências, durações, amplitudes e respectivas tolerâncias. Para já, pode procurar na WEB.) 1 ftp://www.ieeta.pt/˜jmr/ss/aula3 ftp://www.ieeta.pt/˜jmr/ss/aula3/dtmf pin.wav 3 ftp://www.ieeta.pt/˜jmr/ss/aula3/dtmf santos.wav 2 8 Aula 4 Sistemas Lineares e Invariantes no Tempo Alguns sinais elementares úteis para a análise de sistemas. 1 se n = 0 . O impulso unitário: δ(n) = 0 se n = 6 0 1 se n ≥ 0 O degrau unitário: u(n) = . 0 se n < 0 Exercı́cio 4.1 Considere o sistema descrito pela equação diferença y(n) = x(n) − 0.9x(n − 4). A. Represente esquematicamente este sistema. B. Determine manualmente, recorrendo a uma tabela, as primeiras 10 amostras (para n = 0, 1, 2, . . . , 9) da resposta impulsional do sistema. C. Determine ainda as primeiras amostras das respostas aos sinais x(n) = u(n − 2) e s(n) = cos(πn/2) u(n). D. Repita os exercı́cios anteriores no Matlab, aproveitando para traçar gráficos dos sinais. Sugestão: pode usar a função filter para implementar qualquer sistema causal descrito por uma equação diferença linear. Para sistemas com resposta impulsional finita (FIR) também pode usar a operação de convolução (conv). Exercı́cio 4.2 Um dado sistema digital calcula em cada instante a média aritmética das cinco últimas amostras que recebeu. A. Traçe um diagrama esquemático desse sistema. B. Escreva uma equação diferença que descreva o sistema. 9 C. Calcule a resposta do sistema aos sinais: x1 (n) = 2δ(n)+δ(n−10), x2 (n) = δ(n−12), x3 (n) = x1 (n) + x2 (n). D. Observe e registe a amplitude da resposta em regime estacionário do sistema a sinusóides da forma x(n) = cos(ωn), para os seguintes valores de frequência angular: ω = 0, 0.1π, 0.2π, . . . , 0.9π, π. Calcule a resposta em frequência do sistema usando freqz e confirme os resultados que mediu. E. Aplique este sistema a um sinal de áudio e ouça o resultado. F. Que quantidade de memória e quantas operações aritméticas (adições e multiplicações) precisa para calcular cada amostra do sinal de saı́da? Exercı́cio 4.3 Considere o sistema descrito pela equação diferença recursiva: y(n) = 0.9y(n − 1) + 0.1x(n). Y (z) A. Escreva a função de transferência do sistema H(z) = X(z) . Ache os seus zeros e pólos e trace-os num diagrama (use as funções roots e/ou zplane). B. Determine a resposta em frequência do sistema às frequências ω = 0, 0.25π, 0.5π. Calcule a partir da função de transferência (pode usar a função polyval) e confirme com freqz. C. Determine e faça gráficos da resposta do sistema aos sinais: x1 (n) = 3 cos(0.02πn + 0.1π) + r(n), x2 (n) = u(n − 10) − 2u(n − 50) + u(n − 90) + 0.1r(n), onde r(n) representa um ruı́do gaussiano de média nula e variância unitária que pode ser gerado no Matlab com a função randn. Exercı́cio 4.4 Considere um sistema descrito por (z − 1)(z + 1) 1 − a2 · 2 H(z) = 2 z − (2a cos ω)z + a2 com a e ω reais e 0 < a < 1. A. Escreva uma equação diferença deste sistema. 10 B. Ache os seus pólos e zeros. C. Para a = 0.9 e ω = 0.2π, trace a resposta em frequência do sistema e verifique que este se comporta como um filtro passa-banda. Determine a frequência central da banda passante e a largura de banda a 3 dB (a largura entre os pontos a cerca de 70% da amplitude máxima). D. Repita a alı́nea anterior variando ω e a. E. Ache ω e a para implementar um filtro que isole as componentes de frequências em torno de 770 ± 15 Hz de um sinal amostrado a 8000 amostras por segundo. Aplique este filtro ao sinal dtmf pin.wav 1 e/ou a outros sinais gerados com a função dtmfe. F. Estude a possibilidade de usar um banco de filtros deste tipo para implementar um detector de sinais DTMF. Exercı́cio 4.5 O sinal ecgr, que pode carregar (load) do ficheiro ecgr.mat2 , contém um registo de um electrocardiograma (ECG) amostrado à taxa de 500 amostras por segundo. Esse sinal encontra-se corrompido por uma forte interferência sinusoidal que se pretende eliminar. A. Usando a DFT, identifique a frequência da interferência, F0 em Hz e a correspondente frequência angular normalizada ω0 em rad/amostra. B. Determine o valor do coeficiente C0 ∈ R tal que a função de transferência H(z) = 1 + C0 z −1 +z −2 z 2 + C0 z + 1 = z2 tenha ganho zero à frequência ω0 . C. Verifique o resultado, traçando a resposta em frequência do sistema H(z). D. Determine a resposta deste sistema ao sinal ecgr. Conseguiu eliminar a interferência? Para comparação, pode encontrar uma versão não corrompida do sinal no ficheiro ecg.mat3 . Exercı́cio 4.6 Considere os sistemas 1 1 + z −1 F (z) = 0.3 1 − 0.4z −1 ftp://www.ieeta.pt/˜jmr/ss/aula3/dtmf pin.wav ftp://www.ieeta.pt/˜jmr/ss/sinais/ecgr.mat 3 ftp://www.ieeta.pt/˜jmr/ss/sinais/ecg.mat 2 11 e G(z) = 1 1 + 2z −1 + z −2 · . 8 1 − z −1 + 0.5z −2 A. Determine a resposta em frequência de cada um dos sistemas bem como da sua combinação em cascata, H(z) = F (z)G(z), e compare-as. B. Verifique experimentalmente que a resposta do sistema a um dado sinal x(n) pode obter-se por aplicação do sistema H ou por aplicação sucessiva dos sistemas F e G. Exercı́cio 4.7 O fenómeno do eco, que ocorre quando uma onda sonora atinge o receptor depois de reflectida por exemplo numa parede distante, pode ser modelado simplesmente por um atraso e uma atenuação dependentes da distância. (INCOMPLETO.) 12