0

AndroidプロジェクトでオーディオデータのFFTを計算する必要があり、これを実現するためにjTransformsを使用します。

オーディオデータのサンプルは数秒の長さで、11025ヘルツのサンプルレートで記録されます。

jTransformsでFFTの長さを設定する方法がわかりません。高周波の解像度はあまり必要ないので、1024のサイズで十分です。

しかし、FFTについて学んだことから、FFTサイズFを小さくし、長さがN> Fのサンプルを使用すると、元のサンプルの最初のF値のみが変換されます。

それは本当ですか、それとも私は何か間違ったことを理解しましたか?

それが本当なら、信号全体を変換し、後でFFTサイズを小さくする効率的な方法はありますか?

サポートベクターマシンを使用してさまざまな信号を分類するためにこれが必要です。FFTサイズが1024を超えると、出力として多くの機能が得られるため、FFTの結果をよりコンパクトなベクトルに減らす必要があります。

4

2 に答える 2

1

jTransformライブラリに精通していませんが、計算する前に変換のサイズを実際に設定していますか?時間領域信号とサンプリング周波数(11.025 kHz)の振幅値は、FFTを計算するのに十分です(FFTは一定のサンプリングレートを想定していることに注意してください)。

周波数領域での分解能は、ナイキストの定理によって決定されます。信号の最大分解可能周波数は、サンプリングレートの半分に等しくなります。つまり、11.025 kHzで信号をサンプリングすると、周波数グラフに0 Hz〜5.5125 kHzの周波数値(および対応する振幅)が含まれることが期待できます。

アップデート:

FFT(周波数ビンの狭さ)の解像度は、入力信号が長い場合に増加/改善されます。したがって、周波数の非常に小さな変化を区別する必要がある場合、1024サンプルは十分に長いシーケンスではない可能性があります。それがアプリケーションにとって問題ではなく、データの性質が急速に変化せず、処理時間があれば、平均3〜4のFFT推定を行うと、ノイズが大幅に減少し、推定が向上します。

于 2013-02-10T20:26:28.020 に答える
1

FFT マグニチュードの結果のみが必要な場合は、連続する 1024 チャンク長のデータに対して FFT を繰り返し使用し、連続するすべてのマグニチュードの結果をベクトル合計して、はるかに長い信号全体の推定値を取得します。

これが有用な手法である理由の説明については、スペクトル密度の推定に関するWelch の方法を参照してください。

于 2013-02-10T21:13:29.690 に答える