动态时间规整DTW
对于时间序列,有一个普遍的任务就是判断两个时间序列的相似程度。
DTW是在欧氏距离(欧几里得距离)计算的基础上,采用动态规划(DP)的思想,用满足一定条件的时间规整函数描述测试模板和参考模板的时间对饮关系,求解两个模板匹配时累计距离最小所对应的规整函数。DTW算法将自动缩放时间序列,使两个时间序列的形态尽可能的一致,常被用于孤立词语音识别、手势识别、信息检索、数据挖掘等。
以上摘自本人本科毕业论文的一段,写的花里胡哨。简单来讲就是计算出时间序列每一帧之间的欧氏距离,通过动态规划来找到一条使欧式距离和最小的一条路。
其中的欧式距离可以视实际应用进行修改。如语音中音波为一维,位置变化中为一维、二维、三维都可能有。
%%DTW算法的MATLAB实现
%DTW(Dynamic Time Warping):动态时间规整算法
%一种衡量两个时间序列之间的相似度的方法。
%主要应用在语音识别领域识别两段语音是否能表示同一个单词。
%函数名:dtw
%输入:t(向量,理论路径);r(向量,实际路径)
%输出:z(两个数据的相似度)
function z = dtw(t,r)
n = size(t,2);%n为向量t的长度
m = size(r,2);%m为向量r的长度
%构造矩阵d为帧匹配距离矩阵
d = zeros(n,m);%先构造一个空的矩阵,长和宽分别为n和m
for a = 1:n
for b = 1:m
d(a,b) = (t(a)-r(b)).^2; % 视情况调整度量方式
%构造了一个矩阵,关于每一帧之间的匹配距离。
end
end
%矩阵f为累积距离矩阵
f = ones(n,m) * realmax;%先构造一个空矩阵,每个值的初始化都是realmax。
f(1,1) = d(1,1);%矩阵f的第一个值保持相等
%动态规划
for i = 1:n
for j = 1:m
if i == 1 && j == 1
continue
elseif i == 1
x = f(i,j-1);
elseif j == 1
x = f(i-1,j);
else
x = min([f(i-1,j-1),f(i-1,j),f(i,j-1)]);
end
f(i,j) = d(i,j) + x;
end
end
z = f(n,m);
end
分类:
学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通