如何以赫兹获得DFT / FFT输出频率?

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

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

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

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

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

  • 计算每个DFT输出箱的magnitude = sqrt(re*re+im*im)magnitude = sqrt(re*re+im*im)
  • 找到幅度最大的bin,调用其索引i_max
  • 计算该bin的等效频率: freq = i_max * Fs / N ,这里Fs =采样率(Hz), N = FFT中的点数。

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