2010-08-09 77 views
3

我正在寻找使用HPS方法在iphone中实现音调检测。但检测到的音调不是很准确。 Performous做了一个体面检测的体面工作。执行代码中的峰值检测

我翻遍了代码,但我并没有完全理解计算背后的理论。 他们使用FFT并找到峰值。但是他们使用FFT输出相位的部分让我感到困惑。我想他们使用一些启发式语音频率。

那么,任何人都可以请解释在Performous中使用的算法来检测音高吗?

回答

1

[Performous] [1]从麦克风中提取音高。代码也是开源的。下面是对该算法做什么的描述,来自编码它的人(在irc.freenode.net上执行的Tronic)。

  • PCM输入(带缓冲)
  • FFT(1024个样本的时间,从缓冲器的前后来除去200个样本)
  • 重新分配方法(上日FFT,这是200个样本更早)
  • 过滤峰(这部分可以做的更好,甚至离开了)
  • 峰组合成组的谐波(我们称之为组合音)
  • 音的时域滤波(更新一组音调检测ED较早而不是简单地使用新检测到的)
  • 挑选最佳演唱音(频率范围,加权,可以使用谐波阵列还,但我不认为我们做的)

我还是WASN”从这些信息中找出并实现它。如果任何人管理这个,请在​​这里发布你的结果,并评论这个回应,以便SO通知我。

该任务将围绕此代码创建一个最小的C++包装。

+1

欲了解更多信息,你可以参考http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/执行代码是基于(我认为)。答案中的第三步是至关重要的一步,可以影响结果的准确性。 – Shreesh 2010-11-18 11:51:51

+0

太棒了!你不知道这篇文章对我有多大帮助!我一直在寻找这些信息超过一周。谢谢!!! – 2010-11-18 13:38:43

+1

我已经设法包装iOS的执行分析器。如果有人有兴趣,给我发一封电子邮件sunfish7 | gmail | c0m – 2010-11-24 19:10:18