1.Background:

在时间序列中,需要比较相似性的两段时间序列的长度可能并不相等,在语音识别领域表现为不同人的语速不同。在这些复杂情况下,使用传统的欧几里得距离无法有效求解两个时间序列之间的距离,即相识度。

大部分情况下,两个序列整体上具有非常相似的形状,但是这些形状在x轴(时间轴)上并不是对齐的。DTW的思想是把两个时间序列进行延伸和缩短,来得到两个时间序列性距离最短也就是最相似的那一个warping,这个最短的距离也就是这两个时间序列的最后的距离度量。

  • Warping正确性判定:直观上理解,当然是warping一个序列后可以与另一个序列重合recover。这个时候两个序列中所有对应点的距离之和是最小的。warping的正确性一般指“feature to feature”对齐,即特征对齐。
  • 和一些序列匹配一样,本算法基于动态规划计算;

2. Algorithm

DTW是用满足一定条件的时间规整函数 W K W_K WK​,是一个路径(K的大小与路径长度有关),描述测试模板和参考模板(两个序列)的时间对应关系,求解两模板匹配时累计距离最小所对应的规整函数。

我们有两个时间序列 Q = [ q 1 , q 2 , . . . , q n ] Q=[q_1,q_2,...,q_n] Q=[q1​,q2​,...,qn​]和 C = [ c 1 , c 2 , . . c m ] C=[c_1,c_2,..c_m] C=[c1​,c2​,..cm​],他们的长度分别是n和m:序列中的每个点的值为语音序列中每一帧的特征值(实际语音匹配运用中,一个序列为参考模板,一个序列为测试模板,特征值如语音的频率、MFCC等特征)。

这里,语音等序列具有以下特点:

  1. 边界条件: w 1 = ( 1 , 1 ) w_1=(1, 1) w1​=(1,1)和 w K = ( m , n ) w_K=(m, n) wK​=(m,n)。任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,因此所选的路径必定是从左下角出发,在右上角结束;

  2. 连续性:如果 w k − 1 = ( a ′ , b ′ ) w_{k-1}= (a', b') wk−1​=(a′,b′),那么对于路径的下一个点 w k = ( a , b ) w_k=(a, b) wk​=(a,b)需要满足 a ≤ a ′ + 1 a \le a' +1 a≤a′+1和 b ≤ b ′ + 1 b \le b' +1 b≤b′+1。也就是不可能跨过某个点去匹配,只能和自己相邻的点对齐。这样可以保证Q和C中的每个坐标都在W中出现;

  3. 单调性(“保序性”):如果 w k − 1 = ( a ′ , b ′ ) w_{k-1}= (a', b') wk−1​=(a′,b′),那么对于路径的下一个点 w k = ( a , b ) w_k=(a, b) wk​=(a,b)需要满足 a ′ ≤ a a' \le a a′≤a和 b ′ ≤ b b' \le b b′≤b。这限制W路径上面的点必须是随着时间单调进行的,其实就是语音序列的“保序性”。

如果我们记录路径上位置 j j j的代价就是 W j W_j Wj​,那么:
D T W ( Q , C ) = m i n ( ∑ k = 1 K W k ) DTW(Q,C)=min(\sum^K_{k=1}W_k) DTW(Q,C)=min(k=1∑K​Wk​)

  • 分母是否要K?我觉得是不用的,此外,我们可以意识到,对于长度为n和m的序列, m a x ( m , n ) ≤ K ≤ m + n − 1 max(m,n) \le K \le m+n-1 max(m,n)≤K≤m+n−1

我们如果把序列下标为 ( i , j ) (i,j) (i,j)位置的距离记作 d ( i , j ) d(i,j) d(i,j),而累积的DTW损失为 γ ( i , j ) \gamma(i,j) γ(i,j),那么我们可以得到如下的递归式:
γ ( i , j ) = d ( i , j ) + m i n { γ ( i − 1 , j − 1 ) , γ ( i , j − 1 ) , γ ( i − 1 , j ) } \gamma(i,j)=d(i,j)+min\{\gamma(i-1,j-1),\gamma(i,j-1),\gamma(i-1,j)\} γ(i,j)=d(i,j)+min{γ(i−1,j−1),γ(i,j−1),γ(i−1,j)}
我们初始化DP数组
γ ( 0 , j ) = γ ( i , 0 ) = 0 \gamma(0,j)=\gamma(i,0)=0 γ(0,j)=γ(i,0)=0
并且最终结果即为 γ ( n , m ) \gamma(n,m) γ(n,m),一路上的最佳序列即为最佳匹配(optimal path) W K W_K WK​。

