EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 Aula 2 - Sinais de tempo discreto Operações com sequências Bibliografia OPPENHEIM, A.V.; WILLSKY, A. S. Sinais e Sistemas, 2a edição, Pearson, 2010. ISBN 9788576055044. Páginas 5-20. HAYKIN, S. S.; VAN VEEN, B. Sinais e sistemas, Bookman, 2001. ISBN 8573077417. Páginas 40-46 e 71-76. 1.4 Sinais de tempo discreto Um sinal de tempo discreto está definido apenas em instantes isolados de tempo. Consequentemente, um sinal de tempo discreto pode ser descrito por uma sequência de números. Nesta aula, aprenderemos um pouco mais sobre a representação deste tipo de sinal e como realizar operações com eles. Os sinais de tempo discreto são representados pela notação x[n] em que n só está definido para números inteiros. Cada um dos elementos do sinal x é chamado de amostra. Vejamos alguns exemplos: 2 (a) x[ n] = n , − 6 ≤ n ≤ 6 Este sinal é constituído das seguintes amostras x n = {36, 25,16, 9, 4,1, 0,1, 4, 9,16, 25, 36} . A figura a seguir mostra um gráfico des- te sinal: stem(-6:6, (-6:6).^2); 1 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 A segunda amostra deste sinal é x[−5] = 25 . Este sinal tem 6 − (−6) + 1 = 13 amostras. (b) y[n ] = (0, 9)n , n ∈ ℕ As amostras deste sinal são y[n ] = {1; 0, 9; 0, 81; 0, 729; 0, 6561;...} . A figura a seguir mostra as 50 primeiras amostras deste sinal. Repare que este é um sinal com infinitas amostras e, por exemplo, y[0] = 1 . stem (0:50, (0.9).^(0:50)) • Os exemplos acima mostram que um sinal de tempo discreto pode ser uma sequência de comprimento finito ou infinito. Além disso, um sinal de comprimento finito definido no intervalo N1 ≤ n ≤ N 2 tem comprimento ou duração: N = N 2−N1 + 1 . • Dentre as sequências de comprimento infinito, destacamos as sequências chamadas causais definidas somente para n ≥ 0 e as sequências anticausais definidas para n < 0 . Por exemplo, a sequência do exemplo anterior é causal. Exercício 1. (CARLSON, 1998; p. 44) Um sinal é chamado de simplesmente definido (“simply-defined”) se ele é representado por uma única equação e é chamado 2 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 de definido por partes (“piecewise defined”) se é representado por um conjunto de equações cada uma válida num intervalo de tempo diferente. Sendo assim, esboce os sinais de tempo discreto definidos pelas seguintes equações. Indique também se eles são definidos por partes. (a) x[n] = e 0, 25n , − ∞ ≤ n ≤ ∞ n − 1, n < 3 x[n ] = − 3, 3 ≤ n < 6 (b) n 5 − , n ≥ 6 3 (n + 1) (c) x[n] = 2 , n 2 − 1, n ≥ 0 (d) x[n] = 0, n < 0 n +1 −∞≤ n≤ ∞ 1 (1 + n ), n ≥ 0 1 (1 − n ) , n < 0 (e) x[n] = 1.5 Operações com sequências • Sistemas de tempo discreto são entidades que transformam uma ou mais sequências de entrada em uma ou mais sequências de saída. A figura a seguir mostra esquematicamente um sistema de tempo discreto cuja entrada é a sequência x[n] e a saída é a sequência y[n] . • O conceito de sistemas é um dos mais importantes nos cursos de Engenharia e é explorado em várias disciplinas. Aqui, nos preocuparemos principalmente com a parte operacional de sistemas de tempo discreto, ou, em outras palavras, em como eles operam. 3 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 • Quase todo sistema de tempo discreto pode ser decomposto em um conjunto de operações básicas entre sequências que serão estudadas a seguir. 1.5.1 Produto • A operação produto entre duas sequências x[n] e y[n] , representada por w1 [n] = x[n] ⋅ y[n] , consiste em multiplicar, para cada valor de n as amostras das sequências x[n] e y[n] . • Esquematicamente, esta operação é representada pelo símbolo mostrado a seguir. Esta operação também chamada de modulação na área de telecomunicações. 1.5.2 Soma • A operação soma entre duas sequências x[n] e y[n] , representada por w2 [n] = x[n] + y[n] , consiste em somar, para cada valor de n as amostras das se- quências x[n] e y[n] . • Esquematicamente, esta operação é representada pelo símbolo mostrado a seguir que é chamado de somador. 4 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 1.5.3 Multiplicação por escalar • Nesta operação, um novo sinal é gerado multiplicando-se cada amostra da sequência x[n] pelo escalar A : w3 [n] = Ax[n] . • Esquematicamente temos: • Esta operação também é chamada de ganho. Exercício 2. (MITRA, 2001; p. 106) Considere as seguintes sequências de comprimento 7 definidas para − 3 ≤ n ≤ 3 : x[n] = {3; − 2; 0; 1; 4; 5; 2} y[n] = {0; 7; 1; − 3; 4; 9; − 2} . w[n] = {− 5; 4; 3; 6; − 5; 0; 1} Determine as seguintes sequências: (a) u[n] = x[n] + y[n] (b) v[n] = x[n] + w[n] (c) s[n] = y[n] − w[n] (d) r [n] = 4,5 y[n] . 1.5.4 Deslocamento no tempo • A última operação de que trataremos por enquanto é o deslocamento no tempo (“time-shifting”). A relação entre a saída e a entrada nesta operação é w4 [n] = x[n − N ] em que N é um inteiro. Se N > 0 esta é uma operação de atraso e se N < 0 esta é uma operação de avanço. O dispositivo que implementa a operação de atraso de uma amostra é chamado de atraso unitário e seu símbolo é mostrado a seguir. 5 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 • A explicação do por que deste símbolo será dada mais tarde quando for estudado Transformadas z. Exercícios 3. Um sinal de tempo discreto x[n] , definido para todo n inteiro é dado por x[n] = 2n + 1 . Ele é passado por um atrasador, obtendo-se o sinal w[n] = x[n − 1] . Descreva as amostras para 0 ≤ n ≤ 10 dos sinais x[n] e w[n] e escreva uma fórmula fechada para as amostras do sinal w[n] . 4. Desenhe um diagrama de blocos que programe a seguinte operação sobre o sinal x[n] : y[n] = x[n] + 0,5 x[n − 1] + 0,75 x[n − 2] 5. (MITRA, 2001; p. 47) Descreva uma formula para o sinal y[n] obtido do filtro mostrado em diagrama de blocos na figura a seguir: 6 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 L1 L1.1 Introdução à Geração de Sinais no Matlab® Introdução Em Processamento Digital de Sinais (PDS) será estudado uma série de técnicas como amostragem, transformadas discretas (TFTD, TFD, Transformada Z) e algoritmos que implementam essas transformadas (FFT). Estas técnicas de PDS estão presentes hoje em dia no desenvolvimento de qualquer aplicação que envolva transmissão ou processamento digital de dados e, portanto seu conhecimento é crucial a um Engenheiro. As figuras a seguir ilustram aplicações dessas técnicas em recepção de áudio digital. Digital Audio Broadcast O Matlab® é uma ferramenta muito útil no estudo de problemas e no desenvolvimento de projetos em Engenharia sendo utilizado em universidades e empresas ao redor do mundo. O principal motivo deste sucesso é a utilização maciça de vetores e matrizes para representar dados de uma forma simples (Matlab® = Matrix Laboratory). Esta forma de representação praticamente elimina a necessidade de utilização de laços FOR ou WHILE simplificando e acelerando muito os programas. O objetivo desta atividade é rever alguns conceitos básicos de programação em Matlab®. Durante o curso veremos muitos outros detalhes técnicos. 7 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 Lembre-se: sempre que você ficar na dúvida sobre a utilização de um comando, a função <help comando> pode lhe ajudar. L1.2 Gerando vetores L1.2.1 O operador : O operador : é utilizado para gerar e acessar elementos de um vetor. Vetor = valor inicial: passo: valor final Quando o passo é unitário, ele pode ser omitido. • Exemplos de utilização A. gerar um vetor x com os números inteiros de zero a cinco >> x = 0:5 x = 0 1 2 3 4 5 b. gerar um vetor y indo de 0 a 1 com passo de 0.1. >> y = 0:0.1:1 y = 0 0.1000 0.6000 0.7000 0.8000 0.2000 0.3000 0.9000 0.4000 0.5000 1.0000 c. mostrar o segundo elemento do vetor x >> x(2) ans = 1 Exercício 1. Gerar um vetor x de números pares de 0 a 50. Comandos: L1.2.2 A função linspace A função linspace é uma forma prática de se gerar vetores quando sabemos quantos pontos ele deve ter. Vetor = linspace (valor inicial, valor final, no. de pontos) 8 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 • Exemplos de utilização A. Gere um vetor de 1000 pontos com valores entre zero e 1 igualmente espaçados. >> v = linspace(0,1,1000); b. Repita o exercício anterior, mas com os valores em ordem decrescente. >> v = linspace(1,0,1000); Repare que quando usamos “;” ao final do comando o resultado não é apresentado na tela. Porém, a operação de atribuição é executada da mesma forma. Exercício 2. Gere um vetor x de 5000 pontos com valores entre 0 e 2*pi. Comandos: L1.2.3 Vetores especiais Existem vetores pré-definidos pelo Matlab® e que são muito úteis. Dois deles são o ones(num.linhas, num.colunas) e o zeros(num.linhas, num.colunas) que geram, como os nomes dizem, vetores constituídos de uns e de zeros respectivamente. • Exemplos de aplicação A. Gere um vetor constituído de 10 zeros. >> x = zeros(1,10) x = 0 0 0 0 0 0 b. Gere um vetor constituído por 5000 uns. >> y = ones(1,5000); Exercício 3. Gere uma matriz 2x2 constituída por zeros. Comandos: 9 0 0 0 0 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 L1.2.4 Concatenação de vetores Uma ferramenta muito interessante do Matlab® é a possibilidade de combinar vetores para formar outros (concatenar vetores). Veja os seguintes exemplos. • Exemplos de aplicação: A. Gere um vetor de cinco zeros seguidos por cinco uns. >> vector = [zeros(1,5) ones(1,5)] vector = 0 0 0 0 0 1 1 1 1 1 B. Gere um vetor contendo os números inteiros entre zero e 10 em ordem crescente seguidos pelos mesmos em ordem decrescente. >> x = [0:10 10:-1:0] x = 0 1 2 10 9 8 3 7 4 6 5 5 6 4 7 3 8 2 9 1 10 0 Exercício 4. Construa um vetor constituído pelos números pares de 0 a 10 seguido pelos números ímpares de 0 a 10. Comandos: L1.2.5 Operações entre vetores O Matlab® permite somar (+), subtrair (-), multiplicar (.*) , dividir (./) vetores. Essas operações são realizadas elemento a elemento e só podem ser aplicadas entre vetores de mesmo comprimento. Além disso, quase todas as suas funções (trigonométricas, exponenciais e outras) podem ser aplicadas a um vetor sendo que elas operam também elemento a elemento. • Exemplos de aplicação a. Sendo x = [2 3 7] e y = [0 -1 3] escreva a resposta de cada um desses comandos executados no Matlab®. I) x + y [2 2 10] ii) x – y [2 4 4] iii) x.*y [0 -3 21] 10 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 b. Como gerar a partir do vetor x = 0:0.001:1 um vetor com números de 1 a 11? V = 10*x+1 Exercício 5. Sendo x = [2.1 -2 3] e y = [0 -1 3], escreva o vetor resultante das seguintes operações: ii) 3*x i) x+y iv) x./y iii) x.*y v) y.^2 vi) x.^y Respostas: L1.3 Gráficos Outra característica muito interessante do Matlab® para um engenheiro é a facilidade de se construir gráficos complicados com ele de uma maneira muito simples. Dois comandos muito utilizados são: plot(vetor.abscissa, vetor.ordenada, ‘modo’); stem(vetor.abscissa, vetor.ordenada); O comando plot traça um gráfico colocando seu primeiro argumento no eixo horizontal e seu segundo argumento no eixo vertical. A “string” ‘modo’ indica a forma como o gráfico será traçado. Veja help plot para mais detalhes. Stem traça um gráfico da sequência em seu segundo argumento como palitos com círculos no valor dos dados usando seu primeiro argumento como abscissa. Veja os exemplos. • Exemplos de aplicação a. Faça um gráfico da função y ( t ) = sin(t ) para t ∈ 0, 4π >> t = linspace(0,4*pi,5000); >> y = sin(t); >> plot(t,y) 11 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 b. Faça um gráfico da função y n = n 2 para −5 ≤ n ≤ 5 . >> n = -5:5; >> y = n.^2; >> stem(n,y) Alguns comandos interessantes: I) grid – coloca linhas de grade no gráfico ii) title – permite acrescentar um título ao gráfico iii) xlabel - permite acrescentar um título no eixo das abscissas iv) ylabel - permite acrescentar um título no eixo das ordenadas v) hold on – não apaga o gráfico atual antes de fazer o seguinte Exercícios ( 6. Faça um gráfico de y [ n ] = sin π n 12 2 ) ( e z [ n ] = cos π n 12 2 ) para −30 ≤ n ≤ 30 na mesma figura. O gráfico de y [ n ] deverá ficar em azul e o de z [ n ] em vermelho. Comandos: 12 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 L1.4 Scripts Até este ponto, todas as nossas interações com o Matlab® têm sido através da linha de comando. Entramos comandos ou funções na linha de comando e o Matlab® interpreta nossa entrada e toma a ação apropriada. Este é o modo de operação preferencial quando nossa sessão de trabalho é curta e não repetitiva. No entanto, o real poder do Matlab® para análise e projeto de sistemas vêm da sua habilidade de executar uma longa sequência de comandos armazenados num arquivo. Estes arquivos são chamados de arquivos-M porque seus nomes têm a forma nomearq.m. Um script é um tipo de arquivo-M. Scripts são arquivos-textos comuns e podem ser criados usando um editor de texto. Um script é uma sequência de comandos e funções comuns usados na linha de comando. Um script é invocado na linha de comando digitando-se o nome do arquivo. Scripts podem invocar outros scripts. Quando um script é invocado, o Matlab® executa os comandos e funções no arquivo como se eles tivessem sido digitados diretamente na linha de comando. O script opera sobre as variáveis do espaço de trabalho. Suponha por exemplo que desejemos fazer um gráfico da função y (t ) = sin αt em que α é uma variável que queremos variar. Usando o editor de texto do Matlab® (basta ditar edit na linha de comando), podemos escrever um script chamado plotdata.m como mostrado a seguir. % Este e um script para fazer um grafico da funcao y = sin(alfa*t) % O valor de alfa precisa existir no espaco de trabalho antes % de se chamar este script t = 0:0.01:1; y = sin(alfa*t); plot(t,y); xlabel ('tempo(s)'); ylabel('y(t) = sin(\alpha t)'); grid on; É importante salvar o scritpt no mesmo diretório em que se está trabalhando na linha de comando. Caso contrário, ao tentar executar o script, o Matlab® não encontrará o arquivo e exibirá uma mensagem de erro. Este erro é muito comum quando estamos começando a trabalhar com scripts. Uma vez digitado e salvo é muito fácil utilizar o script. Veja os exemplos a seguir: >> alfa = 50; >> plotdata 13 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 >> alfa = 10; >> plotdata Ao escrever scripts é sempre interessante utilizar comentários, linhas que começam com %. Se você escrever linhas de comentário antes do começo das instruções do script, ao utilizar o comando help nomearq o Matlab® apresenta estas linhas na tela. Por exemplo, >> help plotdata Este e um script para fazer um grafico da funcao y = sin(alfa*t) O valor de alfa precisa existir no espaco de trabalho antes de se chamar este script L1.5 Funções Assim como os scripts, as funções definidas pelo usuário estão entre os recursos mais importantes e utilizados do Matlab®. Uma função é um script que recebe um ou mais parâmetros do teclado e pode devolver um ou mais parâmetros ou executar uma tarefa. O formato de uma função no Matlab® é o seguinte function [outarg1, outarg2,...] = fname(inarg1, inarg2,...) % Um comentário % Mais um comentário .... (código executável) .... 14 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 fname é o nome da função criada e deve ser o nome do arquivo m em que foram gravadas as instruções. inarg1, inarg2,... são os argumentos de entrada e ou- targ1, outarg2,... são os argumentos de saída. A seguir damos um exemplo bastante simples de função. A função somateste recebe dois argumentos a, b e retorna a soma deles. function res = somateste(a,b); %Funcao para somar dois numeros a e b res = a+b; Uma vez que você tenha salvado este arquivo como somateste no diretório corrente, você pode usá-lo como nos exemplos a seguir: >> somateste(2, 4) ans = 6 >> a = 5; >> b = -3; >> res = somateste(a,b) res = 2 Exercícios 7. (a) Digite o script plotdata da Seção L1.4 e gere os gráficos dos exemplos daquela seção. (b) Reescreva o script plotdata visto acima de forma que ele seja uma função que recebe a variável alfa. Ou seja, escreva uma função que faça um gráfico da função y (t ) = sin αt no intervalo 0 ≤ t ≤ 1 e α é um parâmetro escolhido pelo usuário. Por exemplo, o comando: >> plotdada(50) deve gerar o gráfico Resposta (listagem): 15 EN2610 – Processamento Digital de Sinais – Aula 2 – Professor Marcio Eisencraft – janeiro 2012 8. Gere um vetor de 100 valores aleatórios com distribuição uniforme no intervalo [0,1] . Dica: use a função rand (não sabe como usar? Para que serve o help?). Comandos: 9. Escreva uma sequência de comandos do Matlab® que forneça um vetor contendo 100 valores aleatórios uniformemente distribuídos no intervalo -1 a 1 e que faça um gráfico deste sinal. Comandos: 10. Escreva uma sequência de comandos Matlab® que gere um gráfico do sinal π x[n ] = cos n + 0,2r [n ] onde r [n] é um vetor de números aleatórios com distribuição 8 uniforme entre -1 e 1. Faça 0 ≤ n ≤ 99 . (Dica: use o comando rand). Comandos: 11. Escreva uma função Matlab® chamada pulso2graf cujas entradas sejam dois números inteiros a e b com a < b . A função deverá fazer o gráfico de um pulso com amplitude 2 no intervalo a ≤ n ≤ b . O gráfico deve começar em a − 2 e terminar em b + 2 . Por exemplo, ao digitarmos: >> pulso2graf(2,8); devemos obter a figura Comandos: 16