iPhone上的频率检测
Posted
技术标签:
【中文标题】iPhone上的频率检测【英文标题】:Frequency detection on iPhone 【发布时间】:2011-12-01 12:54:00 【问题描述】:我目前正在开发的应用程序的一部分将用作调谐器。我希望能够使用 iPhone 来显示用户给出的信号的峰值频率。我使用了SCListener,它在 iPhone 模拟器上运行良好。但是,当我在真实设备上尝试时,它没有。
论坛建议我使用苹果 FFT 和加速框架来执行此操作,但它似乎过于复杂。如果有人编写了调谐器或类似程序,我将不胜感激!
谢谢!
【问题讨论】:
“峰值频率”是什么意思?我怀疑你真的是说 pitch 吗? 【参考方案1】:有一个related post on dsp.stackexchange。它表明,如果基波的幅度低于谐波,则自相关在寻找基波方面比 FFT 更有效。自相关比 FFT 稍微简单一些。加速框架将再次为您提供帮助。但通常情况并非如此。
我不知道有什么开箱即用的解决方案可以为您完成所有工作。 vDSP 编程指南有specific worked examples for real FFTs,您可能想查看它,这需要一些时间来适应,但确实值得。恐怕 FFT 似乎是峰值频率提取中最合乎逻辑的第一步。大多数消息来源似乎还建议在运行 FFT 之前将窗口函数应用于时域信号是至关重要的(否则由于末端的不连续性,您会得到高频伪影)。
您可能还想查看this related SO post。
【讨论】:
【参考方案2】:峰值频率通常不同于人们希望(音乐)调谐器估计的音调频率。查找音高估计。
【讨论】:
【参考方案3】:根据以往的经验:
-
FFT 并不像您想象的那么准确,而且计算成本很高
自相关给出了很好的结果
如果你有一个强大的基础,过零可以非常准确并且计算效率非常高(只需计算信号在一段时间内过零的次数,f =(2 x 以秒为单位的时间段)/ (过零次数)\
希望对您有所帮助。
【讨论】:
【参考方案4】:感谢所有答案!我错过了我的代码中的一部分,以使 SC 侦听器也可以在设备上工作,但现在正试图为苹果自己的 AVAudioRecorder 更改它,因为它被认为要快得多。问题是 cocos2d 框架阻止了声音的录制,直到您调用允许这样做的方法。它现在就像一个魅力! :) 再次感谢!
【讨论】:
以上是关于iPhone上的频率检测的主要内容,如果未能解决你的问题,请参考以下文章