【考古-3】——Dynamic time warping(DTW)算法相关推荐

  1. 动态时间规整算法(Dynamic Time Warping, DTW)之初探单词语音识别

    动态时间规整算法(DTW)是最近接触的一种提取时间序列模板方法.本文主要是一些自己的学习记录,并适当地加入自己的理解.若有见解不一致之处,欢迎交流. 1 动态时间规整(DTW)基本思想 先从单词语音时 ...

  2. DTW 笔记: Dynamic Time Warping 动态时间规整 (DTW的python实现) 【DDTW,WDTW】

    0 总述 DTW可以计算两个时间序列的相似度,尤其适用于不同长度.不同节奏的时间序列(比如不同的人读同一个词的音频序列) DTW将自动扭曲(warping)时间序列(即在时间轴上进行局部的缩放),使得 ...

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

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

  4. 动态时间规整-DTW算法

    作者:桂. 时间:2017-05-31  16:17:29 链接:http://www.cnblogs.com/xingshansi/p/6924911.html 前言 动态时间规整(Dynamic ...

  5. 【重大修改】动态时间规整(Dynamic Time Warping)

    本文只是简单的介绍DTW算法的目的和实现.具体的DTW可以参考一下文献: 离散序列的一致性度量方法:动态时间规整(DTW)  http://blog.csdn.net/liyuefeilong/art ...

  6. 2001年《Derivative Dynamic Time Warping》Eamonn J K Michael J P

    目录 Introduction DTW 的用途 DTW 的问题 改进 DTW 以解决上述问题 原始 DTW 算法 改进DTW:DDTW DTW 的缺陷 / DDTW 所解决的问题 算法细节 实验结果 ...

  7. dynamic time warping matlab,动态时间规整(Dynamic Time Warping)

    本文知识简单的介绍DTW算法的目的和实现.具体的DTW可以参考一下文献: 离散序列的一致性度量方法:动态时间规整(DTW)  http://blog.csdn.net/liyuefeilong/art ...

  8. 机器学习算法(二十三):DTW(Dynamic Time Warping,动态时间调整)

    目录 1 DTW(动态时间调整) 2 算法的实现 3 例子 4 python实现 ​​​​​​​5 DTW的加速算法FastDTW 5.1 标准DTW算法 5.2 DTW常用加速手段 5.3 Fast ...

  9. 动态时间规整算法(dynamic time warping)

    动态时间规整 DT W 动态 时间 规整 DTW(dynamic time warping) 曾经是语音识 别的一种主流方法. 其 思想是:由于 语音信号是一种具有相当大随机性的信 号,即使相同说话者 ...

最新文章

  1. 域客户端如何定位并登录域控制器
  2. 对.net知识结构相关讲解
  3. Python超详细的字符串用法大全
  4. php正则替换模板变量,php正则替换变量指定字符的方法
  5. ai人工智能操控什么意思_为什么AI会(永远)接管
  6. 计算机的doc命令怎么学,cmd命令提示符大全:想成为电脑高手必学CMD命令大全
  7. 2021年起重机司机(限桥式起重机)考试题及起重机司机(限桥式起重机)报名考试
  8. 推荐一本Vue开发的书籍
  9. @Cacheable(sync=true) only allows a single cache on
  10. 测试与开发人员的战斗
  11. 荒岛余生2java攻略_荒岛余生2
  12. RSA加密和解密流程
  13. Redis 实战篇:Geo 算法查找附近的人
  14. star cd linux,在win下启动linux
  15. 程序员和产品经理的故事
  16. js邮箱、电话座机正则表达式校验
  17. html5在线俄罗斯方块,Html5原创俄罗斯方块(基于canvas)
  18. C语言基础丨运算符之求字节数运算符和特殊运算符(十)
  19. 国内外数控系统品牌(厂商)
  20. 论文研读—基于 AUTOSAR 的汽车故障诊断系统的设计与实现

热门文章

  1. 搭建网站详细教程(接上一条)
  2. 关于ucos主函数调用OSTaskCreate创建用户的警告解决办法
  3. Win10下Python实现动态条形图(附解决matplotlib画图中文乱码问题)
  4. 华硕笔记本linux双系统引导,华硕笔记本如何安装win7/win10双系统
  5. Python学习笔记——函数
  6. HTML5学习_day01(6)--html颜色的几种写法
  7. 嵌入式系统 ttylinux 9.1 发布
  8. 深入理解Java序列化中的SerialVersionUid
  9. 会议预约系统 java_java会议室管理系统
  10. eclipse配置spark开发环境