2

FPGAチップに埋め込まれるリアルタイムオーディオアナライザを設計しています。完成したシステムは、ライブオーディオストリームを読み込み、X個の最も一般的な周波数の周波数と振幅のペアを出力します。

これまでFFTを実装できましたが、現在の出力は各ウィンドウの実数部と虚数部にすぎません。知りたいのは、これを周波数と振幅のペアに変換するにはどうすればよいですか?

私はFFTを読んでいて、それらを大きさと位相の関係に変換する方法を理解していますが、複雑な数学の知識がない人でも読める形式が必要です。

ありがとう


これらの迅速な対応に感謝します!

私が現在取得しているFFTからの出力は、実数と虚数のペアの連続ストリームです。これらを入力パケットと同じサイズ(64個の値)のパケットに分割して配列として扱うか、個別に処理するかがわかりません。

サンプルレートは問題ありません。FFTを自分で設定したので、50MHzのグローバルクロックで動作していることがわかります。配列インデックス(出力がもちろん配列の場合...)については、私にはわかりません。

出力が64の複素数値の一連の1次元配列であると言う場合:

1)配列インデックス[i]を見つけるにはどうすればよいですか?

2)各配列は単一の周波数部分を返しますか、それとも複数の周波数部分を返しますか?

本当にありがとうございました!私はそれなしでは道に迷うでしょう。

4

2 に答える 2

5

まあ、悪いニュースは、複素数を理解する必要があることを回避する方法がないということです。良いニュースは、それらが複素数と呼ばれているからといって、それらが複雑であることを意味するわけではないということです したがって、最初にウィキペディアのページを確認してください。オーディオアプリケーションの場合は、セクション3.2について読み、平方根のセクションをスキップしてください。http: //en.wikipedia.org/wiki/Complex_number

つまり、複素数a + biがある場合、位置(a、b)のx、y平面に住んでいると想像することができます。振幅と位相を取得するには、次の2つの量を見つけるだけです。

  • 平面の原点からの距離、つまり大きさ、および
  • 位相であるx軸からの角度。

大きさは十分に単純です:sqrt(a ^ 2 + b ^ 2)。

フェーズも同様に単純です:atan2(b、a)。

于 2012-02-26T16:39:41.967 に答える
3

FFTの結果は、複素数値の配列を提供します。各配列要素の2倍の大きさ(複素数成分の合計の平方根の2乗)は振幅です。または、dBスケールが必要な場合は、対数の大きさを実行します。配列インデックスは、その振幅を持つ周波数ビンの中心を示します。各配列要素またはビンの頻度を取得するには、サンプルレートと長さを知る必要があります。

f[i] = i * sampleRate / fftLength

配列の前半(残りの半分は、実際のオーディオ入力用の複素共役の形式の重複情報です)。

各FFT結果ビンの周波数は、ウィンドウ処理またはいわゆるスペクトル漏れのために、オーディオ信号に存在する実際のスペクトル周波数とは異なる場合があります。詳細については、頻度推定方法を調べてください。

于 2012-02-27T02:13:24.330 に答える