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

1 动态时间规整(DTW)基本思想

  先从单词语音时间序列的规整问题引入DTW的基本思想。
  假设下图两个时间序列对应的是同一个单词的发音(实则不是,只是为了便于理解)。黑色的线表示两个时间序列的相似的点(用幅度差异刻画时间序列点的相似性,幅度差异越小,相似性越高)。由于不同人语速上存在差异,某些人可能会把字母‘A’发得很长(延长发音),某些人却发得较短(短促发音),这样同一个字母展现出来的时间序列上就存在着很大的差异,如图中绿色圈出的时间波形所示。因此就需要对原始的两个时间序列进行规整,即对时间序列进行延伸和缩短,提取两个时间序列的相似性,从而对语音进行识别。
 


图1 动态时间规整基本思想

图2 时间序列规整结果

  图2对应的就是原始时间序列的规整结果。
   所以动态时间规整的思想就是:通过对两个时间序列点之间的相似性进行比较(图1黑线),对原始时间序列进行拉伸到相同时间长度(原始时间序列的长度很可能不一致),进而比较两个时间序列的相似性。
   动态时间规整要解决的问题就是:找到一条最优的规整路径 W = ϖ 1 , ϖ 2 . . . ϖ k W = {\varpi _1},{\varpi _2}...{\varpi _k} W=ϖ1​,ϖ2​...ϖk​,其中 w k = ( i , j ) {w_k} = (i,j) wk​=(i,j),即认为时间序列1的第i个点和时间序列2的第j个点是相似的。所有相似点的距离之和作为规整路径距离,用规整路径距离来衡量两个时间序列的相似性。规整路径距离越小,相似度越高。

2 动态规划解DTW问题

  假设原始时间序列为X,Y,它们的时间长度分别为 ∣ X ∣ \left| X \right| ∣X∣和 ∣ Y ∣ \left| Y \right| ∣Y∣。对于规整路径 W = ϖ 1 , ϖ 2 . . . ϖ k W = {\varpi _1},{\varpi _2}...{\varpi _k} W=ϖ1​,ϖ2​...ϖk​,有:
(1) max ⁡ ( ∣ X ∣ , ∣ Y ∣ ) ≤ k ≤ ∣ X ∣ + ∣ Y ∣ \max (\left| X \right|,\left| Y \right|) \le k \le \left| X \right| + \left| Y \right|\tag{1} max(∣X∣,∣Y∣)≤k≤∣X∣+∣Y∣(1)
  k表示两个序列最终被拉伸的长度。
  规整路径必须从 ϖ 1 = ( 1 , 1 ) {\varpi _1} = (1,1) ϖ1​=(1,1)开始,到 ϖ k = ( ∣ X ∣ , ∣ Y ∣ ) {\varpi _k} = (\left| X \right|,\left| Y \right|) ϖk​=(∣X∣,∣Y∣)结束,以保证X和Y序列的每个坐标点都出现一次。另外,规整路径 w k = ( i , j ) {w_k} = (i,j) wk​=(i,j)中的i和j必须是单调递增的,所谓单调递增指的是:
(2) w k = ( i , j ) , w k + 1 = ( i ′ , j ′ ) i ≤ i ′ ≤ i + 1 , j ≤ j ′ ≤ j + 1 {w_k} = (i,j),{w_{k + 1}} = (i',j'){\rm{      }}i \le i' \le i + 1,j \le j' \le j + 1\tag{2} wk​=(i,j),wk+1​=(i′,j′)    i≤i′≤i+1,j≤j′≤j+1(2)
  所以如果路径已经通过了格点(i,j),那么路径的下一个格点只能是(i+1,j),(i,j+1),(i+1,j+1)中的一种,如图3中绿色剪头所示。


