FFTでスペクトルリークが発生するのはなぜですか?


18

グーグルやウィキペディアで試してみましたが、「入力信号の周波数が2つのビンの間にあるため」という以外の答えは得ていません。

これが理由であると理解していますが、理解できないのは、漏れが隣接する1つのビンだけではなく、いくつかの隣接するビンにまで及ぶように見える理由です。

私が話していることを説明するために、シミュレートされたデータをいくつか示します(投稿の最後のコード): Freq_10

上記は、周波数10の正弦波のFFTスペクトル(対数スケールでプロット)です。サンプリングレートは1、サンプル数は100です。グラフはFFTシフトされています。ビン10には明らかにピークのみがあり、残りは数値誤差のオーダー、またはその付近にあります。

Freq_10_1

これは、10.1の生成された周波数での周波数スペクトルです。明らかに、すぐ隣のビンよりも多くのビンへの「漏れ」があります。

freq_10_5

これは、周波数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など、


FFTのウィンドウ長に正確に合わない信号は、ラップすると不連続性が生じます。インパルスやステップ関数などの不連続性には、すべての周波数の一部が含まれます。
エンドリス

回答:


12

FFTは長さが有限であるため、データストリームのデフォルトの長方形ウィンドウを構成します。時間領域のウィンドウは、ウィンドウの変換を伴う周波数領域の畳み込みをもたらします。矩形ウィンドウの変換はSinc関数(sin(x)/ x)であり、幅が無限であることに注意してください。幅が2ビンだけではありません。したがって、Sinc関数のリップルは、FFTの長さで完全に周期的ではないスペクトルピークから遠く離れた「漏れ」として現れます。

以下の図は、sinc関数の周波数応答の一部を示しています。トーンがビンの1つに集中すると、他のすべてのポイントが周波数応答のヌルと整列します。ビンの中心にない場合は、周波数応答全体をシフトするようなもので、他のビンは周波数応答の非ヌル部分に落ちます。

ここに画像の説明を入力してください

別の見方をすれば、FFTは単なるフィルターバンクであり、各フィルターストップバンドフロアには多くのリップルがあり、中心周波数から1ビン以上離れたところで減衰することは確かではありません。長方形以外の一部のウィンドウ(von Hannなど)には、ストップバンドが低くなっているため、一般的に使用されています。


1
Sinc関数は他のすべてのビンの中心周波数(これらのフィルターカーネルに完全に直交し、 FFT基底ベクトル)。
hotpaw2

編集を気にしないでください。気に入らなければ放り投げてください。
ジム・クレイ

@Jim Clay:追加されたグラフをありがとう。iPhoneから送信する方法がわかりませんでした。
hotpaw2

1
ありがとう、ありがとう、ありがとう。「FFTは入力シーケンスが周期的であると想定しています」と言って、漏れを説明しないでいただきありがとうございます。「想定される周期性」というその愚かな概念は、悲しいことに、DSPの文献であまりにも頻繁に繰り返されています。[-Rick

たとえば、FFTフレーム長のシャフト回転同期サンプリングを行う(または教室の合成例を作成する)場合などに、入力の周期性の仮定が役立つことがあります。ただし、オーディオ(など)では、周期性の長さに関係のないデータフレームのセクショニングとウィンドウ化がより一般的であるため、これらの領域での作業では通常、仮定が間違っています。
hotpaw2

0

hotpaw2の回答は良いですが、user5133のコメントについて少し詳しく説明します。

「FFTは入力シーケンスが周期的であると想定しています」と言って、漏れを説明しないでいただきありがとうございます。「想定される周期性」というその愚かな概念は、悲しいことに、DSPの文献であまりにも頻繁に繰り返されています

同時に質問にも答えてください。私はこの分野の専門家であることに注意してください---コメント、修正、確認をお気軽に。

Z{1,2,,N}

X(ω)=n=x[n]eiωn.

NNZ

Xk =def n=0N1xne2πikn/N,kZ
X(2πk/N)n{1,2,,N}x[n]w[n]wn{1,,N}

ただし、製品のフーリエ変換は、フーリエ変換の畳み込みです。

F{fg}=F{f}F{g}

sinc

w(f)ejωtdt=ττejωtdt=2τsinc(ωτ)

sinc


@ user5133はもうぶらぶらしていないようです。しかし、Rickの感謝は間違っています。「FFTは入力シーケンスが周期的であると仮定して、漏れを説明してくれてありがとう。」「想定される周期性」というその愚かな概念は、悲しいことに、DSPの文献であまりにも頻繁に繰り返されています。」彼は間違っています。DFTは、確実に、渡された有限長データを定期的に拡張します。DFT 、渡されるデータが周期的なシーケンスの1つの期間であると想定します。
ロバートブリストージョンソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.