2
FFTでスペクトルリークが発生するのはなぜですか?
グーグルやウィキペディアで試してみましたが、「入力信号の周波数が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など、