【问题标题】:How can I find the best matching sound file(s) to a sample sound file?如何找到与示例声音文件最匹配的声音文件?
【发布时间】:2014-01-22 02:14:16
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: matlab speech-recognition spectrogram


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

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

    编辑

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

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

    【讨论】:

    • 我必须提取声音才能得到任何结果吗?我知道这是最好的方法,但我真的希望找到一种方法来找到每个单词的最佳匹配谱图。所有的单词都很短,而且大部分都是单音节的,所以只有一个突出的元音。
    • 问题中的单词不是单音节的,看我关于“三”的例子。但是,试着在整个单词上做,因为它是单音节的,我认为它应该有效。
    • 所以,把提取放在一边。我可以使用什么工具来比较频谱图以找出它们的相似度?
    猜你喜欢
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2010-09-12
    • 2011-10-22
    相关资源
    最近更新 更多