对于微弱的周期信号,我们可以使用自相关检测的方法来检测是否含有输入信号,因为是微弱信号,所以信噪比要比1小,这也噪声比信号来的大,噪声我是使用的是高斯白噪声来模拟,然后使用matlab仿真实现。
matlab程序如下:
dt=0.01;
N=20;
SNR=0.001;%设置信噪比,因为是微弱信号,所以信噪比要设置为低于1
t=0:dt:N;
xt=cos(t);%这是周期的输入信号
yt=awgn(xt,SNR);%加入高斯噪声
[a,b]=xcorr(yt,'unbiased');%利用自相关方法进行检测
subplot(131);
plot(t,xt);
title('xt');
xlabel('t');
ylabel('xt');
axis([0 N -2 2]);
subplot(132);
plot(t,yt);
title('yt=xt+nt');
xlabel('t');
ylabel('yt');
axis([0 N -2 2]);
subplot(133);
plot(b*dt,a);
title('yt自相关')
xlabel('t');
ylabel('xt');
axis([0 N -2 2]);
可以得到如图:
通过改变信噪比,可以看见不同信噪比的情况下,自相关检测的结果为:
当信噪比为1(临界条件)时:
当信噪比为0.1时:
当信噪比为0.01时:
当信噪比为0.001时:
可以看见有检测输入信号。但是可以看见输入信号还是有噪声,主要是高斯噪声,因为高斯噪声在频域是一条水平的直线,综合考虑,使用取样求均值的方法能够更有效的消除噪声。
以下是加了消除噪声的matlab仿真程序:
dt=0.01;
N=20;
SNR=0.001;%设置信噪比,因为是微弱信号,所以信噪比要设置为低于1
t=0:dt:N;
xt=cos(t);%这是周期的输入信号
yt=awgn(xt,SNR);%加入高斯噪声
[a,b]=xcorr(yt,'unbiased');%利用自相关方法进行检测
sb=zeros(1,4001);
sa=zeros(1,4001);
for i=1:1000 %取样1000次,然后求和
yt=awgn(xt,SNR);%加入高斯噪声
[a,b]=xcorr(yt,'unbiased');%利用自相关方法进行检测
sa=sa+a;
sb=sb+b;
end
sa=sa./1000;%取平均
sb=sb./1000;%取平均
subplot(131);
plot(t,xt);
title('xt');
xlabel('t');
ylabel('xt');
axis([0 N -2 2]);
subplot(132);
plot(t,yt);
title('yt=xt+nt');
xlabel('t');
ylabel('yt');
axis([0 N -2 2]);
subplot(133);
plot(sb*dt,sa);
title('yt自相关')
xlabel('t');
ylabel('xt');
axis([0 N -2 2]);
同样是信噪比为0.001,使用自相关检测得到如图:
而之前没有消除噪声的时候,同样是信噪比为0.001的时候,如图:
对比可以看见,yt自相关之后才用取均值的消噪效果好很多。