执行代码中的峰值检测

时间:2010-08-09 08:33:52

标签: iphone pitch pitch-tracking

我希望使用HPS方法在iphone中实现语音音调检测。但检测到的音调不是很准确。 Performous做了很好的音高检测。

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

那么,有人可以解释一下Performous中使用的算法来检测音高吗?

1 个答案:

答案 0 :(得分:1)

[Performous] [1]从麦克风中提取音高。代码也是开源的。下面是对编码它的人所做的描述(在irc.freenode.net上的Tronic#performous)。

  • PCM输入(带缓冲)
  • FFT(一次1024个样本,之后从缓冲区前面删除200个样本)
  • 重新分配方法(针对先前的200个样本的FFT)
  • 过滤峰值(这部分可以做得更好甚至省略)
  • 将峰值组合成多组谐波(我们将组合称为音调)
  • 音调的时间过滤(更新先前检测到的音调集,而不是简单地使用新检测到的音调)
  • 选择最佳的人声(频率限制,加权,也可以使用谐波阵列,但我不认为我们这样做)

我仍然无法从这些信息中弄清楚并实现它。如果有人管理此项,请在此处发布您的结果,并对此回复发表评论,以便SO通知我。

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