代码如下:
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会产生一个特定的数字?你知道吗
(感谢保罗·潘泽和侦探)
[2019/03/29更新]
有了标准化的数据,一切都很顺利
b = mkl_fft.fft((a - np.mean(a))/np.std(a))
(a - np.mean(a))/np.std(a)
的平均值接近于零
这就是恒定或零频率模式,基本上就是信号的平均值。你是从单位区间均匀取样,所以平均值是~0.5。一些fft实现用点数来缩放以保存乘法。你知道吗
FFT输出中的大值恰好是对应于直流分量的第一个值。这表示输入在整个数据集上具有非零的平均值。你知道吗
实际上,如果仔细查看输入数据,您可能会注意到这些值总是在0和1之间,平均值在0.5左右。这与
rand
函数实现是一致的,它提供了从[0,1]上的均匀分布中提取的伪随机样本。你知道吗你可以用平均值减去
注意大的初始值
b[0]
应该接近于零。你知道吗相关问题 更多 >
编程相关推荐