0

我正在做一个非常简单的语音识别项目。我目前有 2 套 wav 文件。每组都有 1 秒长的录音,记录同一个人在 2 个不同实例中所说的一组单词。例如,一组具有单词“一”、“二”和“三”,而另一组具有通过单独记录获得的完全相同的单词。许多单词押韵并使用不同的声音。

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

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

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

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

我可以尝试哪些方法?同样,只要过程合理,如果失败也没关系。我知道我的声音样本量很小。我也明白最好比较频域中的声音,但我现在只有频谱图。

4

2 回答 2

1

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

于 2014-01-21T18:14:16.127 回答
-1

频谱图很棒。你可以提取共振峰,看这里怎么做

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

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

编辑

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

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

于 2014-01-20T20:07:51.893 回答