グーグルやウィキペディアで試してみましたが、「入力信号の周波数が2つのビンの間にあるため」という以外の答えは得ていません。
これが理由であると理解していますが、理解できないのは、漏れが隣接する1つのビンだけではなく、いくつかの隣接するビンにまで及ぶように見える理由です。
私が話していることを説明するために、シミュレートされたデータをいくつか示します(投稿の最後のコード):
上記は、周波数10の正弦波のFFTスペクトル(対数スケールでプロット)です。サンプリングレートは1、サンプル数は100です。グラフはFFTシフトされています。ビン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
など、