在Python中定义一个白噪声过程

27

我需要从一个白噪声过程中提取样本,以便在数值上实现特定积分。

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

3个回答

39

3
当均值为0,标准差为1时,也可以使用numpy.random.standard_normal(size=num_samples) - papahabla
2
只要信号中没有自相关,您可以使用任何类型的分布来实现这一点。 "numpy.random.uniform(low=0.0, high=1.0, size=1000)", "np.random.triangular(-3, 0, 8, 100000)"也会产生白噪声。您还可以拥有一个相关的信号过程,并使用“numpy.random.shuffle”进行随机化以获得白噪声。 - ivangtorre
1
this is not white noise - Alex Monras

7
短答案是numpy.random.random()Numpy网站描述 但是,由于我发现越来越多类似问题的答案写成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()

Image: Result

这是我的第一个回答,如果您发现我在这里可能犯的错误,请告诉我,我会很乐意更新它。谢谢 =)


6
白噪声具有均匀分布,而不是正态(高斯)分布。白噪声在频率上必须具有均匀分布,但在时间上可以具有任何分布,例如正态分布。 - Gluttton
2
正如维基百科所说:“白噪声是一种在不同频率上具有相等强度的随机信号”。这意味着只要没有临时相关性,信号可以具有任何类型的概率密度函数。因此,白噪声可以具有均匀分布、正态分布或其他类型的分布。 - ivangtorre
6
这个回答是不正确的。白噪声是从任何不相关的随机过程中得到的连续过程,例如均匀分布或正态分布。但是,如果将其数字化,则必须在奈奎斯特频率处应用带通滤波器,否则您对连续过程的近似会包含混叠现象。结果表明,带通滤波白噪声会产生离散随机过程,其中每个样本选自高斯/正态分布。这是您混淆的结果。在离散过程中,高斯和白噪声是同一件事情。高斯是连续白噪声过程的子集 - Vortico
1
@Vortico 很有趣的评论!为了理解你的意思,我打开了一个后续问题 :). - bluenote10

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'})

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接