DTW(Dynamic Time Warping)动态时间规整——简单易懂

article/2025/9/12 12:20:56

DTW可以用来干什么呢?
DWT可以计算两个时间序列的相似度,尤其适用于不同长度、不同节奏的时间序列(比如不同的人读同一个词的音频序列)。距离越近,相似度越高。

DTW在语音中的运用:
在实际应用中,比如说语音识别中的孤立词识别,我们首先训练好常见字的读音,提取特征后作为一个模板。当需要识别一个新来的词的时候,也同样提取特征,然后和训练数据库中的每一个模板进行匹配,计算距离。求出最短距离的那个就是识别出来的字了。
那么距离如何计算呢,因为待识别的语音的长度和模板的长度不总是一直的,也很难做到一致,所以DTW就可以解决这个问题。
DTW如何计算距离呢?
我们都知道,当两个序列的长度一致时,计算距离,直接对应位求距离,然后把每对对应点的距离求和,即可作为两个序列的距离。但是由于两个序列的长度不一致,计算距离的时候上述方法肯定无效。所以,就要考虑,这个一个序列的点,需要匹配另一个序列的多个点,另一个序列也可以匹配这个序列的多个点。
如下图所示:
在这里插入图片描述
那么如何匹配呢?
在这之前,需要介绍匹配的规则,这一点很重要:
1) 边界条件:任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,所以两个序列的初始点和结束点之间肯定存在匹配关系。
2) 连续性:就是不可能跨过某个点去匹配,只能和自己相邻的点对齐。
3) 单调性:上图中的灰色线不会相交。

知道这些之后,再举个栗子就明白如何通过DWT来计算两个序列之间匹配关系以及距离了:
栗子:
有两个一维数组,它们的长度分别为:

S1=[1,2,3,4,5,5,5,4]
S2=[3,4,5,5,5,4]

计算S1和S2各个元素之间的距离,这里由于一维序列,所以选择曼哈顿距离(差值的绝对值)作为两两元素之间的距离,得到如下的距离矩阵

     s2[0] s2[1] s2[2] s2[3] s2[4] s5[5]
s1[0][[2.   3.     4.     4.    4.    3.]
s1[1] [1.   2.     3.     3.    3.    2.]
s1[2] [0.   1.     2.     2.    2.    1.]
s1[3] [1.   0.     1.     1.    1.    0.]
s1[4] [2.   1.     0.     0.    0.    1.]
s1[5] [2.   1.     0.     0.    0.    1.]
s1[6] [2.   1.     0.     0.    0.    1.]
s1[7] [1.   0.     1.     1.    1.    0.]]

则序列的元素正确匹配的结果就是从距离矩阵的左上角走到最下角,把经过的元素累加,累加的和最小,则该最小和就是这两个序列使用DWT算法求得的距离了。匹配关系就是路径经过的元素所在的索引如(2,3),即s1[2]和s2[3]进行匹配。是不是很简单?

如何寻找最短路径呢?
怪不得名字叫做DTW(动态时规整,就是使用的动态规划求得最短距离路径)。
从上面匹配的规则,可知:路径从前一个元素经过(i,j)元素时,前一个元素只能来自(i-1,j-1), (i-1,j)或(i, j-1)这三个位置。否则,就会违背上述的匹配规律,感兴趣的小伙伴可以动手画一下图,会出现灰色线交叉的现象。
具体步骤:
1、求累计距离矩阵:
在这里插入图片描述
如上图:每个元素位置的累积距离数值为箭头指向它的元素的累计数值加上该元素本身的值。如果有三个箭头,则取这三个累计数值中的最小的一个作为该元素的累积数值。

2、得到累积矩阵之后,再回溯,得到最小累积和的路径
具体就不讲了,确实太简单了(还有其他事情【🤦‍】),看下python代码就知道了:感谢@Chelsea_Daggerhttps://www.jianshu.com/p/05bee48cc6a2提供的代码。

# -*- coding: UTF-8 -*-
from numpy import array, zeros, argmin, inf, equal, ndim
s1 = [1, 2, 3, 4, 5, 5, 5, 4]
s2 = [3, 4, 5, 5, 5, 4]r, c = len(s1), len(s2)
D0 = zeros((r+1,c+1))
D0[0,1:] = inf
D0[1:,0] = inf
D1 = D0[1:,1:]#浅复制for i in range(r):#生成原始距离矩阵for j in range(c):D1[i,j] = abs(s1[i]-s2[j])  # 曼哈顿距离M = D1.copy()
for i in range(r):#代码核心,动态计算最短距离for j in range(c):D1[i,j] += min(D0[i,j],D0[i,j+1],D0[i+1,j])i,j = array(D0.shape) - 2
#最短路径
p,q = [i],[j]
while(i>0 or j>0):tb = argmin((D0[i,j],D0[i,j+1],D0[i+1,j]))if tb==0 :i-=1j-=1elif tb==1 :i-=1else:j-=1p.insert(0,i)q.insert(0,j)print(M)
#原始距离矩阵
print(list(zip(p,q)))
#匹配路径过程
print(D1)
#Cost Matrix或者叫累积距离矩阵
print(D1[-1,-1])
#序列距离

http://chatgpt.dhexx.cn/article/GILnLPqF.shtml

相关文章

DTW(动态时间归整)算法的前世今生

