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

mos*_*sad 6 c audio fft dft

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

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

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

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

Pau*_*l R 15

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

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

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