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

时间:2013-06-30 13:08:39

标签: c audio fft dft

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

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

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

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

1 个答案:

答案 0 :(得分:15)

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

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

有关bin索引和频率如何相关的更详细说明,请参阅this answer