奇怪的FFT图与numpy随机s

2024-04-19 07:57:41 发布

您现在位置:Python中文网/ 问答频道 /正文

代码如下:

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)

结果是: output

您可以看到:

Weird FFT Number is  (50020.99077289924+0j)

为什么随机集的FFT会产生一个特定的数字?你知道吗


(感谢保罗·潘泽和侦探)

使用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)的平均值接近于零


Tags: importfftnumpynumberisasnpplt
2条回答

这就是恒定或零频率模式,基本上就是信号的平均值。你是从单位区间均匀取样,所以平均值是~0.5。一些fft实现用点数来缩放以保存乘法。你知道吗

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

实际上,如果仔细查看输入数据,您可能会注意到这些值总是在0和1之间,平均值在0.5左右。这与rand函数实现是一致的,它提供了从[0,1]上的均匀分布中提取的伪随机样本。你知道吗

你可以用平均值减去

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

注意大的初始值b[0]应该接近于零。你知道吗

相关问题 更多 >