【问题标题】:Quickest and easiest algorithm for comparing the frequency content of two sounds比较两个声音的频率内容的最快和最简单的算法
【发布时间】:2012-07-12 02:38:14
【问题描述】:

我想提取两个包含主频率的声音,并说“这个比这个高”。我可以做 FFT,找到每个振幅最大的频率并进行比较。我想知道,因为我有一个特定的任务,可能有一个更简单的算法。

声音很脏,有很多频率,但包含清晰的主音调。它们不是完美的正弦波。

【问题讨论】:

    标签: audio fft


    【解决方案1】:

    鉴于声音很脏,我建议开始使用 FFT 的输出来开发算法,因为它可以更简单地诊断任何问题。然后,当您对它的工作感到满意时,您可以考虑优化/简化。

    根据经验,在开发这种数值算法时,我总是首先尝试在最相关的领域(在这种情况下,您对频率感兴趣,因此在频率空间中分析),然后一次一切都在表现自己考虑快捷方式/优化。这样您就可以针对表现最好的前者来测试后者的解决方案。

    【讨论】:

    • 谢谢。我是这么想的。只是有时人们会说“哦,是的,当然使用算法 X,你没听说过吗?”。
    • 也许他们很快就会。但我想不出任何明显明智的更好的东西...... :-)
    【解决方案2】:

    在一般情况下,体面的pitch detection/estimation 通常需要比查看 FFT 峰值更复杂的算法,而不是更简单的算法。

    【讨论】:

      【解决方案3】:

      有多种音高检测方法,从计算过零(这显然不适用于您的情况)到极其复杂的算法,不一而足。

      虽然频域方法似乎最合适,但它并不像“采用 FFT”那么简单。如果您的数据非常嘈杂,则可能会出现高于您认为的主频率的杂散峰值。一种解决方案是使用信号的窗口重叠段,并进行 STFT,并对结果进行平均。但这提出了更多问题:窗户应该有多大?在这种情况下,这取决于您期望这些主峰相距多远,记录的时间长短等。(注意:FFT 方法可以通过考虑相位信息来解决比一个 bin 大小更好的问题。在这种情况下,您将不得不做一些比平均所有 FFT 窗口更复杂的事情)。

      另一种方法是时域方法,例如 YIN:

      http://recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf

      维基百科讨论了更多方法:

      http://en.wikipedia.org/wiki/Pitch_detection_algorithm

      您还可以在本书的第 9 章中探索更多方法:

      http://www.amazon.com/DAFX-Digital-Udo-ouml-lzer/dp/0471490784

      您可以在此处从该书的第 9 章获取 yin 的 matlab 源代码:

      http://www2.hsu-hh.de/ant/dafx2002/DAFX_Book_Page_2nd_edition/matlab.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        • 2013-06-18
        • 2015-07-04
        相关资源
        最近更新 更多