300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > matlab中给信号添加高斯白噪声的两种方法 awgn计算过程 randn函数

matlab中给信号添加高斯白噪声的两种方法 awgn计算过程 randn函数

时间:2019-12-17 20:38:56

相关推荐

matlab中给信号添加高斯白噪声的两种方法 awgn计算过程 randn函数

y=awgn(x,snr,px_dBW)

给信号x添加噪声功率为某个值的高斯白噪声。

snr为信噪比,单位dB。

px_dBW为信号x的指定功率(注意,是指定功率,而不是x本身的功率),单位dBW。

缺省时为0dBW,即:

awgn(x,snr)=awgn(x,snr,0)

‘measured’为根据x自动计算出来的本身功率,即用x本身的功率当作指定功率:

px_W= norm(x)^2/length(x)(信号的功率计算请参见本人的另一边文章)

px_dBW=10log10(px_W/1W)

有了信噪比snr和信号的指定功率px_dBW,就可以计算出来要添加的高斯白噪声的功率了,就是开篇的某个值

有了高斯白噪声的功率pn_W,那高斯白噪声序列n本身也可以得到了。

matlab中的randn()函数产生功率为1的高斯分布,则功率为pn_W的高斯分布为

验证:

对两边求功率(平方运算),左边为构造序列的功率,右边为pn_W乘以randn()序列的功率。上面已经说过,randn()序列的功率为1,所以该构造序列的功率就是pn_W,这个构造序列n就是要叠加到原始信号上的高斯白噪声。

matlab代码如下:

%% 信号xt=0:0.01:10;x=sin(2*pi*t);subplot(3,2,[1 2]);plot(t,x);title('x');%% 对比1% 信噪比和信号指定功率snr=20;px_dBW=0;% 调用awgn函数直接计算y1=awgn(x,snr,px_dBW);subplot(3,2,3);plot(t,y1);title(['awgn(x,',num2str(snr),',',num2str(px_dBW),')']);% 调用randn函数产生噪声序列再叠加pn_W=10^((px_dBW-snr)/10);n=sqrt(pn_W)*randn(1,length(x));y2=x+n;subplot(3,2,4);plot(t,y2);title('信号叠加噪声');%% 对比2% 信噪比和信号指定功率snr=10;px_dBW=10;% 调用awgn函数直接计算y1=awgn(x,snr,px_dBW);subplot(3,2,5);plot(t,y1);title(['awgn(x,',num2str(snr),',',num2str(px_dBW),')']);% 调用randn函数产生噪声序列再叠加pn_W=10^((px_dBW-snr)/10);n=sqrt(pn_W)*randn(1,length(x));y2=x+n;subplot(3,2,6);plot(t,y2);title('信号叠加噪声');

图形:

可以看出,两种方法直接调用awgn先用randn得到噪声序列再叠加对信号的畸变程度相同。

并且符合公式结果:

px_dBW越大/snr越小,则噪声的功率越大,信号的畸变越明显。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。