dynamic time warping matlab,动态时间规整(Dynamic Time Warping)
本文知识简单的介绍DTW算法的目的和实现。具体的DTW可以参考一下文献:
离散序列的一致性度量方法:动态时间规整(DTW) http://blog.csdn.net/liyuefeilong/article/details/45748399
动态时间归整/规整/弯曲(Dynamic time warping,DTW) http://www.cnblogs.com/flypiggy/p/3603192.html
DTW是干什么的?
动态时间规整算法,故名思议,就是把两个代表同一个类型的事物的不同长度序列进行时间上的“对齐”。比如DTW最常用的地方,语音识别中,同一个字母,由不同人发音,长短肯定不一样,把声音记录下来以后,它的信号肯定是很相似的,只是在时间上不太对整齐而已。所以我们需要用一个函数拉长或者缩短其中一个信号,使得它们之间的误差达到最小。
再来看看运动捕捉,比如当前有一个很快的拳击动作,另外有一个未加标签的动作,我想判断它是不是拳击动作,那么就要计算这个未加标签的动作和已知的拳击动作的相似度。但是呢,他们两个的动作长度不一样,比如一个是100帧,一个是200帧,那么这样直接对每一帧进行对比,计算到后面,误差肯定很大,那么我们把已知拳击动作的每一帧找到无标签的动作的对应帧中,使得它们的距离最短。这样便可以计算出两个运动的相似度,然后设定一个阈值,满足阈值范围就把未知动作加上“拳击”标签。
DTW怎么计算?
下面我们来总结一下DTW动态时间规整算法的简单的步骤:
1. 首先肯定是已知两个或者多个序列,但是都是两个两个的比较,所以我们假设有两个序列A={a1,a2,a3,...,am} B={b1,b2,b3,....,bn},维度m>n
2. 然后用欧式距离计算出每序列的每两点之间的距离,D(ai,bj) 其中1≤i≤m,1≤j≤n
画出下表:
3. 接下来就是根据上图将最短路径找出来。从D(a1,a2)沿着某条路径到达D(am,bn)。找路径满足:假如当前节点是D(ai,bj),那么下一个节点必须是在D(i+1,j),D(i,j+1), D(i+1,j+1)之间选择。并且路径必须是最短的。
4. 接下来输出路径,从D(a1,b1)到D(am,bn)。他们的总和就是就是所需要的DTW距离
好吧,表示自己写的代码很差劲,但是别人的不好意思拿来贴~~参考就可以了,不对之处谢谢大家指正:
matlab代码:
DTW.m
function [route,distant]=DTW(a,b)
%动态时间规整
m=size(a,1);
n=size(b,1);
for i=1:m
for j=1:n
D(i,j)=sqrt((a(i,:)-b(j,:))^2);
end
end
D
%求附近范围的最大值
x=1;
y=1;
r=2;
route(1,1)=1;
route(1,2)=1;
route(1,3)=D(1,1);
distant=D(1,1);
for i=1:m-1
for j=1:n-1
if x
value(1)=D(x+1,y);
value(2)=D(x+1,y+1);
value(3)=D(x,y+1);
[maxvalue,index]=min(value);
distant=distant+maxvalue;
if index==1
x=x+1;y=y;
route(r,1)=x;
route(r,2)=y;
route(r,3)=D(x,y);
r=r+1;
end
if index==2
x=x+1;y=y+1;
route(r,1)=x;
route(r,2)=y;
route(r,3)=D(x,y);
r=r+1;
end
if index==3
x=x;y=y+1;
route(r,1)=x;
route(r,2)=y;
route(r,3)=D(x,y);
r=r+1;
end
end
end
end
%到达边缘的两种情况
if x==m
for i=y+1:n
route(r,1)=m; route(r,2)=i;route(r,3)=D(x,i);r=r+1;
distant=distant+D(x,i);
end
end
if y==n
for i=x+1:m
route(r,1)=i; route(r,2)=n;route(r,3)=D(i,y);r=r+1;
distant=distant+D(i,y);
end
end
end
DTWtest.m
clear
clc
a=[8 9 1 9 6 1 3 5]';
b=[2 5 4 6 7 8 3 7 7 2]';
[route,distant]=DTW(a,b)
结果:
D =
6 3 4 2 1 0 5 1 1 6
7 4 5 3 2 1 6 2 2 7
1 4 3 5 6 7 2 6 6 1
7 4 5 3 2 1 6 2 2 7
4 1 2 0 1 2 3 1 1 4
1 4 3 5 6 7 2 6 6 1
1 2 1 3 4 5 0 4 4 1
3 0 1 1 2 3 2 2 2 3
route =
1 1 6
1 2 3
2 2 4
3 3 3
4 4 3
5 4 0
5 5 1
5 6 2
6 7 2
7 7 0
8 7 2
8 8 2
8 9 2
8 10 3
distant =
33
>>
dynamic time warping matlab,动态时间规整(Dynamic Time Warping)相关推荐
- GEE:DTW(Dynamic Time Warping)动态时间规整,Sentinel-2 时间序列分类
时间动态规整算法(Dynamic Time Warping,DTW)是一种常用到的时间序列分析方法,常用于时间序列分类.模式发现. 卫星影像时间序列分类的动态时间规整介绍:https://medium ...
- dynamic time warping(动态时间规整)--学习笔记
DTW可以计算两个时间序列的相似度,尤其适用于不同长度.不同节奏的时间序列(比如不同的人读同一个词的音频序列).DTW将自动warping扭曲 时间序列(即在时间轴上进行局部的缩放),使得两个序列的形 ...
- 2012年《Satellite Image Time Series Analysis Under Time Warping》:动态时间规整(DTW)在遥感中的应用
作者:François Petitjean.Jordi Inglada.Pierre Gançarski 发表期刊:IEEE Transactions on Geoscience and Remote ...
- 初识DTW(动态时间规整)算法及Python实现例
目录 1. 概要 2. 时序列相似度度量 3. DTW基本算法 4. Python实现 5. Next Action 1. 概要 DTW( Dynamic Time Warping,动态时间规整)是基 ...
- 【重大修改】动态时间规整(Dynamic Time Warping)
本文只是简单的介绍DTW算法的目的和实现.具体的DTW可以参考一下文献: 离散序列的一致性度量方法:动态时间规整(DTW) http://blog.csdn.net/liyuefeilong/art ...
- 动态时间规整DWT(Dynamic Time Warping)
1. DTW作用 动态时间规整算法,能够将两个代表同一个类型的事物的不同长度序列进行时间上的"对齐". 比如在语音识别中,同一个字母,由不同人发音,时间长短不一,但信号相似.故需要 ...
- 动态时间规整算法(dynamic time warping)
动态时间规整 DT W 动态 时间 规整 DTW(dynamic time warping) 曾经是语音识 别的一种主流方法. 其 思想是:由于 语音信号是一种具有相当大随机性的信 号,即使相同说话者 ...
- 崔岩的笔记——动态时间规整算法(Dynamic Time Warping,DTW)
什么是动态时间规整算法,他是用来干什么的 用于两个时间不同的特征序列的相似度比较. 举个例子:该算法最早的应用对象是语音识别,通过进行数据库语音特征和说话语音特征的相似度比较进行语音识别,但每个人说话 ...
- 动态时间规整算法(Dynamic Time Warping, DTW)之初探单词语音识别
动态时间规整算法(DTW)是最近接触的一种提取时间序列模板方法.本文主要是一些自己的学习记录,并适当地加入自己的理解.若有见解不一致之处,欢迎交流. 1 动态时间规整(DTW)基本思想 先从单词语音时 ...
最新文章
- DOS批处理的字符串功能
- LinkedList 的作者说他自己都不用 LinkedList?
- AJAX跨域资源共享 CORS 详解
- linux服务器su之后变成bash-4.1#
- java获取web项目的绝对路径的方法总结
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_2_使用Stream流的方式,遍历集合...
- 成功从小公司跳槽!java并发编程实践pdf完整百度云
- 一个站长要具备什么条件?
- 工程流体力学笔记暂记35 (平板层流边界层和平板混合边界层)
- 如何解决存在的1px问题?
- html中怎么设置字体形状,html如何设置字体样式 HTML里怎么设置字体大小?
- Riverbed发布业界最全面的数字体验管理解决方案
- 传奇服务器怪物不显示名字,传奇小地图显示怪物的一个问题
- 网关系统就该这么设计(万能通用),贼稳!
- 公共场所的标志和说明英文表达100例
- [Java]源码角度深入理解哈希表,手撕常见面试题
- 我与Apache DolphinScheduler社区的故事
- 钟汉良日记:多看电视剧也可以提升写作能力
- OpenCV 分割斜体文字(包括旋转,垂直投影,水平投影,透视变换等)
- 如何在同一个局域网内实现简单的两台Linux主机互相连接