我正在网上找到一个很好的FFT库,看看我是否可以编写音高检测程序.到目前为止,我已经能够成功地让磁带库对包含少量正弦波的测试音频信号进行FFT计算,包括440Hz的一个正弦波(我使用16384个样本作为大小,采样率为44100Hz).
FFT输出如下:
433.356Hz - Real: 590.644 - Imag: -27.9856 - MAG: 16529.5 436.047Hz - Real: 683.921 - Imag: 51.2798 - MAG: 35071.4 438.739Hz - Real: 4615.24 - Imag: 1170.8 - MAG: 5.40352e+006 441.431Hz - Real: -3861.97 - Imag: 2111.13 - MAG: 8.15315e+006 444.122Hz - Real: -653.75 - Imag: 341.107 - MAG: 222999 446.814Hz - Real: -564.629 - Imag: 186.592 - MAG: 105355
正如您所看到的,441.431Hz和438.739Hz频段都显示出相同的高幅度输出("MAG:"后面的最右侧数字),因此很明显目标频率440Hz介于两者之间.提高分辨率可能是一种关闭方式,但这会增加计算时间.
如何计算两个频率箱之间的确切频率?
更新:
我在DSPGuru网站上尝试了Barry Quinn的"Second Estimator",并取得了优异的成绩.以下显示440Hz方波的结果 - 现在我只有0.003Hz!
这是我使用的代码.我只是改编了我发现的这个例子,这是针对Swift的.谢谢大家的宝贵意见,这是一次很棒的学习之旅:)