我有5个录制的wav文件。我想将新传入的录音与这些文件进行比较,并确定它与哪个最相似。
在最终产品中,我需要在Linux上用C ++实现它,但现在我在Matlab中进行实验。我很容易看到FFT图。但我不知道如何比较它们。
如何计算两个FFT图的相似度?
编辑:录音中只有语音。实际上,我正在努力确定一些电信公司的应答机的响应。这足以区分两条消息“此刻此人无法接触”和“此号码不再使用”
答案 0 :(得分:4)
这很大程度上取决于你对“最像”的定义。根据您的使用情况,这可能是很多事情。如果你只想比较整个文件的裸光谱,你可以只关联两个ffts返回的值。
然而,当文件及时变形时,光谱往往会发生很大变化。要找出与此相关的差异,您需要做一个窗口fft并比较每个窗口的光谱。然后,这将定义您可以在Dynamic time warping algorithm中使用的差异函数。
如果您需要感知相似性,FFT可能无法满足您的需求。 MFCC录音很可能更接近这个问题。同样,您可能需要计算窗口化的MFCC而不是整个录制的MFCC。
如果你再次录音,你需要完全不同的方法。有一篇博客文章描述了Shazam的工作原理,因此您可以在谷歌上找到它。或者,如果您想要真正的音乐相似性,请查看this book
修改强>:
上面指出的问题的最佳解决方案是描述here(如上所述的“shazam算法”)。然而,这实现起来有点复杂,更容易解决方案可能做得很好。
答案 1 :(得分:1)
如果您知道只有5种不同的可能传入文件,我建议先尝试一下这两种信号之间的欧几里德距离(时间或四次)。它可能会给你带来好结果。
编辑:因此,在不同的可能启动时,尝试进行自相关并查看哪个文件具有更高的峰值。
答案 2 :(得分:0)
我建议您计算简单的声音参数,如基频。有几种方法可以获得这个值 - 我尝试了自相关和倒谱,对于语音信号,它们工作得很好。通过这种功能工作,您可以进行时间分析,并在给定的间隔频率上比较两个信号(基准 - 您要比较的信号,您想要匹配的信号)。根据这些标准比较几个区间可以告诉您哪个基本样本匹配最佳。
当然,一切都取决于你的意思类似于。要比较功能,您可以引入其他参数,如音量,噪音,咔嗒声,音高...