Geração de sinais aleatórios no MATLAB.
referente aula de reposição de 21 nov 2024
1. Geração de sinais determinísticos e aleatórios no MATLAB. Para cada sinal plote a sua
variação temporal e seu respectivo espectro
i) Gere um vetor temporal com 1000 pontos, com freqüência de amostragem, fs=100 Hz
» t=[0:0.01:9.99];
ii) Considerando o vetor temporal acima, gere um sinal periódico simples de amplitude uni-
tária e frequência de 1 Hz. Determine o espectro do sinal e plote o sinal no domínio do
tempo e da frequência.
» s=sin(2*pi*t);
» plot(t,s)
1
0.5
-0.5
-1
0 2 4 6 8 10
» spectrum(s)
5
Pxx - X Power Spectral Density
10
0
10
-5
10
-10
10
-15
10
-20
10
0 02 04 06 08 1
iii) Gere um sinal periódico tipo onda quadrada com frequência de 10 Hz e amplitude unitá-
ria. Integre esse sinal e gere um sinal periódico tipo onda triangular.
» sq=square(2*pi*10*t);
» plot(t,sq)
1
0.5
-0.5
-1
0 2 4 6 8 10
» plot(t(1,1:100),sq(1,1:100))
1
0.5
-0.5
-1
0 0.2 0.4 0.6 0.8 1
iv) Gere um sinal aleatório estacionário com amplitude descrita por uma v.a. com distribui-
ção normal de média, μ=10, e desvio padrão, σ=2. Use o mesmo vetor temporal do item
(i). Plote o espectro do sinal e a sua variação temporal. Plote o histograma da função e
superponha no gráfico a função densidade de probabilidade verdadeira. Repita este pro-
cedimento para um sinal aleatório com amplitude descrita por uma v.a. com distribuição
uniforme no intervalo [-1,1]
» sae=2*randn(t)+10;
» plot(t,sae)
18
16
14
12
10
2
0 2 4 6 8 10
» spectrum(sae)
» hist(sae)
300
250
200
150
100
50
0
2 4 6 8 10 12 14 16 18
» [h,x]=hist(sae,50);
» x1=[2:(18-2)/999:18];
» fdv=1/(2*(2*pi)^.5)*exp(-((x1-10).^2)/(2*2^2));
» bar(x,h/(1000*((18-2)/50)))
» hold
Current plot held
» plot(x1,fdv,’r’)
0.25
0.2
0.15
0.1
0.05
0
2 4 6 8 10 12 14 16 18
» sa=-1+2*rand(size(t));
» hist(sa)
» bar(x,y,'b')
120
100
80
60
40
20
» x2=[-1:(1-(-1))/999:1];
» fd2=1/2+0*x2;
» bar(x,y/(1000*(1-(-1))/10),'b');
» hold
Current plot held
» plot(x2,fd2,'r'),
0.6
0.5
0.4
0.3
0.2
0.1
0
-1 -0.5 0 0.5 1
v) Gere um sinal aleatório não-estacionário com média variante no tempo, p.e., {xk(t)} = a(t)
+ {uk(t)}, onde a(t) é um sinal determinístico e {uk(t)} é um sinal aleatório estacionário.
» xk=sin(2*pi*t)+randn(size(t));
» plot(t,xk)
4
-1
-2
-3
-4
0 2 4 6 8 10
» plot(t(1,1:100),xk(1,1:100))
3
-1
-2
-3
-4
0 0.2 0.4 0.6 0.8 1
vi) Gere um sinal aleatório não estacionário com variância variante no tempo, p.e., {xk(t)} =
a(t).{uk(t)}.
» xk=sin(2*pi*t).*randn(size(t));
» plot(t,xk)
» plot(t(1,1:100),xk(1,1:100))
3
-1
-2
0 0.2 0.4 0.6 0.8 1
2. Gere um conjunto amostral com 100 amostras de um sinal aleatório com estrutura temporal
quasi-periódica mostrada abaixo. Considere a1k e a2k, v.a’s. com distribuição normal (mé-
dia nula e variânça unitária) e ϕ1k e ϕ2k, v.a.’s uniformemente distribuídas no intervalo [0,
2π]
{xk(t)} = a1k sen ( ω1t + ϕ1k) + a2k sen ( ω2t + ϕ2k)
» t=[0:10/99:10];
» a1=randn(1,100);
» a2=randn(1,100);
» fi1=2*pi*rand(1,100);
» fi2=2*pi*rand(1,100);
» w1=2*pi;
» w2=2^.5;
» for i=1:100
for j=1:100
xk(i,j)=a1(1,i)*sin(w1*t(1,j)+fi1(1,i))+a2(1,i)*sin(w2*t(1,j)+fi2(1,i));
end
end
i) Plote um gráfico para a variação temporal dos primeiros 10 registros temporais
» plot(t,xk(1,1:100),'b')
0.4
0.3
0.2
0.1
» plot(t,xk(2,1:100),'g')
1.5
0.5
-0.5
-1
-1.5
0 2 4 6 8 10
» plot(t,xk(3,1:100),'y')
3
-1
-2
-3
0 2 4 6 8 10
» plot(t,xk(4,1:100),'m')
2
1.5
0.5
-0.5
-1
-1.5
-2
0 2 4 6 8 10
» plot(t,xk(5,1:100),'c')
3
-1
» plot(t,xk(6,1:100),'r')
2
1.5
0.5
-0.5
-1
-1.5
-2
0 2 4 6 8 10
» plot(t,xk(7,1:100),'w')
1.5
0.5
-0.5
-1
-1.5
0 2 4 6 8 10
» plot(t,xk(8,1:100),'b-')
1.5
0.5
-0.5
-1
-1.5
0 2 4 6 8 10
» plot(t,xk(9,1:100),'g-.')
2
1.5
0.5
-0.5
-1
» plot(t,xk(10,1:100),'y-.')
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
0 2 4 6 8 10
ii) Monte um histograma para o conjunto amostral num determinado instante de tempo e um
histograma para as variações temporais de uma determinada amostra.
» hist(xk(1:100,25))
25
20
15
10
0
-3 -2 -1 0 1 2
» hist(xk(49,1:100))
20
15
10
0
-2 -1 0 1 2
iii) Monte um programa para calcular a média e a variância amostrais
» for i=1:100
medvar(1,i)=mean(xk(1:100,i));
medvar(2,i)=cov(xk(1:100,i));
end
3. Gere um sinal aleatório composto de uma senoíde de frequência 30 Hz e amplitude 0,1 e
um sinal aleatório com distribuição normal ( μ=0, σ=10). Plote o sinal composto e ache a
sua função de correlação. É possível obter o sinal periódico a partir da correlação? Mostre
o resultado graficamente.
» t=[0:.01:9.99];
» x=0.1*sin(2*pi*30*t)+10*randn(size(t));
» t2=[-9.99:.01:9.99];
» plot(t2,xcorr(x))