今天和大家分享一下我刚刚学习到的DTW算法。 主要从以下几个方面进行介绍: 1. DTW算法的提出和应用场景。 2. DTW算法的基本原理和计算过程。 3. DTW算法的具体代码实现。 一、DTW算法的提出和应用场景 Dynamic Time Warping(简称:DTW&…

时间序列匹配之dtw的python实现(二)

简介 在上一篇文章里我们介绍了dtw库的使用,但其限制太多,不够灵活,且作图不够方便,因此我们来介绍一个更加复杂的库----dtw-python。它是R语言中dtw实现的python版本,基本的API是对应的,它的优势在于能够…

DTW算法详解

DTW算法详解 1.DTW 1.1 时序相似度 在时间序列数据中,一个常见的任务是比较两个序列的相似度,作为分类或聚类任务的基础。那么,时间序列的相似度应该如何计算呢? “ 经典的时间序列相似性度量方法总体被分为两 类: 锁步度量(lo…

动态时间规整算法(DTW)原理及代码实现

Dynamic Time Warping(DTW)动态时间规整算法 Dynamic Time Warping(DTW)是一种衡量两个时间序列之间的相似度的方法,主要应用在语音识别领域来识别两段语音是否表示同一个单词。 1. DTW方法原理 在时间序列中&#…

LOIC网站压力测试工具

官网下载:https://sourceforge.net/projects/loic/ 百度云:https://pan.baidu.com/s/1VVUjLqtq1mMAD-TJIAnhnQ 1.软件解压后运行,界面如图 2.然后可以在url处输入想要测试的网站网址,也可以输入ip地址,输入完之后要…

十大抢手的网站压力测试工具

两天,jnj在本站发布了《如何在低速率网络中测试 Web 应用》,那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量,以…

10大主流压力测试工具

市面上流行的压力/负载/性能测试工具多是来自国外,近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同,其功能也有很大差异,下面就为您简单介绍10款目前最常见的测试产品。 1、kylinTOP测试与监控平台(商…

jmeter压力测试

一、Jmeter数据库压力测试 1.1.先配置jdbc(数据库连接)驱动 1、启动jmeter,打开界面工具,添加一个线程组 2、添加一个JDBC Connection Configuration,连接池配置文件。右键线程组【添加】--【配置元件】- -【JDBC Co…

网站压力测试的几种方法

百度TcpCopy,得到的结果是:TCPCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去。曾经应用于网易的广告投放系统,urs系统,nginx hmux协议等系统,避免…

压力测试工具

目录 1 性能测试... 2 2 压力测试(Stress Test)... 2 2.1 网站测试... 2 2.2 系统测试要求... 3 3 测试工具... 3 3.1 Webbench. 4 3.1.1 Ubuntu 下载安装... 5 3.1.2 w…

开发工具-压力测试工具 ab

开发工具-压力测试工具 ab 写在前面ab工具简介下载 ab使用 ab测试结果报告信息解读 关于 post 请求的压力测试关于需要登录的测试关于报错 写在前面 在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念&a…

【转】十大抢手的网站压力测试工具

两天,jnj在本站发布了《 如何在低速率网络中测试 Web 应用 》,那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量&#xff…

windows环境压力测试工具Apache ab安装及使用(apache benchmark)

1.首先下载并解压安装包,下载地址Apache Haus Downloads 2.解压到C盘,并进入bin目录,复制路径,并配置环境变量,保存后就OK了 3.可以开始使用了,测试一下吧 ab -n 2000 -c 10 -k http://localhost:6868/dataScreenLibrary/findPublicShareByPk?id4 常用参数详解: …

Jmeter--压力测试工具

前言:Jmeter是一款抗压测试工具,具体是干嘛用的相信在来到这的小伙伴都对它有了一些基本的了解,这里就不做过多的赘述了,本文主要是记录一下Jmeter的下载使用过程是怎么样的~ 一、下载 官网地址:Apache JMeter - Dow…

JMeter压力测试工具

1 简介 JMeter是开源软件Apache基金会下的一个性能测试工具,用来测试部署在服务器端的应用程序的性能。 2 下载安装和启动 JMeter可以在JMeter的官方网站下载(https://jmeter.apache.org/) 官网找到Download 下载zip压缩包后, 解压到本地就行 进入/bin目录, 运…

简单好用的网站压力测试工具

简单好用的网站压力测试工具 下载:https://files.cnblogs.com/files/wordblog/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7.rar

网站压测工具Apache-ab,webbench,Apache-Jemeter

网站压测工具Apache-ab,webbench,Apache-Jemeter 1、搭建测试网站2、Apache自带工具ab3、webbench4、Windows下安装Apache-Jmeter 1、搭建测试网站 编译LAMP网站部署:LAMP web1配置: yum方式搭建网站 初始化 cd /etc/yum.repos.…

10大主流压力测试工具推荐

在移动应用和Web服务正式发布之前,除了进行必要的功能测试和安全测试,为了保证互联网产品的服务交付质量,往往还需要做压力/负载/性能测试。然而很多传统企业在试水互联网的过程中,往往由于资源或产品迭代速度等原因忽视了这一块工…

Linux中Makefile详细教程

目录 Makefile Makefile的介绍 Makefile简单的编写 .PHONY 问题: 如果只执行make,它执行的是Makefile里哪一段语句呢? 怎么知道我的可执行程序是最新的呢? Makefile编译多个文件 进度条小程序 Makefile Makefile的介绍 …

Makefile入门教程

转载&#xff1a; https://www.linuxidc.com/Linux/2014-08/105304.htm Makefile入门教程 回顾 首先&#xff0c;我把需要的文件全部写出来&#xff08;在《GCC学习笔记》处&#xff09;。 main.c文件 #include <stdio.h> #include "math.h" int main() { int…