主要内容

dtw

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

描述

例子

经销= dtw (xy拉伸两个向量,x而且y,到一个公共的瞬间集,这样经销,对应点之间欧氏距离之和最小。为了延伸输入,dtw重复的每个元素x而且y必要的时候可以多次。如果x而且y都是矩阵经销通过重复它们的列来拉伸它们。这样的话,x而且y必须有相同的行数。

例子

经销9iy= dtw(xy返回公共瞬时集,或扭曲的路径,以致于x9),yiy)有最小的可能经销他们之间。

向量9而且iy长度相同。每一个都包含一个单调递增的序列,其中对应信号的元素的索引,xy,重复必要的次数。

x而且y矩阵,9而且iy是这样的x(第九:)而且yiy (:,)最小程度的分离。

例子

___= dtw(xymaxsamp将翘曲路径限制在内部maxsamp样品之间呈直线拟合x而且y.此语法返回以前语法的任何输出参数。

例子

___= dtw(___度规指定在以前语法中的任何输入参数之外使用的距离度量。

例子

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

  • 如果信号是实向量,则该函数在子图中显示两个原始信号,并在第一个信号下方的子图中显示对齐的信号。

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

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

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

例子

全部折叠

产生两个实信号:一个啁啾信号和一个正弦信号。

X = cos(2* *(3*(1:1000)/1000).^2);Y = cos(2* *9*(1:399)/400);

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

dtw (x, y);

图中包含2个轴对象。标题为Original Signals的Axes对象1包含2个类型为line的对象。axis对象2,标题为Aligned Signals(欧氏距离:21.593428),包含2个line类型的对象。

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

Y = cos(2* *18*(1:39 99)/400);dtw (x, y);

图中包含2个轴对象。标题为Original Signals的Axes对象1包含2个类型为line的对象。axis对象2,标题为Aligned Signals(欧氏距离:169.301757),包含2个类型为line的对象。

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

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

图中包含2个轴对象。标题为Original Signals的Axes对象1包含2个类型为line的对象。axis对象2,标题为Aligned Signals(平方欧氏距离:2.113124),包含2个类型为line的对象。

设计一个类似于早期计算机输出的字体。用它来写MATLAB®这个词。

CHR = @(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]);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]) xlabel(MATLAB)) ylabel (“原始”Kj = 2:4 subplot(4,1, Kj,“XLim”, 60[0])间谍([c (M) c (A) c (T) (L) c c (A) (B)))包含() ylabel (“腐败”结束

图中包含4个轴对象。Axes对象1包含一个line类型的对象。坐标轴对象2包含一个line类型的对象。Axes对象3包含一个line类型的对象。Axes对象4包含一个line类型的对象。

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

1 = [c(M) c(A) c(T) c(L) c(A) c(B)];二= [c(M) c(A) c(T) c(L) c(A) c(B)];[ds,ix,iy] = dtw(1, 2);Onewarp = 1 (:,ix);Twowarp = two(:,iy);

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

图subplot(4,1,1) spy(one) xlabel() ylabel (“一个”)次要情节(4,1,2)间谍(二,“r”)包含() ylabel (“两个”) subplot(4,1,3) spy(onewarp) xlabel() ylabel (“onewarp”)次要情节(4,1,4)间谍(二经线,“r”)包含() ylabel (“twowarp”

图中包含4个轴对象。Axes对象1包含一个line类型的对象。坐标轴对象2包含一个line类型的对象。Axes对象3包含一个line类型的对象。Axes对象4包含一个line类型的对象。

的内置功能重复计算dtw

dtw(1、2);

图中包含6个轴对象。标题为“重叠对齐信号”的Axes对象1包含一个图像类型的对象。标题为Aligned Signal (Y)的坐标轴对象2包含一个图像类型的对象。标题为Aligned Signal (X)的坐标轴对象3包含一个图像类型的对象。标题为“覆盖原始信号”的Axes对象4包含一个图像类型的对象。标题为原始信号(Y)的坐标轴对象5包含一个图像类型的对象。标题为原始信号(X)的坐标轴对象6包含一个图像类型的对象。

生成两个由不同长度的谷分隔的两个不同的峰组成的信号。把信号画出来。

X1 = [0 1 0 0 0 0 0 0 0 0 0 0 0 1 0]*.95;X2 = [0 1 0 1 0]*.95;Subplot (2,1,1) plot(x1) xl = xlim;Subplot (2,1,2) plot(x2) xlim(xl)

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

在不限制扭曲路径的情况下对齐信号。为了产生完美的对齐,该函数只需要重复较短信号的一个样本。

图dtw (x1, x2);

图中包含2个轴对象。标题为Original Signals的Axes对象1包含2个类型为line的对象。标题为Aligned Signals(欧氏距离:0.000000)的Axes对象2包含2个line类型的对象。

画出弯曲路径和两个信号之间的直线拟合。为了实现对齐,该函数将峰值之间的槽慷慨地扩展。

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

图中包含一个轴对象。axis对象包含2个line类型的对象。

重复计算,但现在将扭曲路径限制为与直线拟合最多偏差三个元素。画出拉伸信号和弯曲路径。

[dc,i1c,i2c] = dtw(x1,x2,3);次要情节(2,1,1)情节((x1 (i1c); x2 (i2c)”,“。”)标题(的距离:Num2str (dc)]) subplot(2,1,2) plot(i1c,i2c,“啊——”,[i1(1) i1(end)],[i2(1) i2(end)])

图中包含2个轴对象。带有标题Distance的坐标轴对象1:1.9包含2个类型为line的对象。坐标轴对象2包含2个line类型的对象。

这种约束可以防止翘曲过多地集中在一小部分样本上,从而牺牲对齐质量。用一个样本约束重复计算。

dtw (x1, x2, 1);

图中包含2个轴对象。标题为Original Signals的Axes对象1包含2个类型为line的对象。标题为Aligned Signals(欧氏距离:7.600000)的Axes对象2包含2个line类型的对象。

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

负载mtlb输入soundsc(mtlb,Fs)

提取对应于/æ/音素的两个实例的两个片段。第一次大约发生在150毫秒到250毫秒之间,第二次发生在370毫秒到450毫秒之间。画出两个波形。

a1 = mtlb(圆(0.15*Fs):圆(0.25*Fs));a2 = mtlb(round(0.37*Fs):round(0.45*Fs));次要情节(2,1,1)情节((0:元素个数(a1) 1) / Fs + 0.15, a1)标题(“a_1”次要情节(2,1,2)情节((0:元素个数(a2) 1) / Fs + 0.37, a2)标题(“a₂”)包含(的时间(秒)

图中包含2个轴对象。标题为indexOf 1基线的坐标轴对象1包含一个line类型的对象。标题为indexOf 2基线的坐标轴对象2包含一个line类型的对象。

输入soundsc(a1,Fs), pause(1), soundsc(a2,Fs)

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

[d,i1,i2] = dtw(a1,a2);A1w = a1(i1);A2w = a2(i2);t =(0:数字(i1)-1)/Fs;持续时间= t(结束)
持续时间= 0.1297
Subplot (2,1,1) plot(t,a1w)标题(“a_1,扭曲”) subplot(2,1,2) subplot(t,a2w),扭曲的)包含(的时间(秒)

图中包含2个轴对象。坐标轴对象1,标题为indexOf 1基线,空白W a r p d包含一个类型为line的对象。轴对象2,标题为indexOf 2基线,空白W a r p d包含一个类型为line的对象。

要收听,输入soundsc(a1w,Fs), pause(1), sound(a2w,Fs)

用一个完整的单词重复这个实验。加载一个包含“坚强”这个词的文件,由一个女人和一个男人说。信号以8千赫采样。

负载(“strong.mat”输入soundsc(her,fs), pause(2), soundsc(he,fs)

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

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

图中包含2个轴对象。标题为Original Signals的Axes对象1包含2个类型为line的对象。标题为Aligned Signals(绝对距离:163.663272)的Axes对象2包含2个line类型的对象。这些物件代表她,代表他。

[d,iher,ihim] = dtw(她,他,“绝对”);Duration = numel(iher)/fs
持续时间= 0.8394
要收听,输入soundsc(her(iher),fs), pause(2), soundsc(he (ihim),fs)

的文件MATLAB1.gif而且MATLAB2.gif包含两个手写的“MATLAB®”样本。加载文件并使它们沿着x-轴使用动态时间翘曲。

samp1 =“MATLAB1.gif”;samp2 =“MATLAB2.gif”;X = double(imread(samp1));Y = double(imread(samp2));dtw (x, y);

图中包含6个轴对象。标题为“重叠对齐信号”的Axes对象1包含一个图像类型的对象。标题为Aligned Signal (Y)的坐标轴对象2包含一个图像类型的对象。标题为Aligned Signal (X)的坐标轴对象3包含一个图像类型的对象。标题为“覆盖原始信号”的Axes对象4包含一个图像类型的对象。标题为原始信号(Y)的坐标轴对象5包含一个图像类型的对象。标题为原始信号(X)的坐标轴对象6包含一个图像类型的对象。

输入参数

全部折叠

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

数据类型:|
复数支持:金宝app是的

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

数据类型:|
复数支持:金宝app是的

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

数据类型:|

距离度量,指定为“欧几里得”“绝对”“方”,或“symmkl”.如果X而且Y都是K那么是-维信号度规规定dXY的距离样品Xn样品Y.看到动态时间翘曲欲了解更多有关dXY).

  • “欧几里得”-差分平方和的平方根,也称为欧几里得或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度量。这个指标只对实数和正数有效X而且Y

    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样本,分别。鉴于dXY的距离样品Xn样品Y中指定的度规经销延伸X而且Y到一个公共的瞬间集上,使得全局信号到信号距离测量值最小。

最初,该函数排列所有可能的值dXY)形成晶格状

然后经销在由两个相同长度的序列参数化的晶格中寻找路径,9而且iy比如,

d 9 n iy d n X Y

是最低的。可接受的经销路径从d11XY),结束地址为dXY),以及“棋王”的组合:

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

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

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

这种结构确保了任何可接受的路径对齐完整的信号,不会跳过样本,也不会重复信号特征。此外,一个理想的路径运行接近对角线之间延伸d11XY),dXY).这个额外的约束,由maxsamp参数,确保翘曲比较相似长度的部分,并且不会过度拟合离群特征。

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

不允许使用以下路径:

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

参考文献

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

[2] Sakoe, Hiroaki和Seibi千叶。语音识别的动态规划算法优化IEEE®声学、语音与信号处理汇刊.Vol. ASSP-26, No. 1, 1978, pp. 43-49。

扩展功能

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

版本历史

在R2016a中引入