在观看了有关FFT和频率的视频后,我试图重新创建示例代码(如下所示),但是出了点问题。在该图中,您可以看到峰值为0.0025Hz。我不明白为什么。
信号为 2 * sin(pi * x / 8)== 0.0625Hz 。但是该图显示为0.0600Hz。
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()
答案 0 :(得分:3)
这是一个分辨率不足的简单问题。如果N
为100,则时间步长为.01,因此0.0625会四舍五入到最接近的百分之一(0.06)。如果您使用更高的数字N
(也许是1000)时间步长会更小,您可以更好地计算出答案。从技术上讲,您可以选择16的任何偶数倍,因为1/16 = 0.0625,它会恰好给出正确的值。