【问题标题】:How to find similarity between two signals with xcorr in matlab如何在matlab中使用xcorr找到两个信号之间的相似性
【发布时间】:2014-04-12 14:38:14
【问题描述】:

我正在编写语音识别代码。我有一个n个数据库,每个数据库包含不同人记录的相同数量的单词。

我想做xcorr,例如,引用词“hello”与“hello”db中的所有词和“door”db中的所有词,然后代码必须说我是哪个词。我需要做一些数学典范才能做出决定。

现在,我知道同一个词之间的自相关具有对称图。但是如果我比较男性说的“你好”这个词和女性说的同一个词,它是不对称的,如果我比较“你好”这个词和“门”这个词,我会得到相同的结果。

我的问题是:如何找到执行 xcorr 函数的两个词之间的相似之处?我需要找到 xcorr 的滞后或最大值吗?

感谢您的帮助。

【问题讨论】:

    标签: matlab speech


    【解决方案1】:

    我的问题是:如何找到执行 xcorr 函数的两个词之间的相似之处?我需要找到 xcorr 的滞后或最大值吗?

    要衡量与单个单词记录的相似度,您需要取最大值,这是一种相似度的度量

    但是,如果我比较男性说的“你好”这个词和女性说的同一个词,它是不对称的,如果我比较“你好”这个词和“门”这个词,我会得到相同的结果。

    要对样本所属的类别做出最佳决定,您需要比较两个集群的相似性度量:

    max(xcorr(sample, hello)) < > max(xcorr(sample, door)
    

    这背后的理论被称为“贝叶斯最优分类”。

    如果你有更多的单词样本,你可以做出更好的决定:

     max_sample(max_lag(xcorr(sample, hello_sample_i)) < > max_sample(max_lag(xcorr(sample, door_sample_i))
    

    我正在编写语音识别代码。

    语音样本是随时间变化的,而 xcorr 不是随时间变化而变化的。更好的测量方法是语音频谱的 DTW 距离。您可以在此处找到 DTW 距离实现:

    http://www.ee.columbia.edu/ln/rosa/matlab/dtw/

    DTW 不受时移影响,因此您可以做出更可靠的决策。

    【讨论】:

    • 非常感谢您的帮助。我相信找到最大值是不够的。我也需要它的位置吗?以及如何进行比较?现在,我为每个数据库都有一个数组,其中存储了每个交叉校正的最大值。如果我得到了示例单词“hello”的这些结果,我该如何判断? "你好 db"= [ 8.7729, 14.2898, 7.8010, 4.8641, 5.2716] "门" db =[ 8.4145 , 6.7965, 11.2714, 6.4075, 6.7344]
    • hello db 的最大值更高,所以这个词属于 hello。为了使判断更可靠,您需要使用 MFCC 系数并使用 DTW 而不是 xcorr,就像我之前写的那样。
    猜你喜欢
    • 1970-01-01
    • 2014-01-05
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多