matlab中产生高斯白噪声信号的方法和其功率计算
- matlab中计算信号能量:
p o w e r = ∑ n = 1 n x 2 ( n ) power= \sum_{n=1}^nx^2(n) power=n=1∑nx2(n)
功率为
p
=
1
n
∑
n
=
1
n
x
2
(
n
)
p= \frac{1}{n}\sqrt{\sum_{n=1}^nx^2(n)}
p=n1n=1∑nx2(n)
对应matlab代码 p=x'*x/n
,或p=sum(abs(x).^2)/length(x)
。
- 在matlab中可以用randn、wgn、awgn产生功率为 $ p$ 瓦高斯白噪声信号
-
randn函数
randn生成信号均值为0,方差(也就是噪声概率)为1w的高斯白噪声1,randn(m,n)生成mxn个
- 若生成的为实信号,则幅度为 p \sqrt{p} p
- 生产复信号,则幅度为 p / 2 \sqrt{p/2} p/2
- 若按照信噪比生成指定信号,假设噪声信号 p n = 1 pn=1 pn=1, s n r = 10 l o g 1 0 p s p n snr=10log10^{\frac{ps}{pn}} snr=10log10pnps,则信号功率 p s = 1 0 s n r 10 ps=10^{\frac{snr}{10}} ps=1010snr,则信号幅度为 u s = p s us=\sqrt{ps} us=ps
randn产生白噪声信号的matlab代码
n=1000; m=10000; % 仿真m次,取其平均 for i =1:m x=randn(n,1);%信号幅度为1 ,均值为0 y=wgn(n,1,10*log10(1));%产生噪声功率为1w的高斯白噪声 px_randn0(i)=(x'*x)/n ; % randn产生幅度为1的信号功率计算,第一种方式 px_randn1(i)=sum(abs(x).^2/n);%randn产生幅度为1的信号功率计算,第二种方式 py_wgn(i)=(y.'*y)/n; %计算wgn产生的1w的信号的功率,应该等于1 end px=mean(px_randn0)%计算randn产生信号的功率,m次取平均 px_2=mean(px_randn1)%计算randn产生信号的功率第二种方法,m次取平均 py=mean(py_wgn) %计算wgn产生信号的功率第二种方法,m次取平均 %% 验证,若x=randn(n,1)+1i*randn(n,1);则px=2py功率为2
-
wgn2
对于高斯白噪声,其功率(单位w)和方差相等。
若要产生一个均值0,方差为0.0965的高斯白噪声,不可直接用wgn(n,1,0.0965)产生可以采用
- x=sqrt(0.0965)*randn(n,1)
- y=wgn(n,1,10*log10(0.0965)) %此处要将方差对应功率,单位w,换算成dbw,即10*log10(0.0965)
-
awgn
%%测试验证代码1 signal_frequency=1.2e9; fs=8e9; pn = 1; n=1000; m=10000; snr=10; x= sqrt(10^(snr/10))*exp(1i*2*pi*(signal_frequency/fs)*[1:n]'); for i =1:m noise = sqrt(pn/2)*(randn(1,n)+1i*randn(1,n)); noise_power(i)=sum(abs(noise.^2))/n; noise_power_2(i)=(noise*noise')/n ;%噪声功率的第二种求法 end sigpower=sum(abs(x.^2))/n noise_mean=mean(noise_power) noise_mean_2=mean(noise_power_2) s_n=10*log10(sigpower/noise_mean) %%测试验证代码2 signal_frequency=1.2e9; fs=8e9; n=200; % x = randn(n,1)+1i*randn(n,1); %产生正弦信号 x= exp(1i*2*pi*(signal_frequency/fs)*[1:n]'); % y = awgn(x,10,'measured'); %加入信噪比为10db的噪声,加入前预估信号的功率(强度) y = awgn(x,10); z=y-x;%噪声信号,要求其方差 sigpower_x = sum(abs(x).^2)/length(x) %求出信号功率 sigpower_x_2=abs((x'*x)/n ) noisepower=sum(abs(y-x).^2)/length(y-x) %求出噪声功率 px=(z'*z)/n %求出噪声功率,第二种求法 % px=mean(abs(z)) snr=10*log10(sigpower_x/noisepower) %由信噪比定义求出信噪比,单位为db
发表评论