7

我想开发音符检测器作为我的学位项目,我想从头开始。我已经为“.wav”文件编写了代码,该文件从该音频音乐文件中提取所有信息并因此给出幅度。

然后我为 DFT 编写了一个代码 - 它以复数形式输出,其中一个轴(实数/虚数)是幅度/幅度,另一个是相位。

现在我想要频率的答案(赫兹而不是矢量)的问题,所以我可以检查我的 DFT 是否给了我正确的输出。如何将我的 DFT 输出转换为频率?

我必须用 C 语言编写代码,我不想使用任何内置库

4

1 回答 1

16

您需要找到峰值幅度,然后计算出相应的频率:

  • 计算每个 DFT 输出 bin 的大小:magnitude = sqrt(re*re+im*im)
  • 找到幅度最大的 bin,称为它的索引i_max
  • 计算此 bin 的等效频率:freq = i_max * Fs / N,此处Fs= 采样率 (Hz) 和N= FFT 中的点数。

有关bin 索引和频率如何相关的更详细说明,请参阅此答案。

于 2013-06-30T14:26:58.530 回答