【问题标题】:Peak detection in Performous code高性能代码中的峰值检测
【发布时间】:2011-03-27 04:33:16
【问题描述】:

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

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

那么,谁能解释一下 Performous 中用于检测音高的算法吗?

【问题讨论】:

    标签: iphone pitch pitch-tracking


    【解决方案1】:

    [Performous][1] 从麦克风中提取音高。代码也是开源的。以下是该算法的功能描述,来自编码它的人(Tronic on irc.freenode.net#performous)。

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

    我仍然无法从这些信息中找出并实施它。如果有人对此进行了管理,请在此处发布您的结果,并评论此回复,以便 SO 通知我。

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

    【讨论】:

    • 有关更多信息,您可以参考dspdimension.com/admin/pitch-shifting-using-the-ft,其中执行代码基于(我认为)。答案的第三步是至关重要的一步,会影响结果的准确性。
    • 太棒了!!!你不知道那篇文章对我有多大帮助!一个多星期以来,我一直在寻找这些信息。谢谢!!!
    • 我已经成功地为 iOS 包装了 performous 的分析器。如果有人有兴趣,请给我发电子邮件 sunfish7|gmail|c0m
    • 我在 2020 年重写了 Performous 的算法,使用的方法比那篇 dspdimension 文章中的方法更精确,并且谐波组合也更好。 Python/Numpy 实现也可用。 -Tronic / github.com/performous/performous
    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 2019-09-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多