使用Accelerate Framework进行iOS的FFT间距检测?

时间:2012-04-30 05:36:07

标签: objective-c ios signal-processing fft accelerate-framework

我现在已经阅读了FFT和音高检测一段时间了,但是我在拼凑它时遇到了麻烦。

我已经知道Accelerate框架可能是最好的方法,我已经阅读了apple的示例代码,看看如何将它用于FFT。如果我想实时运行音调检测,那么FFT的输入数据是什么?我只是从麦克风传入音频流吗?我该怎么做?

另外,在我得到FFT输出后,如何从中获得频率?我到处读书,找不到任何例子或解释?

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

频率和音高不是一回事 - 频率是一个物理量,音调是一种心理感知 - 它们是相似的,但是有一些重要的差异,根据仪器的类型,对你来说可能或不重要。你试图测量音高。

您需要仔细阅读各种音高检测算法(以及音高本身的含义),确定您想要使用的算法,然后然后设置实现它。有关this Wikipedia page和音高检测的详细概述,请参阅pitch(请注意,您可以将FFT用于基于自相关和频域的方法)。

至于使用FFT来识别频谱中的峰值及其相关频率,已经有很多与此相关的问题和答案,例如:How do I obtain the frequencies of each value in an FFT?

答案 1 :(得分:3)

我有一个在线可用于ios 5.1的自相关功能的示例实现。请查看this post以获取有关如何查找最近音符以及如何创建表示音高的字符串(A,A#,B,B#等等)的实现和函数的链接

虽然FFT在许多应用中非常有用,但如果您尝试进行简单的音高检测,则可能不是最准确的。 (它可以是准确的,但你必须处理复数来进行大量的相位计算)