高斯白噪声 python

numpy.random.normal()和numpy.random.randn()产生的都是高斯白噪声。

计算信噪比也就是简单的对信号的乘方求和而已,例如如果你有信号x和噪声n,

那么信噪比就是:

信噪比,为有用信号功率(Power of Signal)与噪声功率(Power of Noise)的比。因此为幅度(Amplitude)比的平方:它的单位一般使用分贝,其值为十倍对数信号与噪声功率比:


其中

 为信号功率(Power of Signal)。
 为噪声功率(Power of Noise)。
 为信号幅度(Amplitude of Signal)。
 为噪声幅度(Amplitude of Noise)。
--------------------- 
作者:xiahouzuoxin 
来源:CSDN 
原文:https://blog.csdn.net/xiahouzuoxin/article/details/10949887 
版权声明:本文为博主原创文章,转载请附上博文链接!

10*log10( sum(x**2) / sum(n**2))


根据以上信息可以编写如下程序。

wgn(x, snr)中x为信号,snr为信噪比,返回满足条件的高斯白噪声,只需要:

x += wgn(x, snr),即可以得到和matlab的awgn相同的效果。

程序中用hist()检查噪声是否是高斯分布,psd()检查功率谱密度是否为常数。

import numpy as np
import pylab as pl

def wgn(x, snr):
    snr = 10**(snr/10.0)
    xpower = np.sum(x**2)/len(x)
    npower = xpower / snr
    return np.random.randn(len(x)) * np.sqrt(npower)

t = np.arange(0, 1000000) * 0.1
x = np.sin(t)
n = wgn(x, 6)
xn = x+n # 增加了6dBz信噪比噪声的信号
pl.subplot(211)
pl.hist(n, bins=100, normed=True)
pl.subplot(212)
pl.psd(n)
pl.show()

 

http://python.6.x6.nabble.com/CPyUG-td2742236.html

WGN程序理解--利用SNR公式,非db形式

SNR就是信号的强度除以噪声的强度,所以,首先来讲讲信号的强度。其实信号的强度指的就是信号的能量,在连续的情形就是对f(x)平方后求积分,而在离散的情形自然是求和代替积分了。在matlab中也是这样实现的,只不过多了一个规范化步骤罢了:
   sigPower = sum(abs(sig(:)).^2)/length(sig(:))
这就是信号的强度。至此,SNR的具体实现也不用多说了(注:由于采用的是比值而非db,所以与下面“计算信噪比”所使用的方式不同,即没有求对数步骤)。
最后说说awgn函数具体是如何添加噪声的。事实上也很简单,在求出f的强度后,结合指定的信噪比,就可以求出需要添加的噪声的强度noisePower=sigPower/SNR。由于使用的是高斯白噪声即randn函数,而randn的结果是一个强度为1的随机序列(自己试试sum(randn(1000,1).^2)/1000就知道了,注意信号的长度不能太小)。于是,所要添加的噪声信号显然就是:sqrt(noisePower)*randn(n,1),其中n为信号长度。

https://blog.csdn.net/snow_zheng/article/details/45099131

  • 17
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值