1、基本介绍

  • DTW:Dynamic Time Warping,即动态时间归整。DTW算法基于DP动态规划思想,解决了发音长短不一的模板匹配问题,常用于语音识别(孤立词识别)。

  • HMM算法在训练阶段需要提供大量的语音数据,通过反复急速那才能得到模型参数;而DTW算法的训练中几乎不需要额外的计算。因此DTW算法得到了广泛使用。

2、算法原理(理论原理)

无论在训练和建立模板阶段还是在识别阶段,都先采用端点算法确定语音的起点和终点。

2.1 主要术语

  • 参考模板:以存入模板库的各个词条成为参考模板,可以理解为训练集,表示形式为:

    \[R = \{R(1), R(2), ..., R(m), ..., R(M)\}\]

其中,m为训练语音帧的时序标号,m=1为起点语音帧,m=M为终点语音帧,因此M为该模板所包含的语音帧总数,R(m)为第m帧的语音特征矢量。

  • 测试模板:需要识别的一个输入词条语音,可以理解为测试集,表示形式为:

    \[T = \{T(1), T(2), ..., T(n), ..., T(N)\}\]

其中,n为测试语音帧的时序标号,n=1为起点语音帧,n=N为终点语音帧,因此N为该模板所包含的语音帧总数,T(n)为第n帧的语音特征矢量。

  • 重点:参考模板与测试模板一半采用相同类型的特征矢量(MFCC、FPC系数)、相同的帧长、相同的窗函数和相同的帧移。

2.2 算法由来和改进过程

  • 传统方法:

    • 首先,需要比较相似度,一般采用欧式距离\(D[T, R]\),距离越小则相似度越高。为了计算失真距离,应该让T和R中各个对应帧之间的距离算起。

    • 若N=M,则可以直接计算\(d(T,R) = \sqrt{(T_{1} - R_{1})^{2} + (T_{2} - R_{2})^{2} + ...+ (T_{N} - R_{N})^{2}}\)

    • 若N<M,则需要将T(n)和R(m)对对齐。对齐采用线性扩张的方法,即将测试模板T线性映射为一个M帧(参考模板长度)的序列,再计算测试模板T与参考模板R的欧式距离。

  • 改进方法(采用DP算法):由于传统方法计算没有考虑到语音各个段在不同情况下的持续时间会产生或短或长的变化,因此识别效果不佳。更多的是采用动态规划DP算法。

    • 具体实施方法:可以将测试模板和参考模板投影到一个二维直角坐标系中,测试模板的各个帧号可以在横轴上标出,参考模板的各个帧号可以在纵轴上标出。通过这些表示帧号的证书坐标画出一些纵横线即可形成一个网络,网络中的每一个交叉点(n,m)表示测试模式中某一帧的交汇点。

    • 其中的DP算法:DP算法可以归结为寻找一条通过此网络中若干格点的路径,路径通过的格点即为测试和参考模板中进行计算的帧号。

    • 描述路劲:假设路径通过的所有格点依次为:(n1, m1), ..., (ni, mi), ..., (nN, mM),其中(n1,m1)=(1,1),(nN, mM)=(N,M)。路径函数为Oslash,如果路径已经通过格点(n,m),那么下一个通过的格点(n,m)只可能是下列三种情况在之一:

      • (n,m) -> (n+1, m+1)

      • (n,m) -> (n+1, m+1)

      • (n,m) -> (n, m+1)
        用\(\eta\)描述上述三个约束条件,则求最佳路径的问题可以归结为满足约束条件时 ,求最佳路劲函数m=&Oslash。使得沿着路劲的积累距离达到最小值。
      • 最佳路径函数Oslash???
    • 搜索该路径的方法为:搜索从(n,m)点出发,可以展开若干条满足\(\eta\)的路径,假设可计算每条路径达到(n,m)点时的积累距离,具有最小积累距离者即为最佳路径。容易证明,由于约束条件\(\eta\),点(n,m)一定选择(n-1,m-1)、(n-1,m)和(n,m-1)等这3个距离之路径延伸通过,此卢晶晶的积累距离为:
      \[D[(n,m)] = d[T(n), R(m)] + \min\{D(n-1,m-1), D(n-1, m), D(n,m-1)\}\]
      因此从(n,m)=(1,1)出发搜索(n,m),对每一个(n,m)都存储相应的距离,这个距离是当前格点的匹配距离与前一个累计距离最小的格点。搜索到(n,m)时,只保留一条最佳路径。通过逐点向前寻找就可以求得整条路劲,这套DP算法便是DTW算法。

    • 总结:DTW算法可以直接按照描述来实现,即分配两个NxM的矩阵,分别为积累距离矩阵D和帧匹配距离矩阵d,其中帧匹配距离矩阵d(i,j)的值为测试模板的第i帧与参考模板的第j帧间的距离。D(N,M)即为最佳匹配路径所对应的匹配距离。

