1

いくつかのオーディオを分析し、できる限り正弦波に分解したいと考えています。私はこれまでFFTを使用したことがなく、FFTWやKissFFTなどの概念と利用可能なライブラリについて、最初の読書をしているだけです.

私はこの点で混乱しています... DFT / FFTは、基本周波数の倍数である特定の周波数でのみ正弦振幅を与えるように聞こえます。たとえば、通常の 44100 Hz でオーディオをサンプリングし、たとえば 256 サンプルのチャンクを選択した場合、そのチャックは 44100/256=172 Hz の 1 サイクルに適合し、DFT は 172 でのサイン振幅を与えます。 172*2、172*3 などでよろしいですか?次に、他の周波数での強度をどのように見つけますか? 20Hz から約 15Khz まで、約 1Hz 刻みでスペクトルを表示したいと思います。

4

3 に答える 3

3

フーリエ分解を使用すると、時間の任意の関数を取得して、それぞれが異なる振幅と周波数を持つ正弦波の合計として記述することができます。ただし、DFT を使用してこの問題に取り組みたい場合は、異なる周波数を区別するために、周波数ドメインで十分な解像度があることを確認する必要があります。それができたら、どの周波数が信号で支配的であるかを判断し、それらの周波数に対応する複数の正弦波で構成される信号を作成できます。サンプリング周波数が 44.1 kHz の場合、256 サンプルのみを見ると、それらの 256 サンプルで検出できる最低周波数は 172 Hz であると言うのは正しいです。

周波数領域で十分な解像度を得る:

「特定の周波数のみ、基本周波数の倍数」の周波数の振幅値は、特定の増分の周波数分解能を持つ DFT ではなく、フーリエ分解に当てはまります。DFT の周波数分解能は、DFT の計算に使用される時間領域信号のサンプリング レートとサンプル数に関連しています。周波数間隔を狭めることで、近接した 2 つの周波数を区別しやすくなります。これには 2 つの方法があります。

  1. サンプリング レートを下げますが、これにより周期的な繰り返しの周波数がより近くなります。(ここで NyQuist の定理を思い出してください)
  2. DFT の計算に使用するサンプル数を増やします。256 個のサンプルしか利用できない場合は、値が 0 のサンプルをデータの末尾に追加する「ゼロ パディング」を実行できますが、これには考慮が必要な影響がいくつかあります。

結論に至る方法:

異なるオーディオ信号の周波数成分を個々のグラフに表すと、振幅が少し異なることがわかります。これは、個々の信号のサウンドが同一ではなく、(周囲やハードウェア自体からの) どの信号にも固有のノイズが常に存在するためです。したがって、2 つ以上の DFT 信号の平均をとってノイズを除去し、周波数成分のより正確な表現を取得する必要があります。アプリケーションによっては、キャプチャしているサウンドが時間の経過とともに著しく急速に変化している場合 (スピーチや音楽など)、これが不可能な場合があります。したがって、平均化は、平均化するすべての信号のサウンドがほぼ等しい場合にのみ有効です (「同じもの」を個別に個別に録音した場合)。明確にするために、たとえば 4 つの時間領域信号から、4 つの周波数領域信号を (DFT 法を使用して) 作成し、4 つの周波数領域信号の平均を 1 つの平均周波数領域信号に計算します。これにより、ノイズが除去され、オーディオに固有の周波数がより適切に表現されます。

別の解決策:

信号に特定の数の主周波数 (多すぎない) が含まれていることがわかっていて、これらの周波数だけに関心がある場合は、ピサレンコの高調波分解 (PHD) または複数信号分類 ( MUSIC、素敵な略語です!) これらの周波数 (および対応する振幅値) を見つけます。これは、DFT よりも計算量が少なくなります。例えば。信号に 3 つの主な周波数が含まれていることがわかっている場合、Pisarenko はこれら 3 つの周波数値を返しますが、DFT はより多くの情報を明らかにし、より多くの結論を導き出すことができることに注意してください。

于 2012-11-02T11:24:46.353 に答える
2

あなたの最初の仮定は正しくありません。FFT / DFTは、特定の離散周波数でのみ振幅を提供しません。これらの離散周波数はビンの中心にすぎず、各ビンは、ウィンドウ(長方形、フォンハンなど)に応じて、非ゼロ帯域幅のメインローブ、およそFFTビン分離の幅または2つを備えた狭帯域フィルターを構成します。 。)FFTの前に適用されます。したがって、ビンの中心間のスペクトルコンテンツの振幅が表示されますが、複数のFFT結果ビンに分散されます。

キー信号の分離が十分に大きく、ノイズレベルが十分に低い場合は、FFT結果を内挿して、ビンの中心間の周波数を調べることができます。Sincカーネルなどの高品質の補間器を使用する必要がある場合があります。

信号の分離が小さいか、ノイズレベルが高い場合は、十分な解像度の情報を収集するために、より長いFFTを供給するために、より長いデータウィンドウが必要になる場合があります。44.1kサンプルレートでの長さ256のFFTウィンドウは、分離できないため、調査したい周波数の中にある場合、数100Hz未満のスペクトルコンテンツに関する十分な情報を収集するにはほぼ確実に短すぎます。 DCバイアス(ビン0)からきれいに。

于 2012-11-02T21:04:41.477 に答える
1

残念ながら、信号の固定サンプル内の周波数を識別するには、ある程度の不確実性があります。短い FFT を使用すると、かなり広い範囲で周波数の違いを判別する方法がありません。長い FFT を使用して周波数領域でより高い解像度を得る場合、周波数の変化をすばやく検出することはできません。これは数学に固有のものです。

私の頭のてっぺん: 15kHz の範囲を 1Hz 刻みで必要とする場合は、15000 ポイントの FFT が必要です。これは、44.1kHz で 1 秒あたり 3 回の周波数プロットを取得することを意味します。(ナイキスト制限が実際に 30kHz の帯域幅を必要とすることを意味するかどうか思い出せないので、2 の係数が欠けている可能性があります。)

短時間フーリエ変換にも興味があるかもしれません。基本的なトレードオフの問題は解決しませんが、実際には必要なものが得られる場合があります。

于 2012-11-02T01:36:16.810 に答える