主要内容

DTW.

动态时间翘曲信号之间的距离

描述

例子

dist= dtw(xy延伸两个向量,xy,在一套常见的瞬间,这样dist,相应点之间的欧几里德距离的总和是最小的。伸展输入,DTW.重复每个元素xy必要时可以多次。如果xy是矩阵,然后是dist通过重复柱子来延伸它们。在这种情况下,xy必须有相同的行数。

例子

dist9iy] = dtw(xy返回常见的瞬间集或扭曲的路径,这样x9) 和yiy)有最小的可能dist他们之间。

载体9iy长度相同。每一个都包含一个单调递增的序列,其中对应信号的元素的指标,x要么y,重复必要的次数。

什么时候xy矩阵,9iy是这样的,x(:,ix)y(:,IY)最低限度是分离。

例子

___] = dtw(xyMaxSamp.限制在内​​部的翘曲路径MaxSamp.样本之间的直线拟合xy.此语法返回先前语法的任何输出参数。

例子

___] = dtw(___公制指定要在前面语法中的任何输入参数之外使用的距离度量。

例子

dtw(___没有输出参数,绘制原始的和对齐的信号。

  • 如果信号是真实向量,则该功能在第一函数下方显示子图上的两个原始信号和在第一函数下方的子图中。

  • 如果信号是复杂的向量,则该功能将在三维图中显示原始和对齐信号。

  • 如果信号是真实矩阵,则功能使用显示亮度图像显示原始的和对齐的信号。

  • 如果信号是复杂的矩阵,则该函数在每个图像的顶部和下半部分地点绘制它们的实部和虚部。

例子

全部折叠

生成两个实际信号:啁啾和正弦曲线。

X = COS(2 * PI *(3 *(1:1000)/ 1000)。^ 2);Y = COS(2 * PI * 9 *(1:399)/ 400);

使用动态时间扭曲来对齐信号,使它们点之间的欧几里得距离之和最小。显示对齐的信号和距离。

dtw (x, y);

图中包含2个轴。标题为Original Signals的轴1包含2个类型为line的对象。具有标题对齐信号的轴2(欧几里德距离:21.593428)包含2个类型的线。

将正弦频率更改为其初始值的两倍。重复计算。

Y = COS(2 * PI * 18 *(1:399)/ 400);dtw (x, y);

图中包含2个轴。标题为Original Signals的轴1包含2个类型为line的对象。具有标题对齐信号的轴2(欧几里德距离:169.301757)包含2个类型的2个物体。

向每个信号添加一个虚构的部件。恢复初始正弦频率。使用动态时间扭曲通过最小化平方欧几里德距离的总和来对齐信号。

x = exp(2i * pi *(3 *(1:1000)/ 1000)。^ 2);Y = EXP(2I * PI * 9 *(1:399)/ 400);dtw(x,y,“方”);

图中包含2个轴。标题为Original Signals的轴1包含2个类型为line的对象。标题为Aligned Signals (Squared Euclidean Distance: 2.113124)的坐标轴2包含2个类型为line的对象。

设计类似于早期计算机的输出的字体。使用它来写下matlab®。

装备= @ (x) dec2bin (x ') -48;M = chr([34 34 54 42 34 34 34 34]);A = chr([08 20 34 34 62 34 34]);T = chr([62 08 08 08 08 08 08 08 08 08 08 08]);L = chr([32 32 32 32 32 32 62]);B = chr([60 34 34 60 34 34 60]);Matlab = [m a t l a b];

通过重复字母的随机列并改变间距来损坏单词。显示原始单词和三个损坏的版本。重置随机数发生器以进行可重复的结果。

rng (“默认”)c = @(x)x(:,sort([1:6 randi(6,1,3)])));子图(4,1,1,'xlim',[0 60]) spy(MATLAB) xlabel('')ylabel('原来的'subplot(4,1, Kj,)'xlim',[060])间谍([C(m)c(a)c(t)c(t)c(l)c(a)c(b))xlabel('')ylabel('腐败'结束

图包含4个轴。Axes 1包含一个类型为line的对象。Axes 2包含一个类型为line的对象。轴3包含类型线的对象。轴4包含类型线的对象。

生成两个更损坏的单词版本。使用动态时间翘曲对齐它们。

1 = [c(M) c(A) c(T) c(L) c(A) c(B)];2 = [c(M) c(A) c(T) c(L) c(A) c(B)];[ds,第九,iy] = dtw(1、2);onewarp = 1 (:, ix);twowarp = 2 (:, iy);

显示未对齐和对齐的单词。

图subplot(4,1,1) spy(one) xlabel('')ylabel('一')子图(4,1,2)间谍(两个,“r”)xlabel('')ylabel('二')子图(4,1,3)间谍(onewarp)xlabel('')ylabel('onewarp')子图(4,1,4)间谍(TwowArp,“r”)xlabel('')ylabel('twowarp'

图包含4个轴。Axes 1包含一个类型为line的对象。Axes 2包含一个类型为line的对象。轴3包含类型线的对象。轴4包含类型线的对象。

使用内置功能重复计算DTW.

DTW(一,二);

图包含6个轴。带标题的轴1覆盖对齐信号包含类型图像的对象。具有标题对齐信号(Y)的轴2包含类型图像的对象。具有标题对齐信号(x)的轴3包含类型图像的对象。具有标题的轴4覆盖原始信号包含类型图像的对象。具有标题原始信号(Y)的轴5包含类型图像的对象。具有标题原始信号(x)的轴6包含类型图像的对象。

生成两个信号,由两个不同的峰,由不同长度的山谷分开。绘制信号。

X1 = [0 1 0 0 0 0 0 0 0 0 0 1 0] *。95;x2 = [0 1 0 1 0] *。95;子图(2,1,1)绘图(x1)xl = xlim;子图(2,1,2)绘图(x2)xlim(xl)

图中包含2个轴。Axes 1包含一个类型为line的对象。Axes 2包含一个类型为line的对象。

对齐信号对翘曲路径没有限制。要产生完美的对齐,该功能需要只重复较短信号的一个样本。

图dtw (x1, x2);

图中包含2个轴。标题为Original Signals的轴1包含2个类型为line的对象。标题为“对齐信号(欧几里得距离:0.000000)”的轴2包含2个类型为line的对象。

绘制两种信号之间的翘曲路径和直线配合。为了实现对齐,该功能慷慨地扩展了峰之间的槽。

[d, i1、i2] = dtw (x1, x2);图绘制(i1、i2“啊——”, (i1 (1) i1(结束)],[i2 (1) i2(结束)])

图包含轴。轴包含2个类型的型号。

重复计算,但现在限制翘曲路径以直线合适的大多数三个元素偏离。绘制拉伸的信号和翘曲路径。

[DC,I1C,I2C] = DTW(X1,X2,3);子图(2,1,1)图([x1(i1c); x2(i2c)]',“。”) 标题(['距离: 'num2str(DC)])子图(2,1,2)绘图(I1C,I2C,“啊——”, (i1 (1) i1(结束)],[i2 (1) i2(结束)])

图中包含2个轴。带标题距离的轴1:1.9包含2个类型的2个物体。轴2包含2个类型的2个物体。

这个约束阻止了翘曲过多地集中在样本的一个小子集上,以牺牲对齐质量为代价。对一个样本约束重复计算。

dtw(x1,x2,1);

图中包含2个轴。标题为Original Signals的轴1包含2个类型为line的对象。具有标题对齐信号的轴2(欧几里德距离:7.600000)包含2个类型的2个物体。

加载语音信号采样 F 年代 7 4 1 8 H z .该文件包含一段女性声音的录音,她说的是“MATLAB®”。

负载MTLB.%听到,键入soundsc(mtlb,Fs)

提取对应于/æ/音素的两个实例的两个段。第一个在150ms和250ms之间发生大约在150ms和250ms之间,第二个在370毫秒和450毫秒之间。绘制两个波形。

A1 = MTLB(圆形(0.15 * FS):圆形(0.25 * FS));A2 = MTLB(圆形(0.37 * FS):圆形(0.45 * FS));子图(2,1,1)图((0:numel(a1)-1)/fs+0.15,a1)标题(“a_1”次要情节(2,1,2)情节((0:元素个数(a2) 1) / Fs + 0.37, a2)标题(“a₂”)xlabel('时间(秒)'

图中包含2个轴。标题为a_1的轴1包含一个类型为line的对象。标题为a_2的轴2包含一个类型为line的对象。

%听到,键入Soundsc(A1,FS),暂停(1),Soundsc(A2,FS)

经过时轴,使信号之间的欧几里德距离最小化。计算翘曲信号的共享“持续时间”并绘制它们。

[D,I1,I2] = DTW(A1,A2);A1W = A1(I1);A2W = A2(I2);t =(0:numel(i1)-1)/ fs;持续时间= t(结束)
持续时间= 0.1297.
次要情节(2,1,1)情节(t, a1w)标题('a_1,翘曲') subplot(2,1,2) plot(t,a2w) title('a_2,翘曲')xlabel('时间(秒)'

图中包含2个轴。标题为a_1的轴1,warp包含一个类型为line的对象。标题为a_2的轴2,warp包含一个类型为line的对象。

%听到,键入Soundsc(A1W,FS),暂停(1),声音(A2W,FS)

用完整的单词重复实验。加载包含“强”单词的文件,由一个女人和一个男人说话。信号在8 kHz时采样。

加载('strong.mat'%听到,键入soundsc(她,fs),停顿(2),soundsc(他,fs)

弯曲时间轴,使信号之间的绝对距离最小化。绘制原始信号和转换信号。计算它们共享的扭曲“持续时间”。

dtw(她,他,“绝对”);传奇('她'“他”

图中包含2个轴。标题为Original Signals的轴1包含2个类型为line的对象。具有标题对齐信号的轴2(绝对距离:163.663272)包含2个类型的线。这些物品代表她,他。

[D,iher,ihim] = dtw(她,他,“绝对”);持续时间= numel(iher)/ fs
持续时间= 0.8394.
%听到,键入soundsc(她(iher),fs),暂停(2),soundsc(他(ihim),fs)

的文件matlab1.gif.matlab2.gif.包含单词“matlab®”一词的手写样本。加载文件并沿着它们对齐x-轴使用动态时间扭曲。

samp1 ='matlab1.gif';samp2 ='matlab2.gif';双(x = imread (samp1));y =双(imread (samp2));dtw (x, y);

图包含6个轴。带标题的轴1覆盖对齐信号包含类型图像的对象。具有标题对齐信号(Y)的轴2包含类型图像的对象。具有标题对齐信号(x)的轴3包含类型图像的对象。具有标题的轴4覆盖原始信号包含类型图像的对象。具有标题原始信号(Y)的轴5包含类型图像的对象。具有标题原始信号(x)的轴6包含类型图像的对象。

输入参数

全部折叠

输入信号,指定为真实或复杂的向量或矩阵。

数据类型:单身的|双倍的
复数的支持:金宝app是的

输入信号,指定为真实或复杂的向量或矩阵。

数据类型:单身的|双倍的
复数的支持:金宝app是的

调整窗口的宽度,指定为正整数。

数据类型:单身的|双倍的

距离度量,指定为'euclidean'“绝对”“方”, 要么“symmkl”.如果XY都是K- 二维信号,然后公制规定dmXY)之间的距离样本Xn样本Y.看动态时间扭曲有关的更多信息dmXY).

  • 'euclidean'- 平方差异的根和,也称为欧几里德或2度量:

    d n X Y σ. k 1 K x k - y k n x k - y k n

  • “绝对”- 绝对差异的总和,也称为曼哈顿,城市块,出租车或1度量:

    d n X Y σ. k 1 K | x k - y k n | σ. k 1 K x k - y k n x k - y k n

  • “方”- 欧几里德公制的平方,由平方差异的总和组成:

    d n X Y σ. k 1 K x k - y k n x k - y k n

  • “symmkl”- 对称Kullback-Leibler度量标准。此度量标准仅适用于真实和积极XY

    d n X Y σ. k 1 K x k - y k n 日志 x k - 日志 y k n

输出参数

全部折叠

信号之间的最小距离,返回为正实标量。

第一个信号的扭曲路径,返回为索引向量或矩阵。

第二个信号的弯曲路径,返回为索引向量或矩阵。

更多关于

全部折叠

动态时间扭曲

由于它们的部分持续时间的差异,以相同顺序排列的等效特征的两个信号可能出现非常不同。动态时间翘曲扭曲这些持续时间,使得相应的特征在公共时间轴上显示在相同的位置,从而突出显示信号之间的相似性。

考虑两者K维信号

X x 1 1 x 1 2 x 1 x 2 1 x 2 2 x 2 x K 1 x K 2 x K

Y y 1 1 y 1 2 y 1 N y 2 1 y 2 2 y 2 N y K 1 y K 2 y K N

哪有N分别样品。给予dmXY)之间的距离样本Xn样本Y指定公制dist延伸XY在一组常见的瞬间上,使得全局信号到信号距离测量最小。

最初,该功能安排所有可能的值dmXY)进入表格的格子

然后dist通过两个长度相同的序列参数化的晶格寻找一条路径,9iy-such那个

d σ. 9 n iy d n X Y

是最低的。可接受的dist路径开始d11.XY),结束dmXY),是“象棋王”的组合:

  • 垂直移动:n)→(+ 1,n

  • 水平移动:n)→(n+ 1)

  • 对角线移动:n)→(+ 1,n+ 1)

这种结构确保任何可接受的路径对完整的信号,不跳过样本,不重复信号特征。此外,一个理想的路径接近对角线延伸之间d11.XY) 和dmXY).这种额外的约束,调整了MaxSamp.参数,可确保翘曲比较类似的长度的部分,并没有过度装备异常功能。

这是通过晶格的一条可能路径:

不允许以下路径:

不对齐整个信号 跳过样品 重新开始,重复一个功能

参考文献

[1] Paliwal, K. K., Anant Agarwal和Sarvajit S. Sinha。“对Sakoe和Chiba的孤立词识别动态时间扭曲算法的改进”。信号处理.第4卷,1982年,329-333页。

Sakoe, Hiroaki和Seibi千叶。“语音识别的动态规划算法优化”。IEEE.®声学,语音和信号处理的交易.卷。ASSP-26,第1,1978号,第43-49页。

扩展能力

C / C ++代码生成
使用MATLAB®Coder™生成C和C ++代码。

介绍了R2016a