【问题标题】:Defining a white noise process in Python在 Python 中定义白噪声过程
【发布时间】:2015-11-21 03:37:10
【问题描述】:

我需要从白噪声过程中抽取样本,以便以数值方式实现特定的积分。

如何使用 Python(即 numpy、scipy 等)生成它?

【问题讨论】:

    标签: python numpy scipy probability noise


    【解决方案1】:

    使用numpy.random.normal 创建具有正态分布(高斯)的随机样本:

    import numpy as np
    import seaborn as sns
    
    mu, sigma = 0, 1 # mean and standard deviation
    s = np.random.normal(mu, sigma, size=1000) # 1000 samples with normal distribution
    
    # seaborn histogram with Kernel Density Estimation
    sns.distplot(s, bins=40, hist_kws={'edgecolor':'black'})
    

    【讨论】:

      【解决方案2】:

      简短的答案是numpy.random.random()Numpy site description

      但由于我发现越来越多类似问题的答案写成numpy.random.normal,我怀疑需要稍微描述一下。如果我确实正确理解了维基百科(以及大学的一些课程),那么高斯和白噪声是两个不同的东西。白噪声具有均匀分布,而不是正态分布(高斯)。

      import numpy.random as nprnd
      import matplotlib.pyplot as plt
      
      num_samples = 10000
      num_bins = 200
      
      samples = numpy.random.random(size=num_samples)
      
      plt.hist(samples, num_bins)
      plt.show()
      

      这是我的第一个答案,所以如果你纠正我在这里可能犯的错误,我很乐意更新它。谢谢=)

      【讨论】:

      • White noise has Uniform distribution, not Normal (Gaussian). 白噪声必须在频率上具有均匀分布,但它可以在时间上具有任何分布(例如正态)。
      • 正如维基百科所说:“白噪声是在不同频率下具有相同强度的随机信号”。这意味着只要没有临时相关性,您就可以对信号使用任何类型的 PDF。所以白噪声可以有均匀分布、正态分布或其他类型的分布
      • 这个答案不正确。白噪声是来自任何不相关随机过程的连续过程,如均匀或正常。但是,如果将其数字化,则必须在奈奎斯特频率处应用带通滤波器,否则您对连续过程的近似会包含混叠。事实证明,带通白噪声会导致一个离散的随机过程,其中每个样本都是从高斯/正态分布中挑选出来的。这是你混淆的结果。高斯和白噪声在离散过程中是一回事。高斯是连续白噪声过程的子集
      • @Vortico 有趣的评论!为了理解你在说什么,我打开了follow up question :)。
      【解决方案3】:

      您可以通过numpy.random.normal function 实现此目的,它从高斯分布中抽取给定数量的样本。

      import numpy
      import matplotlib.pyplot as plt
      
      mean = 0
      std = 1 
      num_samples = 1000
      samples = numpy.random.normal(mean, std, size=num_samples)
      
      plt.plot(samples)
      plt.show()
      

      【讨论】:

      • numpy.random.standard_normal(size=num_samples)也可以在mean=0,std=1时使用
      • 只要信号中没有自相关,您就可以使用任何类型的分布来实现这一点。 "numpy.random.uniform(low=0.0, high=1.0, size=1000)", "np.random.triangular(-3, 0, 8, 100000)" 也会得到白噪声。您还可以进行相关信号处理,并使用“numpy.random.shuffle”将其随机化以获得白噪声。
      猜你喜欢
      • 2016-02-07
      • 1970-01-01
      • 2020-06-06
      • 2012-12-18
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2011-12-20
      • 2019-04-08
      相关资源
      最近更新 更多