2.3 DTW算法流程

  • 等待完善

  • 代码实现

3、算法DTW和算法HMM的比较

  • 优点:

    • (1)DTW算法本身简单且有效,而HMM算法比较复杂,对于孤立词识别,在相同条件下,两者算法的识别效果相差不大。

    • (2)HMM需要在训练阶段提供大量的语音数据,通过反复计算才能得到参数模型,而DTW算法的训练中几乎不需要额外的计算。

  • 缺点:

    • (1)DTW算法没有一个有效地用统计方法进行训练的框架,不容易将底层和顶层的各种知识用到语音识别模型中,因此在解决大词汇量、连续语音、非特定语音识别问题时较之HMM相形见绌。而HMM是一种用参数表示的,用于描述随机过程统计特性的概率模型。

参考

  1. DTW算法:https://baike.baidu.com/item/dtw/3219286?fr=aladdin

  2. DTW原理实现:https://blog.csdn.net/ljh0302/article/details/50884303

DTW动态时间规整算法的更多相关文章

  1. Dynamic Time Warping 动态时间规整算法

    转自:http://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069036.html Dynamic Time Warping(DTW)是一种衡量两个 ...

  2. DTW动态时间规整

    参考: https://blog.csdn.net/raym0ndkwan/article/details/45614813

  3. 动态时间规整(DTW) 转载

    Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法.应用也比较广,主要是在模板匹 ...

  4. 语音信号处理之(一)动态时间规整(DTW)

    语音信号处理之(一)动态时间规整(DTW) zouxy09@qq.com 原文:http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课,快考试了,所以也要 ...

  5. 动态时间规整DTW(Dynamic Time Warping )

    动态时间规整DTW(Dynamic Time Warping ) 原文:https://blog.csdn.net/raym0ndkwan/article/details/45614813 算法笔记- ...

  6. 语音信号处理之动态时间规整(DTW)(转)

    这学期有<语音信号处理>这门课,快考试了,所以也要了解了解相关的知识点.呵呵,平时没怎么听课,现在只能抱佛脚了.顺便也总结总结,好让自己的知识架构清晰点,也和大家分享下.下面总结的是第一个 ...

  7. 【VS开发】【智能语音处理】语音信号处理之(一)动态时间规整(DTW)

    语音信号处理之(一)动态时间规整(DTW) zouxy09@qq.com http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课,快考试了,所以也要了解了 ...

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

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

  9. 动态时间规整DTW

    动态时间规整DTW 1 概述 动态时间规整是一个计算时间序列之间距离的算法,是为了解决语音识别领域中语速不同的情况下如何计算距离相似度的问题. 相对于用经典的欧式距离来计算相似度而言,DTW在数据点个 ...

随机推荐

  1. Grunt搭建自动化web前端开发环境--完整流程

    Grunt搭建自动化web前端开发环境-完整流程 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前 ...

  2. Liunx系统升级自带的Python版本

    一.查看系统信息 [root@localhost ~]# cat /etc/redhat-release CentOS release 6.4 (Final) [root@localhost ~]# ...

  3. 使用 acme.sh 签发续签 Let‘s Encrypt 证书 泛域名证书

    1. 安装 acme.sh 安装很简单, 一个命令: curl https://get.acme.sh | sh 并创建 一个 bash 的 alias, 方便你的使用 alias acme.sh=~ ...

  4. poj3373--Changing Digits(DFS+剪枝///记忆化)

    题目链接:点击打开链接 题目大意:给出一个n和一个k 求m 要求1.m要和n相同的位数 要求2.m要整除k 要求3.如果1和2满足,那么m要和n有尽量少的不同位 要求4.如果1.2.3满足,要使m尽量 ...

  5. python zip()函数

    描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符 ...

  6. 如何在Anoconda Prompt 安装pytorch

    一.首先需要安装好Anoconda,具体安装步骤可通过https://www.cnblogs.com/chenfeifen/p/10266012.html查看 由于官方下载更新工具包的速度很慢,因此添 ...

  7. maven 项目连接mysql8.0版本时的注意事项

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 以前的maven项目,要注意依赖的注入 查看pom. ...

  8. 安卓 ToolBar 颜色样式设置

    设置Toolbar弹出菜单的字体颜色和背景颜色,包括三个点菜单颜色和返回图标的颜色. 布局文件xml <LinearLayout xmlns:android="http://schem ...

  9. FairyGUI TextField

    记录一个在使用FairyGUI的TextField时遇到的坑. TextField有一个文本模板功能,可以实现类似占位符的功能,如:{ number = 0 },然后我们可以在脚本中修改number的 ...

  10. isolate demo

    dependencies dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to yo ...