我试过谷歌搜索和维基百科,但除了“这是因为输入信号的频率位于两个箱之间”之外,我没有得到任何答案。
我知道这是原因,但我无法理解的是为什么泄漏似乎延伸到几个相邻的垃圾箱,而不仅仅是一个相邻的垃圾箱。
为了说明我在说什么,这里有一些模拟数据(代码在帖子末尾):
上图是频率为 10 的正弦波的 FFT 频谱(以对数刻度绘制)。采样率为 1,样本数为 100。该图已进行 FFT 移位。显然,在 bin 10 处只有一个峰值,其余的都在数值误差的数量级上,或者差不多。
这是生成频率为 10.1 的频谱。显然,除了紧邻的垃圾箱之外,还有更多垃圾箱“泄漏”。
这是频率为 10.5 的图。
问题:为什么会出现这种泄漏,为什么它会延伸到所有其他垃圾箱,而不是直接相邻的垃圾箱?
代码,任何有兴趣的人(Python代码)
import numpy as np
import matplotlib.pyplot as plt
xFreq = 10.5
xSize = 100.0
xPeriod = xSize/xFreq
x = np.linspace(1,xSize,xSize)
data = np.sin(2*np.pi*x/xPeriod)
fft = np.fft.fft(data)
fft = np.fft.fftshift(fft)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(abs(fft), "o")
ax.set_yscale('log')
plt.show()
我将xFreq
值从更改10.0
为10.5
等。