%------------------复高斯白噪声的产生与叠加方法总结
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);