FFT長と周波数分解能の関係は何ですか?


67

適切なサンプリング方法(ナイキスト、フィルタリングなど)を使用して信号をサンプリングした場合、FFTの長さと、得られる結果の周波数分解能をどのように関連付けるのですか?

2,000 Hzと1,999 Hzの正弦波がある場合、これら2つの波の違いを正確に判断するために必要なFFTの長さをどのように決定しますか?

回答:


81

周波数分解能は、FFT長と入力信号のサンプリングレートの関係に依存します。

FFTの8192サンプルを収集すると、次のようになります。

8192 samples2=4096 FFT bins

サンプリングレートが10 kHzの場合、ナイキストシャノンサンプリング定理は、信号に最大5 kHzの周波数成分を含めることができると述べています。次に、周波数ビンの解像度は次のとおりです。

5 kHz4096 FFT bins1.22 Hzbin

これは概念的に説明するのに簡単な方法かもしれませんが、簡略化されています:ビンの解像度は。ここで、は入力信号のサンプリングレートで、NはFFTポイントの数です使用(サンプル長)。 fsampfsampNfsamp

上記から、FFTビンを小さくするには、より長いFFTを実行する(つまり、FFTを実行する前に同じレートでより多くのサンプル取得する)か、サンプリングレートを下げることができます。

キャッチ:

時間分解能と周波数分解能の間には常にトレードオフがあります。

上記の例では、FFTを実行する前に8192サンプルを収集する必要があります。これは、10 kHzでのサンプリング時に0.82秒かかります。

長いFFTを実行してより小さいFFTビンを取得しようとすると、必要なサンプルを収集するのにさらに時間がかかります。

それは大丈夫かもしれませんが、そうでないかもしれません。重要な点は、固定サンプリングレートでは、周波数分解能を上げると時間分解能が低下することです。つまり、周波数領域での測定の精度が高いほど、時間領域での精度は低くなります。FFT長内のすべての時間情報を事実上失います。

この例では、1999 Hzトーンが8192サンプルFFTの前半で開始および停止し、2002 Hzトーンがウィンドウの後半で再生される場合、両方が表示されますが、同じタイミングで発生したように見えます時間。

また、処理時間を考慮する必要があります。8192ポイントのFFTにはある程度の処理能力が必要です。この必要性を減らす方法は、サンプリングレートを下げることです。これは、周波数分解能を上げる2番目の方法です。

あなたの例では、サンプリングレートを4096 Hzのようなものに落とした場合、1Hzビン* 4096 Hzを達成するために4096ポイントFFTのみが必要であり、1hzビンを達成するために4096ポイントFFTだけが必要であり、 2khz信号。これにより、FFTビンのサイズが小さくなりますが、信号の帯域幅も小さくなります。

最終的にFFTでは、周波数分解能と時間分解能の間には常にトレードオフがあります。すべての目標を達成するには、少しバランスのとれた行動をとる必要があります。


ヘッダータグといくつかのフォーマットを使用して、この投稿を良いものから素晴らしいものに変えることができます。あなたは私が注意したいすべてのものに触れましたが、非常によく、あなたが議論しているものの各セクションにヘッダーを与えると、投稿がフォーマットされる方法は、その長さが禁止されているため、読む人はジューシーなビットにジャンプしますそれらがスイートになり、+ 1の数が大幅に増加します。もちろん、すでに獲得しているので、私からではありません。
-Kortuk

@kurtuk急いでこれを吐き出します。暇があればフォーマットをクリーンアップします(または、必要に応じて自由に編集してください)。
マーク

1
@kortuk、名前は「o」で始まります。私はあなたが持っていると思っていました、私はあなたがまだ知らないならあなたのためだけでなく、コミュニティ全体のために私の見解を共有しているだけです。
-Kortuk

1
FFTを計算する必要がないことに注意してください。少数のビンのみを知りたい場合は、多くの操作を共有してすべてのビンを一度に計算する最適化されたFFTを実行するよりも、それらのビンのみのDFTを計算する方が安価です。
クリスストラットン

同様の周波数/時間領域のトレードオフがアナログおよびIIRフィルターに適用されることも注目に値します。
カレブレイスター

10

基本的なFFT解像度は。ここで、はサンプリング周波数です。 fsfsNfs

非常に近接した2つの信号を区別する能力は、相対振幅と使用するウィンドウ関数に大きく依存します。

Baudlineシグナルアナライザーで遊ぶことは、この問題に関する直感を開発するための良い方法であることに気付くかもしれません。

編集:入力にゼロを埋め込み、より大きなFFTを取得するトリックもあります。差別化能力は向上しませんが、スペクトルが読みやすくなります。これは基本的に、ベクターグラフィックスのアンチエイリアスに似たトリックです。


ラテックスコードが適切にフォーマットされて表示されないのは私だけですか?
-stevenvh

@stevenvh私にとってもうまくいきません。
テラス

私のために働く。ラテックスはわずか2箇所です。
-Kortuk

2
修正済み(すでにしばらくの間)。FirefoxのNoScriptアドオンはmathjax.orgをブロックしました。
-stevenvh

3

FFTは、Sample [k] * SineRefWave [j] [k]およびSample [j] * CosRefWave [jの合計の個別のペア(k = 0..sample_length-1)を計算することの代替手段であることに注意してください] [k]、サンプル長の半分までのすべてのjに対して。それらすべての周波数で振幅の読み出しが必要な場合、FFTはそれらをすべてO(NlgN)時間で計算しますが、個々に計算するにはO(N ^ 2)時間かかります。一方、いくつかの周波数で振幅の読み取り値のみが必要な場合、特にそのスタイルの合計を効率的に計算できるプロセッサまたはDSPを使用している場合は、単に個別に計算する方が良い場合があります。

また、たとえば20msのサンプリングウィンドウを使用するFFTでは、単一の1975Hzトーン、またはN <25の周波数(1975-N)Hzと(1975 + N)Hzの組み合わせを区別できないことにも注意してください。近くに他のスペクトルコンテンツがない場合、サンプリングウィンドウよりも細かい精度で分離された周波数を測定するために使用できます。1974Hzと1976Hzのトーンの組み合わせと同様に、1950Hzと2000Hzのビンでは、単一の1975Hz周波数が等しくピックアップされます。ただし、孤立した1974Hzトーンは2000Hzビンよりも1950Hzビンで強く拾い、1976Hzトーンは2000Hzビンで強く拾います。


1

周波数分解能はFFTの長さには依存しませんが、合計サンプリング時間Tの長さ、つまり1 / Tに依存します。これは、取得した最低周波数成分でもあります。

ゼロパディングは周波数分解能を増加させないことに注意してください。ゼロパディング信号のDFTは、元の信号のDTFTのより良い近似にすぎません。


0

可能な入力周波数の範囲がわかっていて、範囲が狭い場合は、アンダーサンプリングを適用して、サンプル数とFFTの計算時間を削減できます。256個のサンプルと256 Hzのサンプル周波数により、必要な1 Hzの解像度と128 Hzのエイリアスフリー帯域幅が得られます。


-3

この写真を見てください。それは明らかだ。fsとfftの解像度の関係

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


5
この写真から何が起こっているかは完全には明らかではありません。(写真が英語ではないことは助けになりません。)これは他の答えが言及していないことを何を追加しますか?
グレッグデー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.