奇怪的FFT图与numpy随机集

问题描述 投票:4回答:2

代码如下:

import numpy as np 
from numpy import random_intel
import mkl_fft
import matplotlib.pyplot as plt

n = 10**5
a = np.random_intel.rand(n)
b = mkl_fft.fft(a)
plt.scatter(b.real,b.imag)
plt.show()
print(b)
for i in b :
    if i.real > n/2:
        print("Weird FFT Number is ",i)

结果是:

你可以看到:

Weird FFT Number is  (50020.99077289924+0j)

为什么带有随机集的FFT出现了一个特定的数字?


(感谢Paul Panzer和SleuthEye)

mkl_fft.fft(a-0.5)最终的结果是:final result


[2019/03/29更新]

通过标准化数据,一切进展顺利

b = mkl_fft.fft((a - np.mean(a))/np.std(a))

(a - np.mean(a))/np.std(a)的平均值接近于零

python numpy fft intel-mkl
2个回答
2
投票

这是恒定或零频率模式,它基本上是信号的平均值。您从单位间隔均匀采样,因此均值为~0.5。一些fft实现使用保存乘法的点数来缩放它。


2
投票

FFT输出中的较大值恰好是对应于DC分量的第一个值。这表示输入在整个数据集上具有非零平均值。

实际上,如果仔细观察输入数据,您可能会注意到值始终在0和1之间,平均值约为0.5。这与rand函数实现一致,该函数实现提供从[0,1]上的均匀分布绘制的伪随机样本。

您可以通过减去平均值来确认这种情况

b = mkl_fft.fft(a - np.mean(a))

并注意到大的初始值b[0]应接近零。

© www.soinside.com 2019 - 2024. All rights reserved.