python产生高斯白噪声,python加噪声

  python产生高斯白噪声,python加噪声

  介绍了如何利用Python自行生成随机序列,并实现了Whichmann/Hill生成器。

  参考:

  基本原理

  本文将随机数大致分为均匀分布和非均匀分布两种。通过非线性变换可以得到均匀分布的随机数。所以均匀分布的随机数更基本。引文[3]提到了三种生成算法:线性同余法、联合法和反馈位移寄存器法。限于时间,简单介绍一下线性同余法:

  线性同余是基于同余计算的方法,将原来的序列重新排列。该方法从一个“种子”开始,递归地得到整个随机序列[3]:

  \begin{equation}

  x _ I=ax _ { I-1 } c \ quad \ left(\ mod m \ quad \ right)

  \end{equation}

  其中$x_i$,$a$和$c$都是正整数,$x_0$称为种子,$a$称为乘数,当$c=0$时,称为乘法同余法,反之亦然。

  查语录[3]这本书,全是英文的,但是很长,不过我还是翻了翻。当我翻到第47页时,我发现了算法的清晰表达。该算法由Wichmann和Hill于1982年发表,将三个生成器组合成一个同余生成器。由于易于编程且随机性极好(书中简述了相关研究),本文选择该算法实现[1]:

  \begin{equation}

  \begin{cases}

  x_i \equiv 171x_{i-1}\mod 30269 \\

  y_i \equiv 172x_{i-1}\mod 30307\\

  z_i \equiv 170x_{i-1}\mod 30323\\

  u _ I=\ left(\ dfrac { x _ I } { 30269 } \ dfrac { y _ I } { 30307 } \ dfrac { z _ I } { 30323 } \ right)\ mod 1

  \end{cases}

  \end{equation}

  生成器的种子是$\left(x_0,y_0,z_0\right)$,是一个三元向量。生成器在区间$\left(0,1\right)$内直接生成$u_i$。从最后的表达式可以看出,分母的值很大。

  实现

  为了减少代码量,我把$ x,y,z $放在一个名为x的变量下,把A,B设置为np.array格式,避免序列之间不支持对应元素的乘,除,求补的问题。

  # -*-编码:utf-8 -*-

  创建于8月28日星期二

  @作者:adgk07

  生成噪声信号的脚本

  将numpy作为np导入

  来自pylab import *

  S=[1,3,7] #用户定义种子

  L=1024 #用户定义长度

  a=np.array([171。 172, 170])

  b=np.array([30269。 30307, 30323])

  x=np.zeros((L,3))

  x[0]=S

  y=np.zeros(L)

  y[0]=np.sum(S/b)%1

  对于np.arange(L-1)中的数字:

  x[数字1]=(a* x[数字])%b

  y[数字1]=NP . sum(x[数字1]/b)%1

  绘图(y)

  显示()

  上面的例程可以重写为一个函数。

  结束

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: