当前如何获取 FFT 阵列的频率?

How do I get the frequencies of an FFT array currently?

看完有关 FFT 和频率的视频后,我尝试重新创建示例代码(如下所示),但出现了问题。在图中,您可以看到峰值为 0.0025 Hz。我不明白为什么。信号是 2*sin(pi*x/8) == 0.0625Hz。然而,绘图显示 0.0600 Hz。

N = 100
f = lambda x : 2 * np.sin(np.pi * x/8)
X = range(N)
y = [f(x) for x in X]
fft = np.fft.fft(y)
fft_abs = 2*np.abs(fft/N)

freq = np.fft.fftfreq(N)
mask = freq > 0

plot.figure(1)
plot.plot(y)
plot.show()

plot.figure(2)
plot.plot(freq[mask],fft_abs[mask])
plot.show()

这是一个简单的分辨率不够的问题。 N 为 100,您的时间步长为 .01,因此 0.0625 会四舍五入到最接近的百分之一 (0.06)。如果您使用更大的数字 N (可能是 1000)时间步长会更小,您可以更好地计算答案。从技术上讲,您可以选择 16 的任意偶数倍数,它会恰好给出准确的值,因为 1/16 = 0.0625.