用Box-Muller方法在Python中生成高斯随机数

时间:2014-11-21 03:25:17

标签: python random gaussian

现在,我正在使用Box-Muller方法在python中生成10个24高斯随机数。我应该绘制功率谱,并看到高斯曲线。我的代码如下:

import numpy as np
import matplotlib.pyplot as plt
def fast_fourier_transform(y):
    '''Return the fast Fourier transform of y.'''
    Y = np.fft.fft(y)
    f = np.fft.fftfreq(len(y),1.0/1024)
    return f,Y

    rlist=[]

    for i in range((2**10)/2):
        mu=0
        sigma=1

    u = np.random.random()
    v = np.random.random()

    z1 = np.sqrt(-2.0 * np.log(u)) * np.sin(2.0 * np.pi * v)
    z2 = np.sqrt(-2.0 * np.log(u)) * np.cos(2.0 * np.pi * v)

    x1 = mu + z1 * sigma
    x2 = mu + z2 * sigma
    rlist.append(x1)
    rlist.append(x2)
    print u, v, x1, x2
f,Y=fast_fourier_transform(rlist)
plt.plot(f,Y)

plt.show()

然而,当我绘制这个时,我没有得到高斯分布。我的问题是:为什么我的高斯生成的白噪声功率谱中没有得到高斯分布?我是否在策划错误?提前谢谢。

1 个答案:

答案 0 :(得分:1)

要查看高斯曲线,您需要直方图而不是功率谱。独立随机变量的功率谱是均匀的(平坦的)。术语“白噪声”本身就是一个很大的暗示 - 白光在所有频率下由等量的光组成。