图3 规整路径示意

  所以对于路径规整距离矩阵 D ( i , j ) D(i,j) D(i,j),有: (3) D ( i , j ) = D i s t ( i , j ) + min ⁡ { D ( i − 1 , j ) , D ( i , j − 1 ) , D ( i − 1 , j − 1 ) } D(i,j) = Dist(i,j) + \min \{ D(i - 1,j),D(i,j - 1),D(i - 1,j - 1)\} \tag{3} D(i,j)=Dist(i,j)+min{D(i−1,j),D(i,j−1),D(i−1,j−1)}(3)
  其中, D i s t ( i , j ) Dist(i,j) Dist(i,j)表示X序列第i个点与Y序列第j个点之间的距离(两个点的相似性)。 D ( i , j ) D(i,j) D(i,j)衡量的是X序列前i个点与Y序列前j个点的相似性。 最终的规整路径距离为 D ( ∣ X ∣ , ∣ Y ∣ ) D(\left| X \right|,\left| Y \right|) D(∣X∣,∣Y∣)。 D ( ∣ X ∣ , ∣ Y ∣ ) D(\left| X \right|,\left| Y \right|) D(∣X∣,∣Y∣)的值越小,两个原始时间序列的相似性越大。
  有了式子(3),我们就可以用动态规划来对DTW问题进行求解。
  设定不一样的采样频率对正弦函数进行采样,得到两个原始时间序列如图4所示。其中时间序列1的前半段采样频率低于时间序列2前半段的采样频率,后半段高于时间序列2的采样频率。利用动态规划的递推公式(3)可以求得路径规整矩阵 D ( i , j ) D(i,j) D(i,j)如图5所示。由 D ( i , j ) D(i,j) D(i,j)可得规整路径如图6所示。规整路径规定了时间序列X与时间序列Y的时间对齐方式。由此可以得到如图7所示的规整时间序列。可见,在DTW的作用下,完成了两个时间序列的规整目标。
  这边代码借鉴于 动态时间规整借鉴代码,在此多谢博主!!
 


图4 采样频率不同而生成的两个原始时间序列

图5 规整距离矩阵

图6 规整路径

图7 DTW规整后的时间序列

  图7所示的规整序列基本达到了时间序列的对齐目的。可是,如果有两个时间序列的幅值不同,将会产生什么样的规整结果?图9是对图8进行规整得到的规整时间序列。由此可知,最终的效果并不理想。为了使得DTW能够提取原始序列的时间特征而忽略幅值对序列规整的影响,我在原有代码的基础上加入了zscore对原始数据进行标准化。最终的结果如图10所示。
 


图8 具有不同幅值的两个原始时间序列

图9 不同幅值时间序列的规整结果

图10 加入zscore标准化处理后的规整结果

3 一个简单的单词语音音频识别实例

●语音时间序列规整

  这边我利用自己录制的几段单词mp3文件来探讨动态时间规整算法对语音时间序列的对齐。图11所示为两段‘water’这个单词的语音时间序列。由于语速和发音时刻的差异,两个原始序列之间存在差异,但明显可以看出两者之间有很大的相似性。利用第2小节阐述的DTW算法,最终的语音规整结果如图12所示,基本达到了目的。当然这边做的非常粗糙,比如语音里面的很多毛刺,低频信号完全可以用滤波的方式先消掉,然后再交由DTW进行处理。


图11 两段’water’音频的原始时间序列

 


图12 语音时间序列规整

●单词语音音频识别

  如何利用DTW算法来做简单的语音音频识别?第2小节已经提及,DTW做序列规整时利用规整路径距离 D ( ∣ X ∣ , ∣ Y ∣ ) D(\left| X \right|,\left| Y \right|) D(∣X∣,∣Y∣)来衡量时间序列X和时间序列Y的相似性。所以,假设我们现有‘water’,’teacher’,’apple’的几段音频序列,要识别某一个音频的发音到底是这三个单词中的哪一个,就只需要将这个待识别音频序列分别与三个单词的音频序列做规整,得到各自的规整路径距离 D ( ∣ X ∣ , ∣ Y ∣ ) D(\left| X \right|,\left| Y \right|) D(∣X∣,∣Y∣)(即附录代码中的变量Dist)。 D ( ∣ X ∣ , ∣ Y ∣ ) D(\left| X \right|,\left| Y \right|) D(∣X∣,∣Y∣)越小,说明两者的相似度越高。这样可以初步完成单词语音音频识别的任务。当然,实际上进行这样操作的复杂度是很高的,实用性很差。

4 总结

  ① 动态时间规整算法(DTW)是一种时间序列对齐方法。它通过寻找一条规整路径来使得规整距离最小。规整路径距离 D ( ∣ X ∣ , ∣ Y ∣ ) D(\left| X \right|,\left| Y \right|) D(∣X∣,∣Y∣)表征了两个时间序列的相似性: D ( ∣ X ∣ , ∣ Y ∣ ) D(\left| X \right|,\left| Y \right|) D(∣X∣,∣Y∣)越小,相似度越高。
  ② 可以利用DTW算法来做单词音频的识别。

