如何找到样本声音文件中最匹配的声音文件?

时间:2014-01-20 18:35:07

标签: matlab speech-recognition spectrogram

我正在开展一个非常简单的语音识别项目。我目前有2套wav文件。每组在同一个人在两个不同的实例中说出的一组单词的长度记录为1秒。例如,一组具有单词“one”,“two”和“three”,另一组具有通过单独记录获得的相同的确切单词。许多单词押韵并使用不同的声音。

到目前为止,我已经尝试了几件事,但到目前为止我最实用的是每个声音文件的光谱图(所有使用相同的脚本都以相同的方式构建)。

这一切都是通过MATLAB完成的,我只能使用MATLAB。

我将一组录音/频谱图称为“样本集”,这将是我将提供样本声音的集合。我会将另一组录音/频谱图称为“测试集”,这将是我将尝试找到与所提供的样本记录/频谱图最佳匹配的集合。

我想要的是,当提供样本声音/频谱图时,MATLAB将返回测试集中的最佳匹配或匹配。理想情况下,它会返回相同的单词,但实际上我会很高兴只有一些样本会返回相似的结果(例如,押韵或有类似元音/辅音的单词)。

我可以尝试哪些方法?同样,只要过程合理,如果失败就没问题。我知道我的声音样本量非常小。我也理解最好比较频域中的声音,但我现在所拥有的只是频谱图。

2 个答案:

答案 0 :(得分:1)

动态时间扭曲可以测量两个话语之间的距离。 您可以在Matlab Central中找到Matlab实现

答案 1 :(得分:-1)

频谱图很棒。您可以提取共振峰,look here how to do it

基本上共振峰是单独音节的特征,即对于单词“three”,“th”,“r”和“i”有不同的共振峰。所以,你最好先分开音节,然后提取每个音节的格式,最后将“样本”与“测试”文件进行比较。

无论如何,如果每个文件只包含一个单词,我认为提取整个单词的共振峰也可能是合适的方法,特别是如果你可能有一些误差容忍...

修改

所以,我仍然认为提取共振峰是正确的方法,但如果你想比较光谱图,你可以依赖这些词有一个声音音节这一事实。您可以在频谱图中看到声乐部分在高频中具有峰值(例如,上面链接中的频谱图显示单词“matlab”,并且在两个声音'a'处具有更高频率的红线)。

将频谱图在时间维度上划分为50 ms(+ - )的段,然后选择峰值为高频的那些(根据您需要选择的某个阈值。观察频谱图后很容易) 。对于每个单词,请保存时间位置以及所选时间段内3-4个高峰的频率位置。现在,根据您的具体数据,您需要尝试确定您在时间/费用方面允许的容差,将两个病房定义为类似...