基于MATLAB的动态时间规整(DTW)算法实现
项目简介
本项目在MATLAB环境下完整实现了动态时间规整(Dynamic Time Warping,简称DTW)算法。DTW是一种衡量两个时间序列之间相似度的高效方法,特别适用于处理长度不同或在时间轴上存在非线性伸缩的序列比对问题。
本项目代码经过优化,逻辑结构清晰,采用模块化设计。它不仅实现了核心的算法逻辑,还包含了测试数据的自动生成、数据预处理以及详细的结果可视化功能。该代码明确在MATLAB 6.5版本下编译通过,具有极佳的向下兼容性和稳定性,可作为语音识别、生物信息学或金融数据分析的算法基准。
功能特性
- 自动化测试数据生成:能够自动生成参考序列(标准正弦波)和测试序列(带有频率拉伸、幅度差异及随机噪声的变形波)。
- 数据预处理:内置Z-score标准化处理,消除不同序列间的幅度量纲差异,确保距离计算仅基于波形趋势。
- 核心DTW算法实现:
* 计算两序列间的欧氏距离矩阵。
* 利用动态规划思想构建累积距离矩阵。
* 通过回溯法(Backtracking)寻找全局最优规整路径。
- 多维度可视化:提供三部分组合图表,直观展示原始波形、算法矩阵热力图及最终的对齐映射效果。
系统要求
- 软件环境:MATLAB
- 版本兼容性:代码编写注重兼容性,已在MATLAB 6.5版本下验证通过,同时支持所有现代版本的MATLAB环境。
算法实现细节
本项目的主要脚本 main.m 集成了数据准备、算法计算和结果展示的全过程,具体实现逻辑如下:
1. 数据准备与预处理
程序首先清空工作区,然后生成两组模拟的时间序列数据:
- 参考序列 (Reference):基于标准时间步长的正弦波。
- 测试序列 (Test):模拟了非线性时间伸缩(时间步长不同)和幅度变化(乘以系数并叠加随机噪声)的正弦波。
- 归一化:为了保证比对的准确性,代码对两个序列分别进行了Z-score标准化(减去均值除以标准差),消除了幅度绝对值对距离计算的干扰。
2. DTW 核心算法逻辑
算法被封装在独立的子函数中,执行以下三个关键步骤:
步骤一:构建欧氏距离矩阵
遍历参考序列和测试序列的每一个点,计算两点数值之间的绝对差值(一维欧氏距离),生成一个 $N times M$ 的距离矩阵 $D$。
步骤二:动态规划构建累积距离矩阵
基于距离矩阵 $D$,构建累积距离矩阵 $D_{cum}$。
- 初始化:确定起点的累积距离,并填充矩阵的第一行和第一列(边界条件)。
- 递推填充:对于矩阵内部的每一个点 $(i,j)$,其累积距离等于当前点的欧氏距离加上其“左方”、“下方”或“左下方”三个邻域中的最小累积距离。公式体现了寻找局部最优解的思想。
- 主要输出:矩阵右下角的值即为两个序列规整后的最小累积距离,用于直接衡量序列相似度。
步骤三:回溯寻找最优路径
从矩阵的终点 $(N, M)$ 开始,逆向寻找通往起点 $(1, 1)$ 的路径。
- 在每一步中,算法检查当前点的前驱节点(左、下、左下),选择累积距离最小的方向进行移动。
- 记录下的路径坐标点经过反转后,即形成从起点到终点的最优规整路径(Warping Path)。
3. 结果可视化
程序利用图形化界面直观展示计算结果,分为三个子图:
- 原始序列对比:将参考序列和测试序列绘制在同一坐标系下,展示未对齐时的波形差异。
- 累积距离矩阵与路径:使用热力图(jet colormap)展示累积距离矩阵的数值分布,并以白色线条叠加显示计算出的最优规整路径。
- 序列对齐映射:将参考序列和测试序列在Y轴上进行偏移分开绘制。利用灰色虚线将最优路径中对应的匹配点连接起来,直观展示了DTW算法如何通过“拉伸”或“压缩”时间轴来实现波形的最佳对齐。
使用方法
- 确保计算机上已安装MATLAB软件。
- 将包含代码的脚本文件保存到MATLAB的工作路径中。
- 在MATLAB命令窗口输入主函数名称并回车,或直接在编辑器中点击运行。
- 程序将自动输出生成的序列长度、计算得到的最小累积距离、最优路径点数,并弹出包含三个子图的可视化窗口。