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上的频率检测的主要内容,如果未能解决你的问题,请参考以下文章

从 iPhone 上的音频流中获取 Hz 频率

检测特定频率的算法? [关闭]

如何让我的 iPhone 收听高于某个阈值的声音频率?

检测到堆损坏 - 仅限 iPhone 5S

如何以编程方式检测音符和和弦(在 iPhone SDK 中)?

iPhone 上的节奏(声音变化)检测