Escolar Documentos
Profissional Documentos
Cultura Documentos
1.1 Objectivos:
Os modelos são criados recorrendo-se a uma interface gráfica, que contém blocos
que representam e modelam operações específicas.
Declaração de variáveis;
Alocação de memória;
Utilização de ponteiros;
Outras tarefas de rotinas.
O Matlab (Matrix Laboratory) pode ser definido como um ambiente de computação
numérica baseado em matrizes. Dentre as suas principais características, destacam-
se:
Uma nova janela, chamada MATLAB desktop aparece, que consiste em vários
pequenas janelas, barras de ferramentas e outros ícones de atalho abertos, dividida
em quatro sub-janelas, diferentes do sistema prontos para se dar inicio a programação
do M.
Neste ambiente de trabalho (Command Window) é um lugar onde se pode inserir todos
os comandos do MATLAB no "Prompt de Comando" (>>).O sinal de prompt “>>” dessa
janela indica que o sistema está apto a receber comandos
Nesta janela (Command History), se podem ver todos históricos das instruções já
executadas. Claro, os resultados das operações não são exibidos aqui. A partir daqui,
se pode selecionar qualquer comando clicando apenas uma vez no comando. Uma
vez selecionado, pode-se excluí-lo usando a tecla 'del' ou copiá-lo usando 'Edit, Copy
(Ctrl C)' e colá-lo na janela de comando do MATLAB ou em um documento separado
usando comandos 'Edit, Paste (Ctrl V)' como são feitos em qualquer documento de
processamento de texto. De exterma importância é, quando é clicado duas vezes no
comando do histórico de comandos, são executados na janela de comando. Este
recurso é extremamente útil quando se deseja executar um comando repetidamente,
já que não se necessita digitá-lo novamente no prompt de comando.
Esta janela exibe a lista de todos os arquivos e pastas sob o diretório corrente, que
passa a ser o 'trabalho' (pastas sob o C) subdiretório, por padrão, no diretório raiz do
MATLAB. Assim diretório 'MATLAB' estará normalmente no disco rígido C: \ em seu
sistema, onde todos os pacotes de software de aplicativo são armazenados, nunca
deve usar o diretório padrão para salvar seus arquivos MATLAB, perderá todos os
seus arquivos ao formatá-lo. Supondo que o disco rígido é particionado em C: \, D: \,
P á g i n a | 10
E: \, é sempre seguro usar drives E: \ ou D: \ para salvar seus novos arquivos em uma
nova pasta criada especialmente para Arquivos MATLAB.
Se pode criar um novo diretório, para fazer isso, digite o comando 'path tool'
ferramenta de caminho no prompt de comando. Em seguida, uma nova janela
chamada 'set path' para definir o caminho. A janela abre mostrando todos os
diretórios e sub-diretórios que são visíveis para o MATLAB para criar uma nova pasta
e torná-lo visível para o MATLAB, seguindo as etapas a seguir / etapas abaixo.
nome do arquivo que se pretende dar. Garanta que o arquivo é salvo no diretório
criado, então no editor MATLAB janela aparece o diretório.
A melhor maneira para um iniciante é usar a janela de comando para entrar cada
comando do MATLAB no prompt de comando com um retorno ao final, observe com
atenção a diferença que o resultado de cada declaração agora é exibida
imediatamente na tela, neste caso, o MATLAB actua como um 'Intérprete'.
Agora digite todos os comandos que deseja executar e selecione toda a parte editada
e, em seguida, 'clique com o botão direito' na parte selecionada e escolha criar arquivo
M', que irá abrir o arquivo no MATLAB janela do editor salve o arquivo com comandos
Save de arquivo digitando o nome do arquivo que se deseja fornecer.
Algumas observações sobre o código MATLAB que são executados, vale a pena
mencionar-los aqui. Espaços em branco ao redor de operadores, como -,: and () são
opcionais, mas melhoram a legibilidade em relação ao caso, MATLAB diferencia
maiúsculas de minúsculas e, portanto, requer uma correspondência exacta para a
nomes de variável, por exemplo, se tem uma variável 'a', não pode-se referenciar a
esta variável como 'A'. Qualquer declaração que comece com um símbolo % é tratada
como um comentário e ignorado durante a execução. Os comentários são
extremamente importante, não apenas para outros leitores entenderem seu programa,
P á g i n a | 13
mas também para que se compreenda os estágios posteriores, a saída não figurar
com realce de sintaxe, excepto para erros.
Existem várias maneiras pelas quais podemos obter ajuda, caso se estejam presos
ao problema.
O Matlab, como já foi dito, é orientado para trabalhar com matrizes. Uma matriz é
notada como ' A(i,j) ' ou 'a(i,j)', em que 'A' e 'a' são matrizes diferentes. O índice (i)
se refere às linhas e o índice (j) às colunas. O tamanho de uma matriz é especificado
pelo número de linhas e colunas. Uma matriz que possui somente uma linha ou
somente uma coluna é chamada de vector. Por outro lado, se uma matriz possuir
somente uma linha e uma coluna, ela é um escalar.
(i.) Variáveis
Exemplo
>> x= 3 + 4
Isso cria uma variável 'x' e atribui um valor 7 a ela. Se digitarmos x, sem ponto-e-
vírgula, o seguinte exibeÇ
x =
7
As declarações do MATLAB geralmente têm o formato.
P á g i n a | 15
Variável = expressão
Exemplo
>> 34/7
ans =
4.8571
>> log (12)
ans =
2.4849
Se uma variável não é atribuída a uma expressão, MATLAB por padrão cria uma
variável com o nome 'ans' que representa a resposta e o resultado de expressão é
atribuída a ele.
Exemplos
y =
4.1231
>> a = 3 + 4 * j;
b = abs ( a )
b =
5
>> p = 2;
q = 7;
r = complex (p, q)
r =
2.0000 + 7.0000i
Por exemplo, a expressão p>q produzirá uma saída '0', pois p é menor que q,
enquanto p <q produzirá um '1' porque a condição é satisfeito.
>> p = 2;
q = 7
>> p> q
ans =
0
>> p<q
ans =
O MATLAB não exibe o resultado, quando o último caractere é um ponto e vírgula (;),
por exemplo
Este recurso pode ser usado para ocultar todos os resultados intermediários
indesejados.
Para listar as variáveis, incluindo ans, no tipo de espaço de trabalho digite who e
então pressione enter
>> who
ans p q r y
Para ver o tamanho das variáveis actuais, podemos usar whos, que dá
>> whos
p 1x1 8 double
q 1x1 8 double
r 1x1 16 double complex
y 1x1 8 double
1.4.5.1 Vectores
>> a = [2 7 0 1 5]
a =
2 7 0 1 5
Ele cria um vector 1 x 5 e o atribui às variáveis 'a'. Os elementos devem ser separados
por espaços ou vírgulas como a = [2, 7, 0, 1, 5].
Por exemplo, a (3) será 0 e a (2) será atribuído a 7. Subscritos sempre comece com
1 no MATLAB.
>> a (3)
ans =
0
>> a (2)
ans =
7
Por exemplo,
>> a (6) = 3
a =
2 7 0 1 5 3
>> a (8) = 4
a =
2 7 0 1 5 3 0 4
não vai apenas adicionar o elemento 8º , mas também inclui 0 como 7 por defeito
P á g i n a | 19
Uma nova matriz expandida pode ser formada usando concatenação. Por exemplo
>> d = [a c]
d =
2 7 0 1 5 12 15
>> b = 3: 2: 11
b =
3 5 7 9 11
>> c = 0: 10
c =
0 1 2 3 4 5 6 7 8
Uma lista parcial de elementos em um vector pode ser vista usando o subscrito
rotação e o operador de cólon como
P á g i n a | 20
>> t (2: 3)
ans =
0.4000 0.3000
>> a = [1 2 3];
b = a'
b =
1
2
3
>> c = [1; 4; 6]
c =
1
4
6
>> d = [b; c]
d =
1
2
3
1
4
6
P á g i n a | 21
>> t = [0 : 2:10]'
t =
0
2
4
6
8
10
a = [5 2 1 4 3] b = [8 6 7]
Tabela: alguns comandos matlab relacionados a vetores
Operação short
2
1
P á g i n a | 22
Operação de Adição
>> a + b
O comprimento do vector (b) pode ser igual ao comprimento do vector (a) pelo
método de concatenação
Exemplo:
>> c = [0 0];
b = [8 6 7]
b =
8 6 7
>> bnovo = [b c]
bnovo =
8 6 7 0 0
>> a = [5 2 1 4 3]
a =
5 2 1 4 3
>> d = a + bnovo
d =
13 8 8 4 3
Exemplo:
>> a = 1: 7
a =
1 2 3 4 5 6 7
>> b= a.^2
b =
1 4 9 16 25 36 49
A multiplicação elemento por elemento de dois vetores pode ser feita usando a
operação de multiplicação de array, vamos multiplicar os dois vectores a e d, no exe
mplo de adição, para obter o seguinte resultado.
>> a = [5 2 1 4 3];
d = [13 8 8 4 3];
a.*d
ans =
65 16 8 16 9
Esta operação é usada com muita frequência e tem três nomes diferentes: produto
interno, produto escalar em produto escalar. Removendo o 'ponto' da expressão
acima resultará em um erro devido à incompatibilidade nas dimensões. Nós pode
fazer a multiplicação transpondo o vector d ou vector a.
>> a*d'
ans =
114
>> a'*d
ans =
65 40 40 20 15
26 16 16 8 6
13 8 8 4 3
52 32 32 16 12
P á g i n a | 24
39 24 24 12 9
1.4.5.2 Matrizes
Um ponto e vírgula são usados para indicar o final de cada linha. A lista inteira é
cercado por colchetes [ ].
Uma matriz pode ser inserida digitando uma linha de elementos e lista 1 explícita por
linha.
>> a = [1 2 3; 4 5 6; 7 8 9]
a =
1 2 3
4 5 6
7 8 9
Cria uma matriz 3x3 e a atribui a uma variável a. Elementos individuais podem ser
referidos usando parênteses. Por exemplo, a (2, 3) refere-se ao elemento da 2ª linha
e 3ª coluna e a(3, 2) será 8.
>> a (2, 3)
ans =
6
>> a (3, 2)
ans =
As matrizes também podem ser geradas usando funções internas especiais tabela.
P á g i n a | 25
1 0 0
0 1 0
0 0 1
c =
0.8147 0.6324 0.9575 0.9572 0.4218 0.6557
0.9058 0.0975 0.9649 0.4854 0.9157 0.0357
0.1270 0.2785 0.1576 0.8003 0.7922 0.8491
0.9134 0.5469 0.9706 0.1419 0.9595 0.9340
>> d = ones(4, 3)
P á g i n a | 26
d =
1 1 1
1 1 1
1 1 1
1 1 1
0 0 0 0 0 0
0 0 0 0 0 0
M =
3
N =
6
Gerando mais de uma saída, com a execução de uma única comando, é uma das
características distintivas do MATLAB. Neste caso, produz duas saídas M & N, que
podem ser usadas, por exemplo, em rotações.
Vamos criar uma matriz quadrada mágica 3x3, por exemplo, que tem algumas
propriedades interessantes. O comando magic (N) é gerado como NxN matriz
quadrada que tem todos os inteiros, de 1 a N 2 . . A soma de todos os elementos, ao
longo de cada linha, cada coluna e também ao longo de cada um dos dois diagonais
é igual é conhecido como quadrado mágico.
3 5 7
4 9 2
O exemplo acima gera uma matriz quadrada 3x3. Tem tudo diferente inteiros de 1 a
9. A soma do comando calcula a soma dos elementos em cada coluna.
ans =
15 15 15
ans =
15
A soma dos elementos diagonais é 15. Vamos transpor a matriz para que troque linhas
e colunas para recalcular a soma de cada linha de matriz a, que agora é a coluna da
matriz b.
>> b = a'
b =
8 3 4
1 5 9
P á g i n a | 28
6 7 2
MATLAB não tem uma função especial para extrair os elementos anti-diagonal. Mas
fornece uma função muito útil fliplr para transformar a matriz da esquerda para a
direita, que por sua vez converte o anti-diagonal em princípio diagonal. Agora,
podemos calcular sua soma facilmente.
c =
6 1 8
7 5 3
2 9 4
>> diag (c)
ans =
6
5
4
ans =
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
0 0.0000 1.0000
Cada elemento de uma matriz pode ser multiplicado por um escalar.vamos multiplicar
cada elemento da matriz quadrada mágica 3x3 por 2.
>> a = magic(3)
a =
8 1 6
3 5 7
P á g i n a | 30
4 9 2
>> b = 2 * a
b =
16 2 12
6 10 14
8 18 4
Uma vez que as matrizes acima a & b têm as mesmas dimensões, podemos adiciona-
los, elemento por elemento, com uma expressão simples como a + b.
>> c = a + b
c =
24 3 18
9 15 21
12 27 6
(xi.) Submatrizes
Uma parte da matriz pode ser extraída usando o mais poderoso operador de cólon do
MATLAB. Agora, considere o exemplo da matriz 4x5 de elementos aleatórios para o
estudo de submatrizes.
>> a (3: 4, :)
ans =
>> a (2: 3, 2: 4)
ans =
NOTA:
>> a (end, :)
ans =
0.3922 0.0318 0.8235 0.0344 0.7952
Extraídos da última linha da matriz, a última coluna da matriz com um (:,end), também
pode ser extraído. Podemos excluir linhas e colunas de uma matriz usando uma matriz
nula, que é apenas um par vazio de quadrados colchetes, por exemplo, para excluir a
3ª coluna da matriz a, podemos usar
P á g i n a | 32
>> a (:, 3) = [ ]
a =
0.6787 0.6555 0.6948 0.4387
0.7577 0.1712 0.3171 0.3816
0.7431 0.7060 0.9502 0.7655
0.3922 0.0318 0.0344 0.7952
A matriz resultante é agora uma matriz 4x4, após 3ª coluna foi excluído.
O MATLAB fornece duas instruções de loop, o loop for e o loop while , usando na
qual um grupo de instruções pode ser executado repetidamente fixo número de vezes,
de forma controlada. Ele também tem dois controles de fluxo instrução, o if-else end
e o switch-case, para o controlo do fluxo do programa. Os comandos break, return e
continue são usados em associação fechadas com as instruções de controle de loop
e fluxo para encerrar o processo de loop ou passa o controle para a próxima
iteração. Podemos ser tentados a escrever o código MATLAB da mesma forma que
escreveríamos um programa em FORTRAN ou C, caso em que nosso código pode
ser dolorosamente lento.
Portanto, é altamente recomendável não fazer isso. É sempre melhor permitir que o
MATLAB processe todos os vetores ou matrizes de uma só vez, em vez do que usar
loops.
O processo de conversão de um loop for para uma função vetorial é referido para
como vetorização. A diferença no tempo de processamento entre um o código
vetorizado e um código que usa um loop for podem ser substanciais. A potencia do
MATLAB é realizado quando o conceito de vetorização é utilizado.
O código vetorizado tira vantagem, sempre que possível, das operações envolvendo
dados armazenados como vetores. A única maneira de fazer programas MATLAB
executados mais rápido é vetorizar os algoritmos que usamos para escrever o
programas. Embora todas as linguagens de programação possam usar 'loops for ' ou
'loops while', o MATLAB pode usar operações de vector ou matriz. Apesar das
instruções de loop estarem disponíveis no MATLAB, elas devem ser usadas com
P á g i n a | 33
moderação porque são computacionalmente ineficientes. Isso pode ser provado pelo
seguinte exemplo que envolve a criação de uma tabela de logaritmos.
>> tic
x = 0,01;
for k = 1:1000
y(k) = log10(x);
X = x + 0,01
end
toc
O código de computador acima registra log 10(x) para 1000 valor de x começando
com 0,01 e incrementado a cada vez pelo mesmo valor. Ele também mede o tempo
total gasto para fazer este trabalho. Agora, crie um arquivo que consiste no programa
acima e chame-o no prompt de comando digitando o 'arquivo nome ', caso contrário,
o tempo de digitação também será incluído, levando a resultados errados. Quando
executamos o código acima, a seguinte mensagem é exibido na tela. O tempo
decorrido é 0.063405 segundos.
>> tic
x = 0,01:0,01;10;
y = log10(x)
toc
As funções tic e toc determinam o tempo necessário para executar uma série de
comandos no MATLAB e exibem o tempo em segundos, enquanto o tic começa um
stop watch times toc imprime o tempo decorrido, desde que o tic foi usado. Essas duas
P á g i n a | 34
funções trabalham juntas para medir o tempo decorrido. Precisamos colocar todo o
código MATLAB, para o qual o tempo de execução deve ser medido entre tic e toc.
Vamos criar, por exemplo, um gráfico linear de Sin (t) e Cos (t) para todo valores t que
variam de 0 a 2, com incremento de / 100. Podemos usar a notação para criar um
vector linha t de elementos igualmente espaçados.
Podemos verificar o comprimento desse vector como 201. Agora, sem usar as
instruções de loop, podemos encontrar Sin (t) & Cos (t), com a ajuda de vectorização.
A função MATLAB Sin calcula Sin (t) para cada elemento de vector t para criar o vector
x de 201 elementos. Da mesma forma, o vector y terá 201 valores de cosseno dos
elementos de t. Agora, temos que traçar os dois vetores x e y em relação a t, o que
pode ser feito facilmente usando o comando plot.
Uma nova janela de figura, chamada 'figura 1' por padrão, será aberta consistindo em
um ciclo de ondas seno e cosseno.
A curva cosseno é traçada usando a linha tracejada para saber sobre as opções
disponíveis para tipos de linha, símbolos de plotagem e cores procuram ajuda em o
comando plot.
Também podemos adicionar uma legenda apropriada para cada curva, usando o
comando da legenda.
A barra invertida (1) na frente do pi, no comando do título permite que Símbolo grego
a ser inserido no título para obter mais informações sobre o tópico acima em 'anotando
gráficos' dentro da opção 'gráficos'.
grid
title ('plotagem de seno e cosseno de 0 a 2pi');
Isso representa a curva senoidal como uma linha pontilhada no espaço reservado.
P á g i n a | 37
A figura abaixo mostra a aparência final do Sine & Cosine curvas plotadas
separadamente.
subplot (2,1,1);
y = cos (t);
plot (t, x, ':');
xlabel(4') % Rotulo do eixo –x
ylabel('Sin(t)') % Rotulo do eixo – y
Os gráficos de barras são adequados para exibir dados discretos. Por defeito, um o
gráfico de barras representa cada elemento em uma matriz como uma barra. Cada
barra é distribuído ao longo do eixo x, com cada elemento em uma coluna desenhada
em um localização diferente. Todos os elementos em uma linha são agrupados ao
redor do mesmo localização no eixo x. Vamos ilustrar isso com um exemplo
simples. Deixar nos traçar um gráfico de barras dos elementos de uma matriz
quadrada mágica de 3x3 dimensões.
%---------------------------------------------------- --------
% Objetivo: escrever um programa para gerar o sinal de varias
% rampas “fallowing”
% x (t) = t + 1 (-1 <= t <0)
% = 1 (0 <= t <1)
%= t (1 <= t <2)
%= 2 (2 <= t <3)
%= -t + 5 (3 <= t <5)
%------------------------------------------------------------
t=-2:0.01:6 ;
x= x1+x2+x3+x4+x5 ;
figure(1)
plot(t,x);
axis([min(t) max(t) min(x)-0.5 max(x)+0.5]);
xlabel('Índice de tempo t (seg.)');
ylabel('amplitude x (t)');
title(' sinal x(t)');
%---------------------------------------------------- --------
% Objetivo: escrever um programa para realizar a adição, ou
seja, x (t) = x1 (t) + % x2 (t)
% x1(t)= cos(6t)
% x2(t)= cos(8t)
%------------------------------------------------------------
t= 0:pi/400:pi;
x1=cos(6*t);
x2=cos(8*t);
x= x1+x2;
figure(1)
subplot(3,1,1);
plot(t,x1);
axis([min(t) max(t) min(x1)-0.5 max(x1)+0.5]);
xlabel('índice te Tempo t (seg)');
ylabel('x1(t)');
title('sinal 1: onda de cosseno de frequência 3/pi Hz');
subplot(3,1,2);
plot(t,x2);
axis([min(t) max(t) min(x2)-0.5 max(x2)+0.5]);
xlabel('TIME INDEX t(sec)');
P á g i n a | 40
ylabel('x2(t)');
%------------------------------------------------------------
% Objetivo: escrever um programa para realizar
% x(t)=x1(t)x2(t)
% x1 (t) = cos (2t)
% x2 (t) = cos (8t)
%------------------------------------------------------------
t= 0:pi/400:pi;
x1=cos(4*t);
x2=cos(8*t);
x= x1.*x2;
figure(1)
subplot(3,1,1);
plot(t,x1);
axis([min(t) max(t) min(x1)-0.5 max(x1)+0.5]);
subplot(3,1,3);
plot(t,x);
axis([min(t) max(t) min(x)-0.5 max(x)+0.5]);
xlabel('índice te Tempo t (seg)');
ylabel('x(t)=x1(t).x2(t)');
;
P á g i n a | 42
2.1 Objectivos:
42
P á g i n a | 43
43
P á g i n a | 44
T = [t1 t2 t3];
X = sin(T)
O que fez o código mostrado acima?
>> ts = 0.1;
t = 0:ts:20;
xt = cos(t).*exp(-0.1*t);
figure(1);
plot(t,xt)
grid on
44
P á g i n a | 45
0, 𝑡 < −2
2, −2 ≤ 𝑡 < 0
𝑓( 𝑥 ) = {
1, 0≤𝑡<2
0, 𝑡≥2
>> ts = 0.1;
t = 0:ts:20;
xt = cos(t).*exp(-0.1*t);
figure(1);plot(t,xt)
grid on
>> t=[-4 -2 0 2;-2 0 2 4];
x=[ 0 2 1 0; 0 2 1 0];
plot(t,x,'-k','LineWidth', 3);
axis([-4 4 -1 2.5]);
grid on
hold on
op=[-2 0 2];
cp=[-2 0 2];
p1=[2 1 0];
p2=[0 2 1];
plot(op,p2,'ok');
stem(cp,p1,':k','filled')
hold off
Escreva um script Matlab que crie o sinal x[n] que representa um sinal um sinal discreto
x[n] = cos(n)e-0,1n .,0 ≤ 𝑛 ≤ 20
>> n = 0:20;
xn = cos(n).*exp(-0.1*n);
figure(2);
stem(n,xn,'filled')
hold on
45
P á g i n a | 46
plot(n,xn,':');
grid on
hold off
hold on
plot(n,xn,':');
grid on
hold off
>> t=[-4 -2 -2 0 0 2 2 4];
x=[0 0 2 2 1 1 0 0 ];
plot(t,x);
axis([-4 4 -1 2.5]);
grid on
Evidentemente que a partir da figura M2.4 não é possível saber se, nos pontos de
descontinuidade, o sinal é definido à esquerda ou à direita. Note que se fosse
necessário recolher amostras do sinal com base nesta figura, seria necessário optar
por uma das hipóteses, resultando, respectivamente, e utilizando um intervalo Ts=
0.1s , os sinais discretos que se mostram nas figuras dos exercício 3 e
M2.10, que podem ser obtidos com o script
>> n=-4:3;
figure(1)
x=[0 0 2 2 1 1 0 0];
stem(n,x,'filled')
axis([-4 4 -1 2.5]);
46
P á g i n a | 47
grid on
figure(2)
n=-3:4;
x=[0 0 2 2 1 1 0 0];
stem(n,x,'filled')
axis([-4 4 -1 2.5]);
grid on
(i.) Amostragem:
x[n] = xa(nTs)
x- é um sinal discreto amostrado a partir de um sinal analógico xa com um período TS
e frequência de amostragem F S= 1/TS.
Experimente o seguinte trecho de programa Matlab (script):
>> Fs = 100; N = 1000;
tempofinal = 9.99;
t1 = (0:N-1)/Fs;
t2 = 0:1/Fs:tempofinal;
x1 = sin(2*pi*2*t1);
x2 = sin(2*pi*3*t2);
plot(x1), figure, plot(x2)
Quantos ciclos são mostrados em cada um dos sinais plotados pelo código
acima?
Uma alternativa à criação de sinais é usar uma função das diversas caixas de
ferramentas do Matlab (toolbox). Uma variedade de funções Matlab gera formas de
47
P á g i n a | 48
onda. Cada uma delas requer que você inicie com um vector representando uma base
temporal. Algumas dessas funções serão descritas mais adiante.
(ii.) Aliasing:
Visualização de sinais
48
P á g i n a | 49
figure, stem(t,x)
plot(ts(1:200),x(1:200))
Para que serve o comando strips? (dica: digite na linha de comandos ’help
strips’.) O que faz o operador.* ?
49
P á g i n a | 50
ts=(8/length(x));
t=-4:ts:4-ts;
xp=(x+fliplr(x))/2;
figure(1);
plot(t,xp)
axis([-4 4 -0.5 2]);
title('sinal par');
grid on
xi=(x-fliplr(x))/2;
figure(2);plot(t,xi)
axis([-4 4 -1 1]);
xlabel ('Índice de tempo t (seg.)');
title('sinal impar');
grid on
t=-4:ts:4-ts;
xp=(x+fliplr(x))/2;
figure(1);plot(t,xp)
axis([-4 4 -0.5 2]);
grid on
50
P á g i n a | 51
xi=(x-fliplr(x))/2;
figure(2);
plot(t,xi)
axis([-4 4 -1 1]);
grid on
xd=ones(1,10);
grid on
xp=(x+fliplr(x))/2;
figure(4);
plot(t,xp,'-*')
axis([-4 4 -0.5 2]);
grid on
xi=(x-fliplr(x))/2;
figure(5);
plot(t,xi,'-*')
axis([-4 4 -1 1]);
grid on
Observe as figuras 3, 4 e 5. Note que embora o sinal x(t) esteja bem definido (com
amostragem à esquerda), xp(t) p e xi(t) estão mal calculados. Basta notar que o gráfico
da figura 3 não corresponde a um sinal par, e gráfico da figura 5 não corresponde a
um sinal impar.
Para obter a componente par e impar do sinal o script tem de ser um pouco mais
complexo
xd=ones(1,10);
51
P á g i n a | 52
ts=(8/length(x));
t=-4:ts:4-ts;
tinv=-fliplr(t);
tinv1=min([t,tinv]);
tinv2=max([t,tinv]);
tinv=tinv1:ts:tinv2;
tm=t(1)-tinv(1);
tt=1:length(t);
x1=zeros(1,length(tinv));
x1(tt+tm)=x;
x=x1;
xp=(x+fliplr(x))/2;
xi=(x-fliplr(x))/2;
figure(6);
plot(tinv,xp,'-*')
axis([-4 4 -0.5 2.5]);
grid on
figure(7);
plot(tinv,xi,'-*')
axis([-4 4 -1.5 1.5]);
grid on
Verifique que, efectivamente, como teria que ser, a figura 6 representa um sinal par e
a figura 7 representa um sinal impar.
Para uma representação mais conducente com o carácter contínuo do sinal podemos
agora fazer uma representação com um maior número de pontos
xd=ones(1,100);
52
P á g i n a | 53
t=-4:ts:4-ts;
tinv=-fliplr(t);
tinv1=min([t,tinv]);
tinv2=max([t,tinv]);
tinv=tinv1:ts:tinv2;
tm=t(1)-tinv(1);
tt=1:length(t);
x1=zeros(1,length(tinv));
x1(tt+tm)=x;
x=x1;
xp=(x+fliplr(x))/2;
xi=(x-fliplr(x))/2;
figure(8);
plot(tinv,xp,'.')
axis([-4 4 -1 2]);
figure(9);
plot(tinv,xi,'.')
axis([-4 4 -1 1]);
Observe as figuras 8 e 9.
xlabel('t')
ylabel('x(t)')
53
P á g i n a | 54
54
P á g i n a | 55
55
P á g i n a | 56
ylabel('Imag(x(t))');
title('valores imaginarios do sinal riginal');
subplot(4,1,3);
stem(t,abs(x));
grid;
xlabel(' índice de tempo t(seg)');
ylabel('Mag(x(t))');
title('magnitude dos valores do sinal original');
subplot(4,1,4);
stem(t,angle(x));
grid; xlabel(' índice de tempo t(seg)');
ylabel('fase(x(t))');
title('valores da fase do sianal do original');
figure(2)
subplot(4,1,1);
stem(t,real(x_conj_par));
grid;
xlabel(' índice de tempo t(seg)');
ylabel('Real(conj.par x(t))');
title('valores do conjugado do sinal par');
subplot(4,1,2);
stem(t,imag(x_conj_impar));
grid;
xlabel('índice de tempo t(seg)');
ylabel('imag(conj.par x(t))');
title('valores imaginario do sinal par');
subplot(4,1,3);
stem(t,abs(x_conj_par));
grid; xlabel(' índice de tempo t(seg)');
ylabel('Mag(conj.par x(t))');
title('magnitude dos valores do conjugado do sinal par');
subplot(4,1,4);
stem(t,angle(x_conj_par));
grid;
56
P á g i n a | 57
Recorra ao Matlab para esboçar os sinais pela função x(t). Considere o sinal contínuo
x(t) = cos(10π t) definidos no intervalo [0 ;π/5].
57
P á g i n a | 58
>> f0=5;
t=0:0.01:pi/5;
xt=cos(2*pi*f0*t);
subplot(3,2,1)
plot(t,xt);
grid on
axis([min(t) max(t) min(xt) max(xt)])
for k=2:2:10
fs=k*f0;
ts=1/fs;
tn=0:ts:pi/5;
xn=cos(2*pi*f0*tn);
subplot(3,2,1+k/2)
stem(tn,xn,'filled');
axis([min(tn) max(tn) min(xn) max(xn)])
hold on
plot(t,xt,'r:');
hold off
end
Obtemos os gráficos da figura.Note que os sinais amostrados, sendo sinais discretos,
devem ser indexados a n , e não explicitamente aos instantes de tempo em que as
amostras foram obtidas.
…….
for k=2:2:10
N=k;
om0=2*pi/N;
n=0:4*N;
xn=cos(om0*n);
subplot(3,2,1+k/2)
stem(n,xn,'filled');
axis([min(n) max(n) min(xn) max(xn)])
end
58
P á g i n a | 59
%------------------------------------------------- ---
% Gera as figuras das funções quadradas
% %----------------------------------------------------
%----------------------------------------------------
% Gera as figuras da onda quadrangular
%----------------------------------------------------
close all
clf
t=-20:0.001:20;
subplot(2,2,1);
hold on
y=(square(2*pi/6*t,100/3)+1)+2*square(2*pi/6*(t-
2),100/3).*(-square(2*pi/6*t,100/3)+1);
plot(t,y,'r.-')
axis([-20 20 -6 8])
line([-20 0 0 0 0 20],[0 0 5 -2 0
0],'linewidth',.8,'color','r')
grid
str=strcat('operação ',['y=x(' num2str(i) 'x)'])
title(str,'fontsize',10,'FontAngle','italic')
xlabel('Eixo x','FontAngle','italic')
ylabel('Eixo y','FontAngle','italic')
59
P á g i n a | 60
%----------------------------------------------------
% Gera a figura da x = (cos(5*t)).^2
%----------------------------------------------------
t = 0:0.01:3*pi/5;
x = (cos(5*t)).^2;
plot(t, x)
grid
title('Sinal x = cos^2(5t)')
xlabel('t')
ylabel('x(t)')
yy = [0 1];
xx1 = pi/5;
xx2 = 2*pi/5;
xx3 = 3*pi/5;
hold on
plot([pi/5 pi/5], yy, 'r')
plot([2*pi/5 2*pi/5], yy, 'r')
plot([3*pi/5 3*pi/5], yy, 'r')
% print Exemplo2.png -dpng
%----------------------------------------------------
%----------------------------------------------------
% Gera as figuras das funções
% x1=cos(3.5*t); x2=sin(2*t); x3= 2*cos(7*t/6);Soma=x1+x2+x3;
%----------------------------------------------------
t = 0:0.1:36*pi;
x1 = cos(3.5*t);
x2 = sin(2*t);
x3 = 2*cos(7*t/6);
Soma=x1+x2+x3;
subplot(411)
plot(t, x1)
title('Sinal x_1')
60
P á g i n a | 61
grid
xlabel('t')
ylabel('x(t)')
subplot(412)
plot(t, x2)
title('Sinal x_2')
grid
xlabel('t')
ylabel('x(t)')
subplot(413)
plot(t, x3)
title('Sinal x_3')
grid
xlabel('t')
ylabel('x(t)')
subplot(414)
plot(t, Soma)
yy = -5:0.1:5;
Tam = length(yy);
xx1 = 12*pi;
xx2 = 24*pi;
xx3 = 36*pi;
hold on
plot(xx1, yy, 'r')
plot(xx2, yy, 'r')
plot(xx3, yy, 'r')
title('Sinal x_1 + x_2 + x_3')
grid
xlabel('t')
ylabel('x(t)')
% print Exemplo1.png –dpng
61
P á g i n a | 62
%----------------------------------------------------
% Gera operações básicas
%----------------------------------------------------
close all
clf
% Construir a função periódica
t=-20:0.01:20;
hold on
y=(sawtooth(2*pi/2*t,1)+1).*(2*square(2*pi/4*t,50)+2)/2 -
(2*square(2*pi/4*(t-2),50)+2)/2
x=(2*square(2*pi/6*t,100/3)-
2).*square(2*pi/4*t,50)+(2*square(2*pi/6*t,100/3)+2)/2
plot(t,x,'b.-','color','r')
plot(t,y,'b.-','color','b')
line([-20 0 0 0 0 20],[0 0 20 -2
0],'linewidth',1.5,'color','r')
set(gca,'xtick',-12:1:12)
axis([-12 12 -8 8])
grid on
%----------------------------------------------------
% Gera operações básicas
%----------------------------------------------------
close all
clf
% Construir a função periódica
t=-20:0.01:20;
for i=1:2
subplot(2,1,i)
x=square(2*pi/4*t,25)
hold on
plot(t,x,'r.-','color','r')
line([-20 0 0 0 0 20],[0 0 20 -20 0
0],'linewidth',1.5,'color','r')
62
P á g i n a | 63
set(gca,'xtick',-12:1:12)
axis([-12 12 -3 3])
grid on
end
close all
clf
% Construir a função aperiódica
x=-20:0.01:20;
y=(x.^2).*rectpuls(x,2.1)-rectpuls(x,2.1);
plot(x,y,'r.-')
hold on
line([-20 0 0 0 0 20],[0 0 20 -20 0
0],'linewidth',1.5,'color','r')
set(gca,'xtick',-12:1:12)
axis([-12 12 -3 3])
grid on
%----------------------------------------------------
% Sinais de Tempo Discreto e Contínuo
%----------------------------------------------------
x = [1 2 3 4 5 6 5 4 3 2 1];
stem(x)
title('Sinal de Tempo Discreto')
xlabel('x[n]')
xlabel('n')
ylabel('x[n]')
grid
%----------------------------------------------------
% Gera a figura sinal discreto
%----------------------------------------------------
63
P á g i n a | 64
figure
plot(x)
title('Sinal de Tempo Contínuo')
xlabel('t')
ylabel('x(t)')
grid
%----------------------------------------------------
%----------------------------------------------------
% Gera as figuras dos sinais periódicos
%----------------------------------------------------
% Sinal periódico contínuo: onda quadrada
t= 0:.001:1;
plot(t, square(10*pi*t+0.5))
axis([0 1 -1.1 1.1])
xlabel('t')
ylabel('x(t)')
title('Sinal Periódico Contínuo')
grid
figure
%----------------------------------------------------
% Sinal periódico discreto: onda quadrada
%----------------------------------------------------
n = -8:7;
stem(n, square(pi*n/4+0.5))
axis([-9 8 -1.1 1.1])
xlabel('n')
ylabel('x[n]')
title('Sinal Periódico Discreto')
grid
figure
%----------------------------------------------------
64
P á g i n a | 65
%----------------------------------------------------
% Gera Função Periódica
%----------------------------------------------------
close all
clc
clf
% Construir a função periódica
65
P á g i n a | 66
t=-12:0.01:12;
for m=1:3
subplot(3,1,m)
N=input('introduzir o numero de harmonicas: ');
hold on
x=(2*square(2*pi/6*t,100/3)-
2).*square(2*pi/4*t,50)+(2*square(2*pi/6*t,100/3)+2)/2;
y=ones(1,length(t));
for k=1:length(t)
y(k)=2/3;
for n=1:N
an=(8*sin((4*pi*n)/3) - 2*sin((2*pi*n)/3) -
4*sin(2*pi*n))/(pi*n);
bn=-(4*sin((pi*n)/3)^2*(4*cos((4*pi*n)/3) -
1))/(pi*n);
y(k)=y(k)+an*cos(n*pi/3*t(k))+bn*sin(n*pi/3*t(k));
end
end
plot(t,x,'b.-','color','r')
plot(t,y,'b.-','color','k')
title(['Representacao do sinal periodico para '
num2str(N) '
Harmonicas'],'fontweight','bold','color','b')
line([-20 0 0 0 0 20],[0 0 20 -20 0
0],'linewidth',1.5,'color','r')
set(gca,'xtick',-12:1:12)
axis([-12 12 -8 8])
grid on
end
%----------------------------------------------------
66
P á g i n a | 67
67
P á g i n a | 68
Recorra ao Matlab para resolver a energia do sinal contínuo definido pela expressaoa
seguinte
𝑡2, 𝑥 <0
𝑥(𝑡) = {
0, 𝑡 ∉ ⌈0,4⌉
0, 𝑛 < −4
𝑥 (𝑛) = {𝑛 + 2, −4 ≤ 𝑛 < 3
0, 3>𝑛
Tratando-se de um sinal discreto temos facilmente
>> n=-4:2;
x=n+2;
E=sum(x.^2)
n=0:1:50;
x=(1/2).^n; stem(n,x);
xlabel('n');
ylabel('x(n)');
title(' sinal x(n)');
axis([0 25 0 1]);
disp(' A energia do sinal calculada E é');
E=sum(abs(x).^2)
disp(' A energia do sinal teórica é');
68
P á g i n a | 69
Calcule a potência dos sinais discretos x1[n] e x 2[n] definidos por x1(n) = cos [n π/3]
e x2(n) = cos [n π/5]
Tratando-se de sinais discretos temos facilmente
>> N=6;
n=0:N-1;
x=cos(2*pi*n/N);
P=(1/N)*sum(x.^2)
>> N=10;
n=0:N-1;
x=cos(2*pi*n/N);
P=(1/N)*sum(x.^2)
69
P á g i n a | 70
%----------------------------------------------------
% Translação no Tempo
%----------------------------------------------------
hold on
t=-4:0.001:10;
ncolor=4;
k=rand(ncolor,3);
y=sinc(t);
subplot(2,2,1);
plot(t,y,'r-','linewidth',1.5)
for i=1:4
x=sinc(t-i);
subplot(2,2,i);
plot(t,x,'color',k(i,:),'linewidth',1.5)
set(gca,'xtick',-4:1:10)
axis([-4 10 -0.5 3.2])
line([-4 0 0 0 10], [0 0 5 0 0],'linewidth',.8,'color','k');
title(['y=sinc(t-' num2str(i)
')'],'fontweight','bold','color','b')
end
%----------------------------------------------------
% Translação no Tempo
%----------------------------------------------------
close all
clf
t=-4:0.4:10;
t1=-4:0.001:10;
70
P á g i n a | 71
ncolor=4;
k=rand(ncolor,3);
subplot(2,2,1);
y1=2*sinc(t1)
hold on
plot(t1,y1,'r.-','linewidth',1.5)
title('titulo')
hold off
for i=1:4
hold on
x=2*sinc(t-i);
subplot(2,2,i);
stem(t,x,'color',k(i,:),'linewidth',0.2)
set(gca,'xtick',-4:1:10)
axis([-4 10 -0.5 3.2])
line([-4 0 0 0 10],[0 0 5 0 0],'linewidth',.8,'color','k')
title(['y=sinc(t-' num2str(i)
')'],'fontweight','bold','color','b')
xlabel('Eixo x')%comando para colocar legenda sobre os eixos
ylabel('Eixo y')
end
2.4.6.3 Inversão
%------------------------------------------------------------
% Objetivo: escrever um programa para gerar o sinal x ( -t)
71
P á g i n a | 72
x= x1+x2+x3+x4+x5;
t_inverso = -fliplr(t);
x_inverso= fliplr(x);
a= min(min(t),min(t_inverso));
b= max(max(t),max(t_inverso));
subplot(2,1,1);
plot(t,x);
grid;
ylabel ('x(t)');
subplot (2,1,2);
plot(t_inverso,x_inverso);
grid;
ylabel ('x(-t)');
%----------------------------------------------------
% Gera a figura y(t)=x(t);
%----------------------------------------------------
72
P á g i n a | 73
x = -2.5:0.01:2.5;
a = trimf(x, [-1 0 1]);
plot(x, a)
xlabel('t')
ylabel('x(t)')
title('Sinal x(t)')
grid
figure
%----------------------------------------------------
% Gera figura para x(2t)
%----------------------------------------------------
a = trimf(x, [-1/2 0 1/2]);
plot(x, a)
xlabel('t')
ylabel('y(t)')
title('Sinal y(t) = x(2t)')
grid
figure
%----------------------------------------------------
% Gera figura para x(t/2)
%----------------------------------------------------
a = trimf(x, [-2 0 2]);
plot(x, a)
a = trimf(x, [-2 0 2]);
plot(x, a)
xlabel('t')
ylabel('y(t)')
title('Sinal y(t) = x(t/2)')
grid
%----------------------------------------------------
(ii.) Operações de compressão e expansão no tempo de um sinal, a x=x(t)
73
P á g i n a | 74
for i=1:4
hold on
x=1.5*exp(-t*i).*heaviside(t*i)+(3-1.5*exp(-
t*i)).*heaviside(t*i-2)-3*heaviside(t*i-5);
x1=0.5*sin(90*t)+x;
subplot(2,2,i);
plot(t,x1,'color',k(i,:),'linewidth',1.4)
set(gca,'xtick',-2:1:10)
axis([-2 10 -0.2 3.2])
line([-3 0 0 0 10],[0 0 5 0 0],'linewidth',.8,'color','k')
grid minor
str1=strcat('Operacoes com sinais','
\y=sinright)(',num2str(i),'x)')
title('\sin\!\left(i\, x\right)','interperter','none')
xlabel('Eixo x')
ylabel('Eixo y')
end
%----------------------------------------------------
% Objetivo: escrever um programa para gerar o sinal x (t -t0)
% x (t) = t + 1 (-1 <= t <0)
%= 1 (0 <= t <1)
%= t (1 <= t <2)
%= 2 (2 <= t <3)
%= -t + 5 (3 <= t <5)
%----------------------------------------------------
t=-2:0.01:6 ;
x1= (t+1).*(t>=-1 & t<0);
x2= 1.*(t>=0 & t<1);
x3= t.*(t>=1 & t<2);
x4= 2.*(t>=2 & t<3);
x5= (-t+5).*(t>=3 & t<=5);
x= x1+x2+x3+x4+x5;
disp('o programa solicitará a quantidade de deslocamento');
disp('insira (+) para atraso e nº (-)para avanço:');
t0= input('insira a quantidade de deslocamento do sinal: ');
74
P á g i n a | 75
t_shift = t+t0;
x_shift = x;
a= min(min(t),min(t_shift));
b= max(max(t),max(t_shift));
subplot(2,1,1);
plot(t,x);
grid;
axis([a b min(x) max(x)+0.5]);
xlabel('indice de tempo t (seg)');
ylabel('x(t)');
title('sinal original');
subplot(2,1,2);
plot(t_shift,x_shift);
grid;
axis([a b min(x) max(x)+0.5]);
xlabel('índice de tempo t (seg)');
ylabel('x(t-t0)');
title('Sinal de mudança de tempo');
Entrada: o programa solicitará a quantidade de deslocamento.
insira um número + para atraso e número - para avanço
insira a quantidade desejada de deslocamento do sinal 5
%----------------------------------------------------
% Manipulação do sinal x=x(t)
%----------------------------------------------------
close all
clc
clf
syms color
t=-1:0.001:14;
color=4
k=rand(color,3)
figure
title('titulo')
for i=1:4
if i==3
subplot(2,2,i)
x=2*exp(-t/2).*heaviside(t/2)+(4-2*exp(-
t/2)).*heaviside(t/2-2)-4*heaviside(t/2-5);
plot(t,x,'color',k(i,:),'linewidth',1.7)
title(['Manipulacao do sinal
x=x(t/2)'],'fontsize',10,'FontAngle','italic')
xlabel('Eixo t','fontsize',8,'FontAngle','italic')
ylabel('Eixo x','fontsize',8,'FontAngle','italic')
set(gca,'xtick',-12:1:12)
axis([-2 14 -0.5 5])
grid on
75
P á g i n a | 76
else
subplot(2,2,i)
x=2*exp(-t*i).*heaviside(t*i)+(4-2*exp(-
t*i)).*heaviside(t*i-2)-4*heaviside(t*i-5);
plot(t,x,'color',k(i,:),'linewidth',1.7)
title(['Manipulacao do sinal x=x(' num2str(i)
't)'],'fontsize',10,'FontAngle','italic')
xlabel('Eixo t','fontsize',8,'FontAngle','italic')
ylabel('Eixo x','fontsize',8,'FontAngle','italic')
set(gca,'xtick',-12:1:12)
axis([-2 14 -0.5 5])
grid on
end
end
(v.) Operações Básicas em Sinais Discretos sinal x[n]; sinal y[n] = x[2n]')
%----------------------------------------------------
% Gera a figura do sinal x[n]
%----------------------------------------------------
%
n = -6:6;
x = [1 0.5 1 0.5 1 0.5 1 0.5 1 0.5 1 0.5 1];
stem(n, x)
axis([-7 7 0 1.1])
xlabel('n')
ylabel('x[n]')
title('Sinal x[n]')
grid
figure
%----------------------------------------------------
% Gera a figura do sinal y[n] = x[2n]')
%----------------------------------------------------
n = -3:3;
x = ones(1, 7);
stem(n, x)
axis([-4 4 0 1.1])
xlabel('n')
ylabel('y[n]')
title('Sinal y[n] = x[2n]')
grid
%----------------------------------------------------
(vi.) Função discreta operação efeito de compressão e expansão (1)
%----------------------------------------------------
% Função discreta operação efeito de
% compressão e expansão Sinais
%----------------------------------------------------
76
P á g i n a | 77
close all
clf
t=-4:0.4:10;
t1=-4:0.001:10;
ncolor=4;
k=rand(ncolor,3);
subplot(2,2,1);
y1=2*sinc(t1)
hold on
plot(t1,y1,'r.-','linewidth',1.5)
title('titulo')
hold off
for i=1:4
hold on
x=2*sinc(t-i);
subplot(2,2,i);
stem(t,x,'color',k(i,:),'linewidth',0.2)
set(gca,'xtick',-4:1:10)
axis([-4 10 -0.5 3.2])
line([-4 0 0 0 10],[0 0 5 0 0],'linewidth',.8,'color','k')
title(['y=sinc(t-' num2str(i)
')'],'fontweight','bold','color','b')
xlabel('Eixo x')%comando para colocar legenda sobre os eixos
ylabel('Eixo y')
end
%----------------------------------------------------
% Função discreta operação efeito de
% compressão e expansão Sinais
%----------------------------------------------------
close all
clf
clear all
n=-20:1:20;
t=-20:0.001:20;
for i=1:4
subplot(2,2,i);% Grafico de indice i
hold on
if i==1
y=sinc(n/4);
x=sinc(t/4);
str=strcat('operacao ',['y=sinc(n/4)'])
77
P á g i n a | 78
title(str,'fontsize',10,'FontAngle','italic')
elseif i==2
y=sinc(2*n/4);
x=sinc(2*t/4);
str=strcat('operacao ',['y=sinc(n/2)'])
title(str,'fontsize',10,'FontAngle','italic')
elseif i==3
y=1-sinc(n/8)
x=1-sinc(t/8);
str=strcat('operacao ',['y=1-sinc(n/8)'])
title(str,'fontsize',10,'FontAngle','italic')
else
y=sinc(n/4-2);
x=sinc(t/4-2);
str=strcat('operacao ',['y=sinc(n/4-2)'])
title(str,'fontsize',10,'FontAngle','italic')
end
plot(t,x,'color','g','linewidth',1.8)
stem(n,y,'filled','color','b','linewidth',1.2)
set(gca,'xtick',-20:2:20)
axis([-18 18 -0.5 1.4])
line([-18 0 0 0 0 18],[0 0 5 -2 0
0],'linewidth',.8,'color','r')
grid
xlabel('Eixo x','FontAngle','italic')
ylabel('Eixo y','FontAngle','italic')
hold off
end
NB: A função linspace é uma forma prática de se gerar vectores quando sabemos
quantos pontos ele deve ter.
%----------------------------------------------------
% Objetivo: Escreva um programa para gerar
% sinal de impulso unitário
%----------------------------------------------------
t = -5: 0.01: 5;
x1 = 1. * (t == 0);
78
P á g i n a | 79
x2= 1.*(t==0);
x = x1 + x2;
figure(1)
%----------------------------------------------------
%----------------------------------------------------
% Experimento: Degrau unitário:
%----------------------------------------------------
fs = 10;
ts = [0:1/fs:5 5:1/fs:10];
x = [zeros(1,51) ones(1,51)];
stairs(ts,x)
%----------------------------------------------------
% Objetivo: escrever um programa para gerar Escalão unitário
%----------------------------------------------------
t = -5: 0.01: 5;
x1= 1.*(t>=0);
79
P á g i n a | 80
x2 = 0. * (t <0);
x = x1 + x2;
figure(1)
%----------------------------------------------------
%----------------------------------------------------
% % Degrau Unitário (step):
%----------------------------------------------------
y = ones(1,11);
stem(y)
axis([-1 12 0 1.1])
%----------------------------------------------------
% Impulso unitário:
%----------------------------------------------------
ts = 0:0.5:5;
x = [1 zeros(1,length(ts)-1)];
stem(ts,x)
80
P á g i n a | 81
axis([-1 6 0 1.2])
%----------------------------------------------------
% Impulso Unitário:
%----------------------------------------------------
y = [1 zeros(1,10)];
stem(y)
axis([-1 12 0 1.2])
%----------------------------------------------------
% Impulso com largura w:
%----------------------------------------------------
fs = 10; w = 0.1;
ts = [-1:1/fs:-w 0 w:1/fs:1];
x = [zeros(1,10) 1 zeros(1,10)];
plot(ts,x)
81
P á g i n a | 82
%----------------------------------------------------
%----------------------------------------------------
% Rampa: y = 2*t;
%----------------------------------------------------
y = 2*t;
plot(y);
title('Sinal de Rampa');
%----------------------------------------------------
% Objectivo: escrever um programa para gerar rampa unitaria
%----------------------------------------------------
t=-5:0.01:5 ;
x1= t.*(t>=0);
x2= 0.*(t<0);
x= x1+x2;
figure(1)
plot(t,x);
%---------------------------------------------------
%----------------------------------------------------
82
P á g i n a | 83
% Senoides:
%----------------------------------------------------
% Parâmetros de senoides:
% Amplitude, A
% Frequência, f
% Fase, φ
% Deslocamento Vertical (polarização, offset), B
% A forma geral de uma senoide é: y = A.sen(2πft + φ) + B
% Exemplo: gerar uma senoide com as seguintes
% especificações: A = 5; f = 2 Hz; φ = π/8 rad.
t = linspace(0,1,1001);
Ampl = 5;
freq = 2;
fase = pi/8;
plot(t, senoide)
%----------------------------------------------------
%----------------------------------------------------
% Objetivo: escrever um programa para gerar onda sin com
% frequência "F = 300Hz "
%----------------------------------------------------
T= 1/F ;
t=0:3*T/100:3*T ;
y= sin(2*pi*F*t);
figure(1)
subplot(2,1,1)
83
P á g i n a | 84
plot(t,y);
subplot(2,1,2)
stem(t,y);
%----------------------------------------------------
Entrada: insira a frequência da onda sin: 300Hz
%----------------------------------------------------
% Objectivo: escrever um programa para gerar a onda Sinc(t)
%----------------------------------------------------
t=-5:0.1:5 ;
y= sinc(t);
figure(1)
subplot(2,1,1)
plot(t,y)
title('sinal Sinc');
84
P á g i n a | 85
subplot(2,1,2)
stem(t,y);
title('sequência Sinc');
%----------------------------------------------------
squad1 = square(2*pi*4*t);
plot(t,squad1)
%----------------------------------------------------
% Duty cycle de 75% e frequência de 4 Hz.
%----------------------------------------------------
figure
t = linspace(0,1,1001);
squad2 = square(2*pi*4*t,75);
plot(t,squad2)
%----------------------------------------------------
85
P á g i n a | 86
%----------------------------------------------------
% Objectivo: escrever um programa para gerar ondas quadradas
% com frequência F = 10 Hz"
%----------------------------------------------------
F = input(' insira a frequência da onda quadrada: ');
T = 1 / F;
t = 0: 3 * T / 100: 3 * T;
y= square(2*pi*F*t);
figure(1)
subplot(2,1,1)
plot(t,y);
ylabel('amplitude x(t)');
subplot(2,1,2)
stem(t,y);
%----------------------------------------------------
Entrada:Insira a frequência da onda quadrada: 10Hz
%----------------------------------------------------
86
P á g i n a | 87
T = 1 / F;
t = 0: 3 * T / 100: 3 * T;
y= sawtooth(2*pi*F*t);
figure(1)
subplot(2,1,1)
plot(t,y);
subplot(2,1,2)
stem(t,y);
%----------------------------------------------------
Entrada: insira a frequência da onda dente de serra: 2000 Hz
87
P á g i n a | 88
%----------------------------------------------------
t=linspace(0,1,1001);
ds1=sawtooth(2*pi*3*t);
plot(t,ds1)
%----------------------------------------------------
% Pico na metade do período e frequência de 3 Hz.
%----------------------------------------------------
figure
t = linspace(0,1,1001);
ds2 = sawtooth(2*pi*3*t,1/2);
plot(t,ds2)
%----------------------------------------------------
%----------------------------------------------------
% Objetivo: escrever um programa para gerar uma onda
% Triangular com frequência "F = 1 MHz "
%----------------------------------------------------
F = input('insira a frequência da onda triangular :');
T= 1/F ;
t=0:3*T/100:3*T ;
y= sawtooth(2*pi*F*t, 0.5);
figure(1)
subplot(2,1,1)
plot(t,y);
88
P á g i n a | 89
subplot(2,1,2)
stem(t,y);
%----------------------------------------------------
% Sinais Complexos: sinais periódicos podem ser
% representados por exponenciais complexas:
%----------------------------------------------------
f = 0.1;
t = 0:0.05:10;
x = exp(2*pi*j*f*t);
plot(t,real(x),t,imag(x),'r');
grid
title('\bfExponencial Complexa'); xlabel('\itt \rm(s)');
ylabel('Amplitude');
legend('Parte Real','Parte Imaginária'); axis([0 10 -1.1
1.1])
%----------------------------------------------------
%----------------------------------------------------
% Sinais Exponencias Reais Contínuos Crescente e
% Decrescente
%----------------------------------------------------
89
P á g i n a | 90
t = -2:0.1:2;
C = 1;
Alfa = 1;
x = C*exp(Alfa*t);
plot(t, x)
xlabel('t')
ylabel('x(t)')
title('Exponencial Crescente - Alfa = 1 e C = 1')
grid
figure
%----------------------------------------------------
%----------------------------------------------------
% Gera sinal exponencial real contínuo decrescente
%----------------------------------------------------
% Atenção para o valor de alfa
Alfa = -1;
x = C*exp(Alfa*t);
plot(t, x)
xlabel('t')
ylabel('x(t)')
title('Exponencial Decrescente - Alfa = -1 e C = 1')
grid
%----------------------------------------------------
Nota: Calcula agora para alfa=1
%----------------------------------------------------
% Gera as figuras dos Sinais Exponencias Reais
% Contínuos Crescente e Decrescente
90
P á g i n a | 91
%----------------------------------------------------
% Gera sinal exponencial real contínuo crescente
t = -2:0.1:2;
C = 1;
Alfa = 1;
x = C*exp(Alfa*t);
plot(t, x)
xlabel('t')
ylabel('x(t)')
title('Exponencial Crescente - Alfa = 1 e C = 1')
grid
figure
%----------------------------------------------------
% Gera sinal exponencial real contínuo decrescente
%----------------------------------------------------
% Atenção para o valor de alfa
Alfa = -1;
x = C*exp(Alfa*t);
plot(t, x)
xlabel('t')
ylabel('x(t)')
title('Exponencial Decrescente - Alfa = -1 e C = 1')
grid
%----------------------------------------------------
%----------------------------------------------------
% Gera o sinal exponencial complexo contínuo e
% apresenta em 3d e 2d
%----------------------------------------------------
fs = 500;
t = -10:1/fs:30;
Alfa = j;
91
P á g i n a | 92
C = 1;
y = C*exp(Alfa*t);
h = plot3(t, imag(y), real(y), 'b');
hold on;
%----------------------------------------------------
% Plotando partes real e imaginária juntamente da figura 3d
%----------------------------------------------------
h = plot3(t, ones(size(t)), real(y), 'r');
h = plot3(t, imag(y), -ones(size(t)), 'g');
grid on;
xlabel('Tempo (s)')
ylabel('Parte Imaginária')
zlabel('Parte Real')
title('Complexo - Azul Real - Vermelho Imaginário -
Verde')
view(27.5, 22)
%----------------------------------------------------
% Plotando em 2d as partes real e imaginária separadamente
% ----------------------------------------------------
figure
subplot(211)
plot(t, real(y), 'r')
xlabel('t')
ylabel('Parte Real')
grid
subplot(212)
plot(t, imag(y), 'g')
xlabel('t')
ylabel('Parte Imaginária')
grid
%----------------------------------------------------
% Gera o sinal exponencial complexo contínuo crescente
% e apresenta em 3d
%----------------------------------------------------
92
P á g i n a | 93
fs = 500;
t = -10:1/fs:30;
Alfa = 0.05 + 2*j;
C = 1;
y = C*exp(Alfa*t);
h = plot3(t, imag(y), real(y), 'b');
hold on;
%----------------------------------------------------
% Plotando partes real e imaginária juntamente da figura 3d
%----------------------------------------------------
h = plot3(t, ones(size(t)), real(y), 'r');
h = plot3(t, imag(y), -ones(size(t)), 'g');
grid on;
xlabel('Tempo (s)')
ylabel('Parte Imaginária')
zlabel('Parte Real')
title('Complexo - Azul Real - Vermelho Imaginário -
Verde')
view(27.5, 22)
%----------------------------------------------------
% Plotando em 2d as partes real e imaginária separadamente
%----------------------------------------------------
figure
subplot(211)
plot(t, real(y), 'r')
xlabel('t')
ylabel('Parte Real')
grid
subplot(212)
plot(t, imag(y), 'g')
xlabel('t')
ylabel('Parte Imaginária')
grid
%----------------------------------------------------
93
P á g i n a | 94
%----------------------------------------------------
% Gera sinal exponencial real contínuo crescente
%----------------------------------------------------
C = 1;
Alfa = 0.85;
n = -10:10;
x = C*Alfa.^n;
stem(n, x)
xlabel('n')
ylabel('x[n]')
title('Exponencial Descrescente - C = 1 e Alfa = 0.85')
grid
figure
%----------------------------------------------------
% Gera sinal exponencial real discreto decrescente
%----------------------------------------------------
Alfa = 1.2;
x = C*Alfa.^n;
stem(n, x)
xlabel('n')
ylabel('x[n]')
title('Exponencial Crescente - C = 1 e Alfa = 1.2')
grid
figure
%----------------------------------------------------
% Gera sinal exponencial real contínuo alternado crescente
%----------------------------------------------------
Alfa = -1.2;
x = C*Alfa.^n;
stem(n, x)
94
P á g i n a | 95
xlabel('n')
ylabel('x[n]')
title('Exponencial Crescente Alternada - C = 1 e Alfa = -
1.2')
grid
figure
% ----------------------------------------------------
% Gera sinal exponencial real contínuo alternado decrescente
%----------------------------------------------------
Alfa = -0.85;
x = C*Alfa.^n;
stem(n, x)
xlabel('n')
ylabel('x[n]')
title('Exponencial Decrescente Alternada - C = 1 e Alfa = -
0.85')
grid
%----------------------------------------------------
95