随机信号相关仿真
题目一
产生100个
N
=
2000
N=2000
N=2000 的独立同分布的均值为0,方差为1的高斯分布随机数的离散时间序列,计算序列的自相关估值和功率谱密度的平均值
matlab实现代码如下:
%%
% 2024-08-13
% StarsZong
clear, clc;
close all;
mu = 0;
sigma = 1;
N = 100;
n = 2000;
R = normrnd(mu, sigma, N, n);
for i = 1: N
[Rx(i, :), lags] = xcorr(R(i, :), 20, 'coeff');
Sf(i, :) = fftshift(abs(fft(Rx(i, :))));
end
Rx_av = sum(Rx)/N;
Sf_av = sum(Sf)/N;
subplot(2, 1, 1);
plot(lags, Rx_av);
title('自相关系数');
axis([-20, 20, -0.5, 1.5]);
subplot(2, 1, 2);
plot(lags, Sf_av);
title('功率谱密度');
axis([-20, 20, 0, 2]);
实验结果如下:
注:
信号的功率谱密度与自相关函数互为傅里叶变换对
题目二
已知一噪声的自相关函数为
R
(
τ
)
=
s
i
n
(
2
B
τ
)
c
o
s
(
2
π
f
0
τ
)
R(\tau)=sin(2B\tau)cos(2\pi f_{0} \tau)
R(τ)=sin(2Bτ)cos(2πf0τ) ,其中
B
=
20
,
f
0
=
100
B=20, f_0 = 100
B=20,f0=100 ,试求该随机过程的功率谱密度
matlab实现代码如下:
%%
% 2024-08-13
% StarsZong
clear, clc;
close all;
B = 20;
f0 = 100;
fs = 20000; %-->采样率
N = 2000; %-->采样区间
dt = 1/fs;
t = 0: dt: (N-1)*dt;
Rt = sin(2*B*t).*cos(2*pi*f0*t);
Sf = fftshift(abs(fft(Rt)));
w = (-N/2: 1: N/2-1)*fs/N;
plot(w, Sf);
title('功率谱密度');
axis([-10^3, 10^3, 0, 500]);
实验结果如下:
注:
将
f
0
f_0
f0看作载波,B看作信号 --> 载波:频谱/功率谱的偏移量,信号:频谱/功率谱的带宽
题目三
估计两个正弦信号加高斯白噪声的功率谱,信号为
S
(
t
)
=
c
o
s
(
2
π
f
1
t
)
+
c
o
s
(
2
π
f
2
t
)
S(t) = cos(2\pi f_1t) + cos(2\pi f_2t)
S(t)=cos(2πf1t)+cos(2πf2t),其中
f
1
=
300
f_1 = 300
f1=300,
f
2
=
310
f_2 = 310
f2=310
matlab实现代码如下:
%%
% 2024-08-13
% StarsZong
clear, clc;
close all;
f1 = 300;
f2 = 310;
fs = 20000;
N = 2000;
dt = 1/fs;
t = 0: dt: (N-1)*dt;
aix = 3000;
st = cos(2*pi*f1*t) + cos(2*pi*f2*t);
No=wgn(1,N,1); %加噪声
St = st + No;
[Rx, lags] = xcorr(St, aix, 'coeff');
Sf = fftshift(abs(fft(Rx)));
subplot(2, 1, 1);
plot(lags, Rx);
title('自相关系数');
axis([-aix, aix, -0.5, 1.5]);
subplot(2, 1, 2);
plot(lags, Sf);
title('功率谱密度');
axis([-aix, aix, 0, 300]);
实验结果如下:
代码相关
xcorr:计算相关函数
fft:计算傅里叶变换
fftshift:将傅里叶变换频谱移动到中心点(原点)
wgn:添加高斯白噪声
不清楚的函数可在matlab内通过:"help 函数名" 进行函数查看