概述

DTW (Dynamic time warping)算法是可以度量两个独立时间序列的相似度的一种方法。曾被广泛应用在单词音频的匹配上。该方法主要用来解决在两段序列的时长不同的情况下,进行相似度的判断

上图中,左侧时长相等,可以逐一进行欧式距离的计算,右侧则是时长不等,经过DTW之后得到的结果,可以看出来两个序列并不是一一对应的。

再比如上面左图,要得到蓝色序列与红色序列的相似度,因为可以看出来两个序列有经过平移的迹象,直接用一一匹配的方法显然是不合理的。要得到左图的对应效果,就需要用DTW方法。

算法原理与步骤

① 计算两个特征点之间的欧氏距离。构成一个 n*m 矩阵,距离矩阵。

②计算累计距离 得到DP矩阵

计算后的的值,放到DP矩阵中,为了更加直观的理解,把这两个序列绘图如下:

其实在计算过程中,计算的顺序其实是有方向的。网上有很多的博客说的也非常清楚,博主在这里不再赘述。为了更好的理解计算过程,列举一个非常非常非常非常简单的例子来帮助理解,如下图: A B为带有两个特征值的序列,右边是其对应的DP矩阵的求解步骤。

③ 当计算完整个DP矩阵 后,右上角的值(不一定是右上角,就是最终的得到的那个矩阵角上的值)即为两个序列的累计距离。

④从右上角往左下角回溯,找到累计距离最短的路径,根据路径可以得到各个点之间的对应关系。

算法的实现

博主是利用matlab实现的这个算法,只是因为利用matlab可以很方便的查看矩阵和画图,检查算法的正确性,但是没有调用matlab中成形的函数,所以利用这个思路,用C/C++也是可以实现的,便于移植。

首先要写好两个函数。
一个是Get Min();用来得到三个值中的最小值,在计算 DP矩阵 时用得到。

function min = GetMin(a,b,c)
if(a <= b && a <= c)min = a;
elseif(b <= a && b <= c)min = b;
elseif(c <= b && c <= a)min = c;
end
end

另一个是GetMinIndex();这是用来在得到 DTW 结果之后,方便显示特征点匹配的结果,返回两个序列对应特征点的索引。

function [index_i,index_j] = GetMinIndex(a,b,c,i,j)
%a 是相邻左上角,b 是相邻正上方,c说相邻正左方
%i 是当前的x坐标  j 是当前 y坐标
if(a <= b && a <= c)index_i = i-1;index_j = j-1;
elseif(b <= a && b <= c)index_i = i-1;index_j = j;
elseif(c <= b && c <= a)index_i = i;index_j = j-1;
end
end

接下来就是主函数了

%生成两个有明显平移性质的时间序列
x = zeros(1,50);
for i = 1:50x(i) = sin(i*2*pi/50)+2;
end
y = zeros(1,50);
for i = 1:50y(i) = sin(i*2*pi/50 + pi/6)+2;
end
x_len = length(x);
y_len = length(y);
plot(1:x_len,x);hold on
plot(1:y_len,y);hold on
%计算两序列每个特征点的距离矩阵
distance = zeros(x_len,y_len);
for i = 1:x_lenfor j=1:y_lendistance(i,j) = (x(i)-y(j)).^2;end
end
%计算两个序列
DP = zeros(x_len,y_len);
DP(1,1) = distance(1,1);
for i=2:x_lenDP(i,1) = distance(i,1)+DP(i-1,1);
end
for j=2:y_lenDP(1,j) = distance(1,j)+DP(1,j-1);
end
for i=2:x_lenfor j=2:y_lenDP(i,j) = distance(i,j) + GetMin(DP(i-1,j),DP(i,j-1),DP(i-1,j-1));end
end
%回溯,找到各个特征点之间的匹配关系
i = x_len;
j = y_len;
while(~((i == 1)&&(j==1)))plot([i,j],[x(i),y(j)],'b');hold on %画出匹配之后的特征点之间的匹配关系if(i==1)index_i = 1index_j = j-1elseif(j==1)index_i = i-1index_j = 1else[index_i,index_j] = GetMinIndex(DP(i-1,j-1),DP(i-1,j),DP(i,j-1),i,j)endi = index_i;j = index_j;
end

最终效果如下图,可以看出来是考虑了平移之后的匹配。

