我已经尝试使用谷歌搜索和维基百科了,但是除了“这是因为输入信号的频率位于两个区间之间”之外,我没有得到任何答案。
我知道这是原因,但是我不明白的是为什么泄漏似乎扩展到几个相邻的容器,而不是仅一个相邻的容器。
为了说明我在说什么,这里有一些模拟数据(文章末尾的代码):
上面是频率为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
,等等。