5 代码附录

  代码和示例音频文件可以从这里下载动态时间规整算法代码+单词音频。

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

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

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

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

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

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

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

  4. 动态时间规整算法DTW

    动态时间规整算法(dynamic time warping,DTW),最早由日本学者Itakura提出,用于衡量两个时间序列的相似度,也可用于将多个测试序列与标准序列对齐,从而实现序列长度的归一化. ...

  5. 崔岩的笔记——动态时间规整算法(Dynamic Time Warping,DTW)

    什么是动态时间规整算法,他是用来干什么的 用于两个时间不同的特征序列的相似度比较. 举个例子:该算法最早的应用对象是语音识别,通过进行数据库语音特征和说话语音特征的相似度比较进行语音识别,但每个人说话 ...

  6. 动态时间规整算法(DTW)通俗易懂

    动态时间规整算法(Dynamic Time Warping ) 来源: -假定一个孤立词识别系统,利用模板匹配法进行识别.训练阶段,用户将词汇表种每一个词都念一遍,将其特征矢量的时间序列作为模板(te ...

  7. 基于动态时间规整算法(DTW)的语音识别技术研究-含Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ⏩ 一.引言 ⏩ 二.动态时间规整算法基本原理 ⏩ 三.语音识别实例分析 ⏩ 四.参考文献 ⏩ 五.Matlab代码获取 ⏩ 一.引言 在语音识别技术的发展过程中,动态时间规整算法 ...

  8. 动态时间规整算法: 从DTW到FastDTW

    目录 动态时间规整算法: 从DTW到FastDTW 总结: 简介[^1] DTW[^1] FastDTW:使用多级粗化的方法[^1] 结果 动态时间规整算法: 从DTW到FastDTW 总结: Fas ...

  9. 动态时间规整算法——DTW

    没有做过机器学习的小伙伴们对这个算法应该不是特别的了解,因为机器学习经常会用到这个算法.再将这个算法之前,我们先看一下初中的知识点. 欧几里得距离 在讲解动态时间规整算法(Dynamic Time W ...

最新文章

  1. SSAS使用时间智能解决本年累计、同比、环比【转载】
  2. 网页制作使用CSS样式制作轮播教程,静态网页设计与开发 1.案例——CSS3制作图片轮播图 (4)使用纯CSS3代码实现简单的图片轮播——分步骤实现.docx...
  3. 原始套接字SOCK_RAW
  4. 期望最大化(EM)算法
  5. CentOS7下安装mysql-5.7.24
  6. 安装Ubuntu 20.04.1 LTS (Focal Fossa)到U盘并安装ros2
  7. [转] CMake入门
  8. qt 添加依赖库lib_在QT中添加LIB的方法
  9. MQ 技术产品井喷,今天来详聊一下腾讯开源消息中间件 TubeMQ | 原力计划
  10. 20140711_类的继承、派生、ACE框架、指针的问题、系统的问题
  11. 自定义exchange由IMF导致的NDR信息
  12. http://longshuai2007.blog.163.com/blog/static/1420
  13. html教程作用,HTML段落的作用及教程
  14. 【Mac】nsurlsessiond 后台下载问题的解决方法
  15. 光立方实现3D贪吃蛇
  16. sql server 2005 32位+64位、企业版+标准版、CD+DVD 下载地址大全【申明:来源于网络】
  17. Redis过期策略和淘汰策略
  18. java:利用数组实现将古诗词纵向输出
  19. 电磁场与电磁波第二章笔记——静场 麦克斯韦方程组
  20. 磁共振线圈分类_磁共振线圈的发展历程

热门文章

  1. 秉持H2H理念,58同城如何在移动互联网时代开拓市场
  2. windows10 + vs2017 + CERTI3.5.1安装说明
  3. 数字推理题725道详解
  4. 3D.处女座的训练(C++)
  5. 如何将大数据变成企业的洞察力和行动力?
  6. [HBNIS2018]excel破解1
  7. 斩获 12w+ 星标的神仙项目再度上榜,简直就是一套活生生的自学编程百科全书!
  8. 电脑端与iPad 端如何共享ChemDraw结构
  9. php中 复合主键的作用,php – Laravel – 使用复合主键加入表
  10. 【附源码】Java计算机毕业设计民宿客栈管理系统(程序+LW+部署)