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
Download

Slides da Aula 02