回答:
周波数分解能は、FFT長と入力信号のサンプリングレートの関係に依存します。
FFTの8192サンプルを収集すると、次のようになります。
サンプリングレートが10 kHzの場合、ナイキストシャノンサンプリング定理は、信号に最大5 kHzの周波数成分を含めることができると述べています。次に、周波数ビンの解像度は次のとおりです。
これは概念的に説明するのに簡単な方法かもしれませんが、簡略化されています:ビンの解像度は。ここで、は入力信号のサンプリングレートで、NはFFTポイントの数です使用(サンプル長)。 fsamp
上記から、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では、周波数分解能と時間分解能の間には常にトレードオフがあります。すべての目標を達成するには、少しバランスのとれた行動をとる必要があります。
基本的なFFT解像度は。ここで、はサンプリング周波数です。 fs
非常に近接した2つの信号を区別する能力は、相対振幅と使用するウィンドウ関数に大きく依存します。
Baudlineシグナルアナライザーで遊ぶことは、この問題に関する直感を開発するための良い方法であることに気付くかもしれません。
編集:入力にゼロを埋め込み、より大きなFFTを取得するトリックもあります。差別化能力は向上しませんが、スペクトルが読みやすくなります。これは基本的に、ベクターグラフィックスのアンチエイリアスに似たトリックです。
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ビンで強く拾います。