CでFFTWを使用してPortaudioからサンプルから周波数情報を抽出する方法

StackOverflow https://stackoverflow.com/questions/3058236

質問

Portaudioを使用してオーディオデータを記録するプログラム(この部分は完了しました)を作成し、その録音されたオーディオの頻度情報を表示したい(今のところ、サンプルの各グループの平均頻度を表示したい彼らが入ってくると)。

私が行ったいくつかの研究から、私はFFTをする必要があることを知っています。それで、私はCでそれを行うために図書館をグーグルで検索し、FFTWを見つけました。

しかし、今では少し迷っています。記録したサンプルを抽出するために記録したサンプルで正確に何をすることになっていますか?どのようなFFTを使用すればよいですか(実際のデータ1Dが必要だと思いますか?)?

そして、FFTを実行したら、それが提供するデータから頻度情報を取得するにはどうすればよいですか?

編集:私は今、自己相関アルゴリズムも見つけました。それはより良いですか?よりシンプル?

よろしくお願いしますが、申し訳ありませんが、これがあればまったく経験がありません。少なくとも少し理にかなっていることを願っています。

役に立ちましたか?

解決

オーディオサンプルをパワースペクトルに変換するには:

  • オーディオデータが整数データの場合は、それを浮動ポイントに変換します
  • FFTサイズを選択します(例:n = 1024)
  • aを適用します ウィンドウ関数 データのサンプル(例: ハニング)
  • サイズnの実際の複雑なFFTを使用して、周波数ドメインデータを生成する
  • 複雑な周波数ドメインデータの大きさを計算します(magnitude = sqrt(re^2 + im^2))
  • オプションで大きさをログスケール(db)に変換します(magnitude_dB = 20*log10(magnitude))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top