毕业论文B.3 DTW算法

dtw算法的代码:

function dist = dtw(t,r)
n = size(t,1);
m = size(r,1);

% 帧匹配距离矩阵
d = zeros(n,m);

for i = 1:n
for j = 1:m
    d(i,j) = sum((t(i,:)-r(j,:)).^2);
end
end

% 累积距离矩阵
D =  ones(n,m) * realmax;
D(1,1) = d(1,1);

% 动态规划
for i = 2:n
for j = 1:m
    D1 = D(i-1,j);

    if j>1
        D2 = D(i-1,j-1);
    else
        D2 = realmax;
    end

    if j>2
        D3 = D(i-1,j-2);
    else
        D3 = realmax;
    end

    D(i,j) = d(i,j) + min([D1,D2,D3]);
end
end

dist = D(n,m);

输入B.3随笔中计算得到的两个语音mfcc特征系数。

为DTW算法代码中设置断点。断点处画图d矩阵的图像:

从这个相异度图像中可以看出dtw算法就是要在这个图像中找到一条从(0,0)点到(86,67)点一条折线,统计这条线上的值,累计和为其它任意折线累计和的最小值。也就是说要找图像中最谷底的连线。

该连线找到后,累计计算线上每个值的和。这个值就为dtw算法所最终求出的相异度。

改进dtw算法:如果在计算相异度之前,对相异度图像进行加权处理,在求相异度,观察结果。

原文地址:https://www.cnblogs.com/cheetahw/p/2523599.html