DTW算法——Matlab实现相关推荐

  1. dtw算法 matlab,基于DTW的语音识别在MATLAB中的实现方法浅析

    摘要:本文阐述了基于DTW的非特定人语音识别的基本原理与实现方法.该语音识别系统预先建立标准语音模板库与三名待测者的语音模板的方法,然后结合MATLAB中自带voicebox语音工具箱及相应语音处理函 ...

  2. 【语音识别】基于DTW算法实现0~9数字和汉字语音识别含Matlab源码

    1 简介 在孤立词语音识别中,动态时间规整DTW算法是一种应用较为广泛的算法之一,有着较强的科学性,在立足于当前DTW语音识别算法应用的实际情况下,简略阐述了该课题的研究背景,并从预处理和特征参数提取 ...

  3. DTW算法(语音识别)

    DTW主要是应用在孤立词识别的算法,用来识别一些特定的指令比较好用,这个算法是基于DP(动态规划)的算法基础上发展而来的.这里介绍语音识别就先介绍下语音识别的框架,首先我们要有一个比对的模版声音,然后 ...

  4. 从一个实例中学习DTW算法

     基于动态时间规整算法(DTW)的相似度计算 Killer 发表于(2015-10-063) 本文标签:大数据 机器学习 算法 浏览量:193次 喜欢收藏 在孤立词语音识别中,最为简单有效的方法是 ...

  5. 基于DTW算法的语音识别原理与实现

    [摘 要]以一个能识别数字0-9的语音识别系统的实现过程为例,阐述了基于DTW算法的特定人孤立词语音识别的基本原理和关键技术.其中包括对语音端点检测方法.特征参数计算方法和DTW算法实现的详细讨论,最 ...

  6. dst matlab,DSTcode DST跟踪算法MATLAB代码,复杂环境中仿多目标 实现的单 Other systems 其他 272万源代码下载- www.pudn.com...

    文件名称: DSTcode下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 82 KB 上传时间: 2017-03-17 下载次数: 0 提 供 者: Mar ...

  7. 图片缩放 算法 matlab,图像放大算法总结及MATLAB源程序.doc

    图像放大算法总结及MATLAB源程序 1,插值算法(3种): (1)最邻近插值(近邻取样法): 最近插值的的思想很简单就是把这个非整数坐标作一个四舍五入,取最近的整数点坐标处的点的颜色.可见,最邻近插 ...

  8. TDOA定位的Chan算法MATLAB源代码

    TDOA定位的Chan算法MATLAB源代码 . function [POS_ref,POS1,POS2,POS3,POS4] = TDOA_chan(R,Pbs,Q) %************** ...

  9. dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)

    BSO讲解https://www.zhihu.com/video/1252605855767736320 B站搜索:随心390,同步观看视频 各位小伙伴可在闲鱼搜索 优化算法交流地,即可搜索到官方闲鱼 ...

  10. Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划

    Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划 目录 PrA之nLP非线性规划算法 操作图文教程 PrA之nLP非线性规划算法 (1).编写M ...

最新文章

  1. 二层交换机的六条安全秘诀
  2. php 单例类 mysql pdo_PHP实战:PHP基于单例模式编写PDO类的方法
  3. Coding and Paper Letter(六)
  4. C语言程序顺序结构1交换变量,如何将c语言中结构体内的所有类型变量的值输出来...
  5. 基于java的网络抓包方法
  6. 邮件服务器搬家,企业邮箱怎么“搬家”
  7. 90后告别第一份工作后,更青睐新一线城市开启职场第二步
  8. 高等数学——伽马函数
  9. 金融衍生品交易系统(场内交易VS.场外交易)的架构特点
  10. PIPIOJ1099PIPI的油田
  11. Banner设计技巧总结
  12. html怎么制作扇形,css3绘制画圆、扇形
  13. Linux(一):初识ARM Linux
  14. css3.0 是什么,css3.0
  15. 人机关系一线牵——从注意力的视角审视人机关系
  16. java民生银行支付接口_民生付商户端开发手册和接口规范V1.0.0.doc
  17. 个人版的一键GHOST工具V1.0 BY何定坤
  18. 华为手机打开图片很慢是怎么回事_华为手机打开相册反应慢
  19. ChatGPT提供的云养猪商业计划书
  20. 谈RGB色彩图片相似度用到的最强六色归一方法

热门文章

  1. Hadoop大数据技术课程设计说明
  2. python数据结构-顺序表
  3. STM32+AD7124+热电偶方案+Pt100冷端补偿解析工程源码,源码包含Pt100、NTC热敏、热电偶处理驱动源码
  4. 请修改服务器脱机策略,异速联/天高客户端用户已离线但服务器端用户会仍话驻留处理方法...
  5. TransE算法原理与代码解析(2021-06-22)
  6. LabVIEW升级图像识别功能
  7. html字体兼容写法,字体兼容写法
  8. 元数据 数据元 释义
  9. GHOST重装系统后分区丢失只剩C盘的数据恢复方法
  10. StringUtil.format使用介绍