7

学位プロジェクトとして音符検出器を開発したいのですが、ゼロからやりたいと思っています。そのオーディオ音楽ファイルからすべての情報を抽出し、結果として振幅を与える「.wav」ファイルのコードを書きました。

次に、DFT のコードを作成しました。軸 (実数/虚数) の 1 つが振幅/大きさで、もう 1 つが位相である複素数として出力されます。

ここで、周波数 (ベクトルではなくヘルツ) で答えが欲しいので、DFT が適切な出力を提供するかどうかを確認できます。DFT 出力を周波数に変換するにはどうすればよいですか?

これを C 言語でコーディングする必要があり、組み込みライブラリを使用したくない

4

1 に答える 1

16

ピークの大きさを見つけて、対応する周波数を計算する必要があります。

  • 各 DFT 出力ビンの大きさを計算します。magnitude = sqrt(re*re+im*im)
  • 最大の大きさのビンを見つけ、そのインデックスを呼び出しますi_max
  • このビンの等価周波数を計算します:freq = i_max * Fs / NここでFs= サンプルレート (Hz) およびN= FFT のポイント数。

ビンのインデックスと頻度がどのように関連しているかの詳細な説明については、この回答を参照してください。

于 2013-06-30T14:26:58.530 に答える