iPhone上的频率检测

时间:2011-12-01 12:54:01

标签: iphone objective-c audio fft frequency

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

论坛建议我使用apple FFT并加速Framework来做到这一点,但它似乎过于复杂。我真的很感激,如果任何编程过调音器或类似设备的人都能指出我的方向!

谢谢!

4 个答案:

答案 0 :(得分:4)

有一个related post on dsp.stackexchange。它表明,如果基波的幅度低于谐波,则自相关在寻找基波时将比FFT更好。自相关比FFT稍微不那么棘手。加速框架将再次为您提供帮助。但通常情况并非如此。

我不知道任何开箱即用的解决方案将为您完成所有工作。 vDSP编程指南有specific worked examples for real FFTs,您可能需要查看它,需要一些时间来适应,但它确实值得。 FFT似乎是峰值频率提取中最合乎逻辑的第一步,我担心。大多数消息来源似乎也建议在运行FFT之前对时域信号应用窗口函数是至关重要的(或者由于四肢的不连续性,你会得到高频伪像)。

您也可以查看this related SO post

答案 1 :(得分:2)

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

答案 2 :(得分:1)

根据之前的经验:

  1. FFT并不像您想象的那样精确,而且计算量很大
  2. 自相关提供了非常好的结果
  3. 如果你有一个强大的基础,过零可以非常准确,并且计算效率非常高(只计算信号在一段时间内过零的次数,f =(2 x时间段,以秒为单位)/ (过零次数)\
  4. 希望有所帮助。

答案 3 :(得分:0)

感谢所有答案!我错过了我的代码中的一部分,以使SC侦听器在设备上工作,但现在正在尝试为Apples自己的AVAudioRecorder更改它,因为它假设要快得多。问题是cocos2d框架阻止了声音的录制,直到你调用了允许这种方法的方法。它现在就像一个魅力! :) 再次感谢!