0

私は自分の目的のために速く邪悪なように見えるJtransformsライブラリを使用しています。

この時点で、FFTがどのように機能するかをかなりよく理解していると思うので、スペクトログラムなどのオーディオの視覚化に使用される標準ドメインの形式があるかどうか疑問に思っています。

2.3のandroidのネイティブFFTのおかげで、範囲としてバイトを使用していましたが、署名されているかどうかはまだわかりません。(Javaには符号なしバイトがないことは知っていますが、Googleはこれらの関数をネイティブに実装しており、波形はPCM 8ビット符号なしです)

ただし、マイクオーディオと2.1電話で動作するようにアプリを調整しています。この時点で、入力ドメインが[-128、127]または[0、255]であるかどうかにかかわらず、バイトの範囲内にあることは、もはや完全に最適ではないようです。

簡単にスケーリングできるように、FFT関数の範囲を[0,1]にします。

では、[-1、1]または[0、1]のドメインを使用する必要がありますか?

4

2 に答える 2

3

基本的に、入力ドメインは重要ではありません。せいぜい、それは元のデータのオフセットとスケーリングの変化を引き起こし、それはそれぞれビン#0のオフセットと周波数領域の結果のスケーリングの全体的な変化に変わります。

FFT出力を[0,1]に制限することに関して; それは本質的に不可能です。一般に、FFT出力は複雑になり、出力が正の実数に制限されるように入力データを操作する方法はありません。

于 2012-06-08T19:52:54.247 に答える
0

FFTの代わりにDCTを使用する場合、出力範囲は実際になります。(違いについて読み、DCTがアプリケーションに適しているかどうかを判断してください。)

(入力ドメインとしての)実数のFFT実装は、出力範囲のサンプルの半分を使用します(入力が実数の場合にのみ結果があるため)。したがって、各サンプルに実数部と虚数部の両方があるという事実は、結果のサイズ(ソースのサイズに対して)多く(出力サイズはceil(n / 2)* 2)。

于 2012-06-08T20:14:00.520 に答える