无法在iPhone上获得正确的频率值

我正在尝试分析iOS平台上的频率检测算法。 所以我发现了几个使用FFT和CoreAudio的实现( 例1和例2 )。 但在这两种情况下,存在一些不精确的频率:

  • (1)对于A4(440Hz)显示441.430664 Hz。
  • (1)对于C6(1046.5 Hz)显示1518.09082 Hz。
  • (2)A4(440Hz)显示440.72 Hz。
  • (2)对于C6(1046.5 Hz),显示1042.396606 Hz。

为什么会发生这种情况以及如何避免这个问题并以更准确的方式检测频率?

频域中的分辨率与FFT区间的数量成反比。 你需要:

  • 增加FFT的大小以获得更好的分辨率
  • 使用相邻区间的大小来调整频率估计
  • 使用替代方法进行频率估计而不是FFT,例如参数模型