复高斯白噪声的产生与叠加方法总结

来源:互联网 发布:类似我要当学霸的知乎 编辑:程序博客网 时间:2024/05/18 15:05
%------------------复高斯白噪声的产生与叠加方法总结
clear all;
clc;
%-----------------------产生复高斯白噪声的方法
N=1000;%样点数N不能太小
%---方法1
noise = sqrt(1)*randn(1,N)+j*sqrt(1)*randn(1,N); %产生复高斯白信号,实、虚部方差均为1
%验证所产生的噪声是否正确
noise_Power=sum(abs(noise).^2)/length(noise);   %求出噪声功率,验证是否为2,结果近似为2
mean0=sum(noise)/N;%验证均值是否为0,结果近似为0


%---方法2
% wgn(m,n,10*log10(p))产生一个m行n列的高斯白噪声的矩阵,所有元素构成的样点的信号功率为p瓦
noise1=wgn(1,N,10*log10(1) )+j*wgn(1,N,10*log10(1) );
%验证所产生的噪声是否正确
noise1_Power=sum(abs(noise1).^2)/length(noise1);   % 验证
mean1=sum(noise1)/N;


%---产生m行n列的复高斯白噪声矩阵,所有元素构成的样点的信号功率为p=1+1=2瓦。产生的复高斯白噪声矩阵,对于某行或某列来说,
%若其中元素数较多(比如大于1000),则该行或该列的方差接近2瓦,否则不然。
%---若想产生m(可以为天线阵列上,m个阵元各自的接收信号中的噪声,m较小,比如10)行n(为样点数,n较大,比如1000)列的复高斯白噪声矩阵,
%---使每一行构成的信号的方差为sigma的高斯白噪声,可以用以下两种方法产生天线阵列接收信号矢量中的噪声矢量,m行n列,例如,下面程序段m=10,n=N=1000
%---方法1
noise2 = sqrt(1)*randn(10,N)+j*sqrt(1)*randn(10,N); %产生复高斯白信号,实、虚部方差均为sigma=1
%验证所产生的噪声是否正确
for k=1:10
    noise2_Power1(k)=sum(abs(noise2(k,:)).^2)/length(noise2(k,:));   %求出噪声功率,验证是否为2,结果近似为2
    mean_noise2(k)=sum(noise2(k,:))/N;%验证均值是否为0,结果近似为0
end
noise2_Power=sum(noise2_Power1)/N;
mean2=sum(mean_noise2)/N;
%---方法2
noise3=wgn(10,N,10*log10(1) )+j*wgn(10,N,10*log10(1) );
%验证所产生的噪声是否正确
for k=1:10
    noise3_Power1(k)=sum(abs(noise3(k,:)).^2)/length(noise3(k,:));   % 验证
    mean_noise3(k)=sum(noise3(k,:))/N;
end
noise3_Power=sum(noise3_Power1)/N;
mean3=sum(mean_noise3)/N;
%-----------------------加复高斯白噪声的方法
sig=ones(10,N)+j*ones(10,N); %信号
y2 = awgn(sig,10,'measured');     %加入信噪比为10db的噪声,加入前预估信号的功率(强度)。
%---验证
noise4=y2-sig;
sig_power=sum( sum(abs(sig).^2) )/(10*N); 
noise4_power=sum( sum(abs(noise4).^2) )/(10*N); 
snr=10*log10(sig_power/noise4_power);%数域与dB域的转换:x=10*log10(x)[dB]


sig_1=sig(1,:);
noise4_1=noise4(1,:);
sig_1_power=sum(abs(sig_1).^2) /N; 
noise4_1_power=sum(abs(noise4_1).^2)/N; 
snr1=10*log10(sig_1_power/noise4_1_power);
0 0