Audio 比较两种声音频率内容的最快最简单算法

Audio 比较两种声音频率内容的最快最简单算法,audio,fft,Audio,Fft,我想取两个含有主频的声音,说‘这个比这个高’。我可以做FFT,找到每个频率中振幅最大的频率,然后比较它们。我想知道,由于我有一个特定的任务,是否有一个更简单的算法 这些声音有很多频率,但都有清晰的主音。它们并不是完美产生的正弦波。鉴于声音非常脏,我建议开始使用FFT的输出来开发算法,因为诊断任何问题都会简单得多。然后,当你对它的工作感到满意时,你可以考虑优化/简化 作为一种经验法则,在开发这种数值算法时,我总是尝试在最相关的领域中首先操作(在这种情况下,你对频率感兴趣,所以在频率空间中分析),并

我想取两个含有主频的声音,说‘这个比这个高’。我可以做FFT,找到每个频率中振幅最大的频率,然后比较它们。我想知道,由于我有一个特定的任务,是否有一个更简单的算法


这些声音有很多频率,但都有清晰的主音。它们并不是完美产生的正弦波。

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


作为一种经验法则,在开发这种数值算法时,我总是尝试在最相关的领域中首先操作(在这种情况下,你对频率感兴趣,所以在频率空间中分析),并且一旦一切都在考虑自己的快捷方式/优化。通过这种方式,您可以将后一种解决方案与性能最佳的前一种解决方案进行对比。

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


作为一种经验法则,在开发这种数值算法时,我总是尝试在最相关的领域中首先操作(在这种情况下,你对频率感兴趣,所以在频率空间中分析),并且一旦一切都在考虑自己的快捷方式/优化。通过这种方式,您可以将后一种解决方案与性能最佳的前一种解决方案进行比较。

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

在一般情况下,DELABLE通常需要比查看FFT峰值更复杂的算法,不是一个简单的算法。

有各种各样的基音检测方法,从计数过零(这显然在您的情况下不起作用)到极其复杂的算法

虽然频域方法似乎最合适,但它并不像“进行FFT”那样简单。如果你的数据非常嘈杂,你可能会有比你认为占主导地位的频率更高的虚假峰值。一种解决方案是使用信号的窗口重叠段,进行STFT,并对结果进行平均。但这引发了更多的问题:窗户应该有多大?在这种情况下,这取决于您预期的主要峰值之间的距离、记录的长度等(注意:FFT方法可以通过考虑相位信息来解决一个以上的箱子大小。在这种情况下,您必须做一些比将所有FFT窗口平均在一起更复杂的事情)

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

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

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

您可以从该书的第9章获得yin的matlab源代码:


有各种各样的基音检测方法,从计数过零(这显然在您的情况下不起作用)到极其复杂的算法,各种方法都非常复杂

虽然频域方法似乎最合适,但它并不像“进行FFT”那样简单。如果你的数据非常嘈杂,你可能会有比你认为占主导地位的频率更高的虚假峰值。一种解决方案是使用信号的窗口重叠段,进行STFT,并对结果进行平均。但这引发了更多的问题:窗户应该有多大?在这种情况下,这取决于您预期的主要峰值之间的距离、记录的长度等(注意:FFT方法可以通过考虑相位信息来解决一个以上的箱子大小。在这种情况下,您必须做一些比将所有FFT窗口平均在一起更复杂的事情)

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

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

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

您可以从该书的第9章获得yin的matlab源代码:


谢谢。我想是的。只是有时候人们会说“哦,是的,当然要使用算法X了,你没听说过吗?”。也许他们很快就会知道。但我想不出任何明显明智的事情比这更好…:-)谢谢我想是的。只是有时候人们会说“哦,是的,当然要使用算法X了,你没听说过吗?”。也许他们很快就会知道。但我想不出任何明显明智的事情比这更好…:-)