dynamic time warping matlab,Dynamic Time Warping 动态时间规整算法

Dynamic Time Warping(DTW)是一种衡量两个时间序列之间的相似度的方法,主要应用在语音识别领域来识别两段语音是否表示同一个单词。

1. DTW方法原理

在时间序列中,需要比较相似性的两段时间序列的长度可能并不相等,在语音识别领域表现为不同人的语速不同。而且同一个单词内的不同音素的发音速度也不同,比如有的人会把“A”这个音拖得很长,或者把“i”发的很短。另外,不同时间序列可能仅仅存在时间轴上的位移,亦即在还原位移的情况下,两个时间序列是一致的。在这些复杂情况下,使用传统的欧几里得距离无法有效地求的两个时间序列之间的距离(或者相似性)。

DTW通过把时间序列进行延伸和缩短,来计算两个时间序列性之间的相似性:

908be85a4ffab69dc60472dce63f7e34.png

如上图所示,上下两条实线代表两个时间序列,时间序列之间的虚线代表两个时间序列之间的相似的点。DTW使用所有这些相似点之间的距离的和,称之为归整路径距离(Warp Path Distance)来衡量两个时间序列之间的相似性。

2. DTW计算方法:

令要计算相似度的两个时间序列为X和Y,长度分别为|X|和|Y|。

归整路径(Warp Path)

归整路径的形式为W=w1,w2,...,wK,其中Max(|X|,|Y|)<=K<=|X|+|Y|。

wk的形式为(i,j),其中i表示的是X中的i坐标,j表示的是Y中的j坐标。

归整路径W必须从w1=(1,1)开始,到wK=(|X|,|Y|)结尾,以保证X和Y中的每个坐标都在W中出现。

另外,W中w(i,j)的i和j必须是单调增加的,以保证图1中的虚线不会相交,所谓单调增加是指:

ab98bc787e936649d277d1eb4198aa75.png

最后要得到的归整路径是距离最短的一个归整路径:

adc71d2337b29c9839168d6195e3c5a4.png

最后求得的归整路径距离为D(|X|,|Y|),使用动态规划来进行求解:

b7a3f4da2810d86cfc518641b7bac496.png

上图为代价矩阵(Cost Matrix) D,D(i,j)表示长度为i和j的两个时间序列之间的归整路径距离。

3. DTW实现:

matlab代码:

69c5a8ac3fa60e0848d784a6dd461da6.png

function dist =dtw(t,r)

n= size(t,1);

m= size(r,1);%帧匹配距离矩阵

d=zeros(n,m);for i = 1:nfor 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:nfor j = 1:m

D1= D(i-1,j);if j>1D2= D(i-1,j-1);elseD2=realmax;

endif j>2D3= D(i-1,j-2);elseD3=realmax;

end

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

end

end

dist= D(n,m);

69c5a8ac3fa60e0848d784a6dd461da6.png

C++实现:

dtwrecoge.h

8f900a89c6347c561fdf2122f13be562.pngView Code

dtwrecoge.cpp

8f900a89c6347c561fdf2122f13be562.pngView Code

本文转自阿凡卢博客园博客,原文链接:http://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069036.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值