【问题标题】:Frequency detection on iPhoneiPhone上的频率检测
【发布时间】:2011-12-01 12:54:00
【问题描述】:

我目前正在开发的应用程序的一部分将用作调谐器。我希望能够使用 iPhone 来显示用户给出的信号的峰值频率。我使用了SCListener,它在 iPhone 模拟器上运行良好。但是,当我在真实设备上尝试时,它没有。

论坛建议我使用苹果 FFT 和加速框架来执行此操作,但它似乎过于复杂。如果有人编写了调谐器或类似程序,我将不胜感激!

谢谢!

【问题讨论】:

  • “峰值频率”是什么意思?我怀疑你真的是说 pitch 吗?

标签: iphone objective-c audio fft frequency


【解决方案1】:

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

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

您可能还想查看this related SO post

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      根据以往的经验:

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

      希望对您有所帮助。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2010-12-14
          • 1970-01-01
          • 2011-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-11
          • 2016-09-06
          • 1970-01-01
          相关资源
          最近更新 更多