iPhone上的频率检测



我目前正在开发的一个应用程序的一部分将作为调谐器工作。我希望能够使用iPhone显示用户给出的信号的峰值频率。我使用了SCListener,它在iPhone模拟器上工作得很好。然而,当我在一个真正的设备上尝试它时,它没有。

论坛建议我使用苹果FFT和加速框架来做到这一点,但它似乎过于复杂。我真的很感激,如果有人已经编程调谐器或类似的可以指出我在一个好的方向!

谢谢!

在dsp.stackexchange上有一个相关的帖子。这表明,如果基波的振幅低于谐波,自相关将比FFT更好地找到基波。自相关比FFT稍微简单一些。加速框架将再次为您提供帮助。然而,通常情况并非如此。

我不知道有什么现成的解决方案可以为你解决所有的问题。vDSP编程指南有实际fft的具体工作示例,您可能想要查看,它需要一些时间来习惯,但它真的值得。FFT似乎是峰值频率提取中最合乎逻辑的第一步。大多数来源似乎也表明,在运行FFT之前对时域信号应用窗口函数是至关重要的(或者您将获得高频伪影,因为在极端处不连续性)。

你也可以看看这篇相关的SO文章

峰值频率通常不同于人们希望(音乐)调谐器估计的音高频率。查看音高估计

根据以往的经验:

  1. FFT并不总是像你想象的那么准确,而且计算成本很高
  2. 自相关给出了相当好的结果
  3. 如果你有一个强大的基本,过零可以非常准确,计算效率非常高(只需计算信号在一段时间内过零的次数,f = (2 x时间周期,以秒为单位)/(过零次数)

希望对你有帮助。

谢谢大家的回答!我已经错过了我的代码的一部分,使SC监听器工作在设备上,但现在正试图改变它为苹果自己的AVAudioRecorder,因为它应该是快得多。问题在于cocos2d框架会阻止声音的录制,直到你调用一个允许录制声音的方法。现在就像施了魔法一样!:)再次感谢!

最新更新