c-如何获得以赫兹为单位的DFT/FFT输出频率



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

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

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

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

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

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

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

最新更新