我有5个记录的WAV文件。我想将新传入的录音与这些文件进行比较,并确定最相似的录音。
在最终产品中,我需要在Linux上的C++中实现它,但是现在我正在Matlab中进行实验。我可以很容易地看到FFT图。但是我不知道如何比较它们。
如何计算两个FFT图的相似度?
编辑:录音中只有语音。实际上,我正在尝试确定一些电信公司的答录机的响应。足以区分两个消息“此刻无法联系此人”和“此号码已不再使用”
最佳答案
这很大程度上取决于您对“最相似”的定义。根据您的用例,这可能有很多事情。如果您只想比较整个文件的裸光谱,则可以将两个ffts返回的值进行关联。
但是,当文件及时扭曲时,光谱往往会发生很大变化。为了找出差异,您需要做一个窗口化的fft并比较每个窗口的光谱。然后,这定义了可以在Dynamic time warping algorithm中使用的差异函数。
如果您需要感知相似性,则FFT可能无法满足您的需求。录音的MFCC最有可能更接近此问题。同样,您可能需要计算窗口化的MFCC,而不是整个记录的MFCC。
如果您又有音乐录音,则需要完全不同的方法。有一篇博客文章描述了Shazam的工作方式,因此您可以在Google上找到它。或者,如果您想真正的音乐相似之处,请看看this book
编辑:
上面指定的问题的最佳解决方案是描述的here(如上所述的“shazam算法”)。但是,实现起来有点复杂,更简单的解决方案可能效果很好。
关于linux - 比较录音,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7078226/