2012-02-26 9 views
2

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

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

私はFFTにいくつかの読み取りを行ってきた、と私は、彼らは大きさと位相の関係に変換することができます方法を見て私は、複雑な数学の知識がなくても、誰かが読むことができるというフォーマットを必要とします!

おかげ


これらの迅速な対応をありがとう!

私は、現時点では取得していFFTからの出力は、実部と虚ペアの連続的な流れです。私は、これらを入力パケット(64値)と同じサイズのパケットに分割し、それらを配列として扱うか、個別に扱うかはわかりません。

サンプル・レートは、私がして何の問題もありません。私がFFTを自分で設定したとき、私はそれが50MHzのグローバルクロックで動作していることを知っています。配列インデックス(出力がもちろん配列の場合...)、私は分かりません。私たちは、出力が64個の複素数値の1次元配列のシリーズですと言うなら

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

2)各アレイは、単一周波数の一部、またはそれらの数を戻しますか?すべてのあなたの助けを

ありがとうそんなに!私はそれなしで失われるだろう。

答えて

3

FFTの結果は、複雑な値の配列を与えます。各アレイ要素の2倍の大きさ(複素成分の二乗和の平方根)は振幅です。 dBスケールが必要な場合は、ログの大きさを指定します。配列インデックスは、その振幅で周波数ビンの中心を与えます。各配列要素またはビンの頻度を取得するには、サンプルレートと長さを知る必要があります。配列の最初の半分

f[i] = i * sampleRate/fftLength 

(他の半分は単にリアルオーディオ入力を複素共役の形式で情報を重複しています)。

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

+0

ありがとう、私はいくつか質問を追加するように編集しました。あなたが提供できるどんな助けも大歓迎です。 –

+0

FFT実装がある種のパイプライン同期プロセスである場合は、プロセスが実装するFFTの長さと、固定遅延または何らかの結果開始ベクトル信号のいずれかを知る必要があります。 – hotpaw2

4

まあ、悪いニュースがある、複素数を理解する必要が周りに方法はありません。良いニュースは、複雑な数字と呼ばれているからといって、彼らが意味するものではない、ということです。が複雑です。だから、最初、Wikipediaのページをチェックアウト、およびオーディオアプリケーション用に、私は多分平方根のセクションをスキップして、およそ3.2まで読んで、と言うだろう:http://en.wikipedia.org/wiki/Complex_number

あなたが持っている場合はどのようなことがあなたを語っていますがということですa + biとすると、x、y平面の位置(a、b)に居住していると見なすことができます。大きさと位相を取得するには、あなたがしなければならないのは、二つの量を見つけることである:

  • 大きさある平面の原点からの距離、および
  • x軸からの角度これは、のフェーズです。

大きさは単純ですが、それは単なるsqrt(a^2 + b^2)です。 フェーズは複雑に見えますが、そうではありません。それはです:

  • アークタンジェント(B/A)象限に象限におけるIとIV
  • アークタンジェント(B/A)+パイII
  • アークタンジェント(B/A) - 象限におけるPI III
  • 原点

番目約困難な唯一のもので未定義

  • 負のY軸上の正のy軸
  • -pi/2でPI/2 atは簿記です。これらの特殊なケースはすべて、角を「スイープ」させ、規則に従ってラップアラウンドするか、またはarctan関数の引数でゼロ除算の問題を回避することです。あなたがこれを行うためのライブラリ関数を見つけることができないのは私には驚きですが、そうした場合には、それが何をするのでしょうか。

  • 関連する問題