我想开发音符检测器作为我的学位项目,我想从头开始。我已经为“.wav”文件编写了代码,该文件从该音频音乐文件中提取所有信息并因此给出幅度。
然后我为 DFT 编写了一个代码 - 它以复数形式输出,其中一个轴(实数/虚数)是幅度/幅度,另一个是相位。
现在我想要频率的答案(赫兹而不是矢量)的问题,所以我可以检查我的 DFT 是否给了我正确的输出。如何将我的 DFT 输出转换为频率?
我必须用 C 语言编写代码,我不想使用任何内置库
您需要找到峰值幅度,然后计算出相应的频率:
magnitude = sqrt(re*re+im*im)
i_max
。freq = i_max * Fs / N
,此处Fs
= 采样率 (Hz) 和N
= FFT 中的点数。有关bin 索引和频率如何相关的更详细说明,请参阅此答案。