如何实现二元正规高斯噪声?

时间:2015-01-31 23:38:20

标签: python random gaussian noise

我想在python或C中实现复杂的标准高斯噪声。这个图显示了我想要实现的内容。

enter image description here

首先我在python中实现它,就像这样。

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import pylab as pl

size = 100000
BIN = 70

x = np.random.normal(0.0,1.0,size)
y = np.random.normal(0.0,1.0,size)

xhist = pl.hist(x,bins = BIN,range=(-3.5,3.5),normed = True)
yhist = pl.hist(y,bins = BIN,range=(-3.5,3.5),normed = True)
xmesh = np.arange(-3.5,3.5,0.1)
ymesh = np.arange(-3.5,3.5,0.1)
Z = np.zeros((BIN,BIN))
    for i in range(BIN):
     for j in range(BIN):
         Z[i][j] = xhist[0][i] + yhist[0][j]
X,Y = np.meshgrid(xmesh,ymesh)
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X,Y,Z)
plt.show()

然而,它不是标准的复杂高斯噪声。

输出数字变为:

enter image description here

我认为高斯噪音是相加的,但为什么它变得如此不同呢?

我已经尝试更改代码部分

x = np.random.normal(0.0,1.0,size)
y = np.random.normal(0.0,1.0,size)

r = np.random.normal(0.0,1.0,size)
theta = np.random.uniform(0.0,2*np.pi,size)
x = r * np.cos(theta)
y = r * np.sin(theta)
然而,结果是一样的。

请告诉我二元标准高斯噪声的正确实现或方程。

1 个答案:

答案 0 :(得分:0)

很抱歉。这是我的错误。

联合概率由产品定义,而不是求和。我是一个完美的傻瓜!

所以

Z[i][j] = xhist[0][i] + yhist[0][j]

一词必须成为

Z[i][j] = xhist[0][i] * yhist[0][j]

我检查了

for i in range(BIN):
    for j in range(BIN):
        integral = integral + Z[i][j] * 0.01

将是1.0。

因此,如果我们需要复杂的标准高斯噪声,我们应该将实际标准高斯噪声添加到实部和虚部。

这是比较图。

enter image description here

enter image description here