1

私はプログラマーであり、優れた数学者ではないため、FFTは私にとってブラックボックスのようなものです。Rightmarkオーディオなどのソフトウェアのように、データをFFTライブラリに入れて、プロット可能なAFR(振幅-周波数応答)データを取得したいと思います。します:

http://www.ixbt.com/proaudio/behringer/3031a/fr-hf.png

これで、対数掃引正弦波(鋭いエッジを避けるために短いフェードイン/フェードアウト)を再生し、オーディオシステムからの応答を記録するシステムができました。

私が理解している限り、入力をゼロから2 ^ nまで埋め、オーディオサンプルを複素数の実数部として使用し、虚数= 0に設定する必要があります。そうすれば、FFTから周波数ビン配列を半分に戻すことができます。入力データの長さ。

しかし、オーディオバッファが提供する数秒のような大きな周波数解像度が必要ない場合は、たとえば1024サイズのFFTウィンドウを作成し、オーディオのチャンクをフィードして、考慮に入れて512の周波数ポイントを取得する正しい方法は何ですか?渡したすべてのデータ?または、それが不可能であり、必要なすべてのAFRデータを取得するために、掃引正弦波全体を一度にフィードする必要がありますか?

また、スムージングが必要ですか?FFTからの生の出力は本当にノイズが多いかもしれないことを見てきました。ノイズをできるだけ早く回避する正しい方法は何ですか?したがって、ノイズはAFR自体からのものであり、FFT計算からのものではありません(私が与えたリンクの画像のように-かなり滑らかに見えます)?

私はC++/ C#プログラマーです。スイープされたサインエンドのチャンクを処理してAFRデータを取得する方法を示す例をいただければ幸いです。今のところ、データを小さなチャンクでリアルタイムに処理する例しか見つかりませんでしたが、それは私が必要としているものではありません。

4

1 に答える 1

1

ウィンドウ関数は、ノイズを減らすのに役立ちます

入力データに w(n) を掛けるだけです。

ここに画像の説明を入力

于 2012-07-08T02:19:17.423 に答える