dtw

使用动态时间规整信号之间的距离

描述

经销= DTW(Xÿ延伸的两个向量,Xÿ,到一个公共的瞬间集合,如经销中,对应点之间的欧几里得距离的总和,是最小的。伸展的输入,dtw重复的每个元素Xÿ作为根据需要多次。如果Xÿ矩阵,那么经销通过重复它们的列来扩展它们。在这种情况下,Xÿ必须具有相同的行数。

[经销IY)= dtw (Xÿ返回公共集时刻,或者扭曲路径,这样X)和ÿIY)最小的可能经销它们之间。

矢量IY具有相同的长度。各包含一个单调递增的序列,其中索引到相应的信号的元件,Xÿ中,重复的次数进行必要数量。

什么时候Xÿ是矩阵,IY是这样的:X(第九:)ÿ(:,IY)最低限度地分离。

[___)= dtw (Xÿmaxsamp将扭曲路径限制在内部maxsamp之间的直线拟合的样品Xÿ。此语法返回以前语法的任何输出参数。

[___)= dtw (___度规指定距离度量,以除了任何的在前面的语法的输入参数使用。

DTW(___无输出参数绘制原和调整信号。

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

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

  • 如果信号是实矩阵,功能用途于imagesc显示原始和对准信号。

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

例子

全部收缩

产生两个真实信号:啁啾和正弦曲线。

x = cos(2 *π* (3 * (1:1000)/ 1000)^ 2);y = cos(2 *π* 9 * (1:399)/ 400);

使用动态时间规整对准信号,使得欧氏距离他们点之间的和最小。显示调整信号和距离。

DTW(X,Y);

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

Y = COS(2 * PI * 18 *(1:399)/ 400);DTW(X,Y);

添加的虚部到每个信号。恢复的初始相位的频率。使用动态时间规整通过最小化平方欧氏距离的总和对准信号。

我x = exp(2 *π* (3 * (1:1000)/ 1000)^ 2);y = exp(我*π* 9 * 2 (1:399)/ 400);dtw (x, y,“平方”);

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

CHR = @(X)DEC2BIN(X') -  48;M = CHR([34 34 54 42 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)×(:,排序([1:6兰迪(6,1,3)]));副区(4,1,1,'XLIM',[0 60])间谍(MATLAB)xlabel(“”)ylabel (“原始”对于KJ = 2:4副区(4,1,KJ,'XLIM',[0 60])间谍([C(M)C(A)C(T)C(L)C(A)C(B)])xlabel(“”)ylabel (“堕落”结束

生成该词的两个更坏的版本。使用动态时间扭曲将它们对齐。

一个= [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,IX,IY] = DTW(一,二);onewarp =一个(:,ⅸ);twowarp = 2(:,IY);

显示未对齐和对齐的字。

图副区(4,1,1)间谍(一个)xlabel(“”)ylabel ('一')副区(4,1,2)间谍(两个'R')包含(“”)ylabel (“两个”) subplot(4,1,3) spy(onewarp) xlabel(“”)ylabel (“onewarp”)次要情节(4,4)间谍(twowarp,'R')包含(“”)ylabel ('twowarp'

使用的内置功能重复计算dtw

dtw (1、2);

产生两个信号,由两个不同的峰由不同长度的谷隔开。画出信号。

x1 = [0 1 0 0 0 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;次要情节(2,1,2)情节(x2) xlim (xl)

不受弯曲路径限制地对齐信号。为了产生完美的对准,该函数只需要重复较短信号的一个样本。

图DTW(X1,X2);

绘制两种信号之间的弯曲路径和直线拟合。为了实现对齐,该功能将波峰之间的波谷扩展得很宽。

并[d,I1,I2] = DTW(X1,X2);图图(I1,I2,“邻”[I1(1)I1(结束)],[12(1)12(端)])

重复计算,但现在约束的扭曲路径偏离最多三个元素从直线拟合。绘制拉伸信号和弯曲路径。

(直流、i1c i2c) = dtw (x1, x2, 3);次要情节(2,1,1)情节((x1 (i1c); x2 (i2c)”,'.-')标题(“距离:”num2str (dc)])次要情节(2,1,2)情节(i1c、i2c、“邻”[I1(1)I1(结束)],[12(1)12(端)])

约束来自集中了太多的样品的一小部分,在比对质量为代价阻止翘曲。重复与单样本约束的计算。

DTW(X1,X 2,1);

加载在取样的语音信号 F 小号 = 7 4 1 8 H ž 。该文件包含一个女声的录音说的一句话“MATLAB®。”

加载MTLB%听到,类型soundsc(MTLB,FS)

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

a1 = mtlb(圆(0.15 * Fs):圆形(0.25 * Fs));a2 = mtlb(圆(0.37 * Fs):圆形(0.45 * Fs));次要情节(2,1,1)情节((0:元素个数(a1) 1) / Fs + 0.15, a1)标题('A_1')副区(2,1,2)曲线图((0:numel(A2)-1)/Fs+0.37,a2)标题('a2')包含(“时间(秒)”

% To hear,输入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
副区(2,1,1)图(T,A1W)称号(“a_1,扭曲”)副区(2,1,2)情节(T,A2W)标题(,扭曲的)包含(“时间(秒)”

%听到,类型soundsc(A1W,FS),暂停(1),声音(A2W,FS)

用一个完整的单词重复这个实验。加载一个包含单词“strong”的文件,该单词由一名女性和一名男性使用。信号以8khz采样。

负载('strong.mat'%要听,类型soundsc(她,FS),暂停(2),soundsc(他,FS)

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

DTW(她,他,'绝对');传说(“她”'他'

并[d,iher,ihim] = DTW(她,他,'绝对');持续时间= numel(iher)/ FS
持续时间= 0.8394
%要听,类型soundsc(她(iher),FS),暂停(2),soundsc(他(ihim),FS)

文件MATLAB1.gifMATLAB2.gif包含单词两个手写样本“MATLAB®。”加载文件,并沿着它们对齐X- 轴采用动态时间规整。

SAMP1 =“MATLAB1.gif”;samp2 ='MATLAB2.gif';X =双(imread(SAMP1));Y =双(imread(SAMP2));DTW(X,Y);

输入参数

全部收缩

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

数据类型:|
复数支持:万博1manbetx是的

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

数据类型:|
复数支持:万博1manbetx是的

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

数据类型:|

距离度量指定为“欧几里德”'绝对'“平方”,或'symmkl'。如果Xÿķ维的信号,然后度规规定dXÿ),则之间的距离th的样本Xñth的样本ÿ。看到动态时间规整有关详细信息,dXÿ)。

  • “欧几里德”-差平方和的平方根,也称为欧几里德或2指标:

    d ñ X ÿ = ķ = 1 ķ X ķ ÿ ķ ñ * X ķ ÿ ķ ñ

  • '绝对'- 总和的绝对差异,也被称为曼哈顿,城市街区,出租车,或1指标:

    d ñ X ÿ = ķ = 1 ķ | X ķ ÿ ķ ñ | = ķ = 1 ķ X ķ ÿ ķ ñ * X ķ ÿ ķ ñ

  • “平方”-欧几里得度规的平方,由差的平方和组成:

    d ñ X ÿ = ķ = 1 ķ X ķ ÿ ķ ñ * X ķ ÿ ķ ñ

  • 'symmkl'- 对称的Kullback - 莱布勒度量。该指标只适用于真正的和积极有效Xÿ

    d ñ X ÿ = ķ = 1 ķ X ķ ÿ ķ ñ 日志 X ķ 日志 ÿ ķ ñ

输出参数

全部收缩

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

翘曲路径的第一信号,返回作为索引的矢量或矩阵。

翘曲路径的第二信号,返回作为索引的矢量或矩阵。

更多关于

全部收缩

动态时间规整

两个具有相同排列顺序的等效特征的信号,由于其段的持续时间不同,可能会出现很大的差异。动态时间扭曲扭曲了这些持续时间,使得对应的特征出现在公共时间轴的同一位置,从而突出了信号之间的相似性。

考虑两个ķ维信号

X = [ X 1 1 X 1 2 X 1 中号 X 2 1 X 2 2 X 2 中号 X ķ 1 X ķ 2 X ķ 中号 ]

ÿ = [ ÿ 1 1 ÿ 1 2 ÿ 1 ñ ÿ 2 1 ÿ 2 2 ÿ 2 ñ ÿ ķ 1 ÿ ķ 2 ÿ ķ ñ ]

其中有中号ñ样本,分别。鉴于dXÿ),则之间的距离th的样本Xñth的样本ÿ中指定的度规经销舒展Xÿ到一组通用的时刻,使得全局信号 - 信号距离度量最小。

最初,功能安排的所有可能的值dXÿ)变成了这种形式的晶格

然后经销长相对于路径通过晶格参数通过相同长度的两个序列,IY-such那

d = · ñ · IY d ñ X ÿ

最小。可接受经销路径开始d11Xÿ),在dXÿ),以及“国际象棋之王”棋步的组合:

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

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

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

这种结构确保了对齐到的完整的信号的任何可接受的路径,不跳过样本,并且不重复的信号特征。此外,所希望的路径运行关闭到对角线延伸之间d11Xÿ)和dXÿ)。这种额外的约束,通过调整maxsamp参数,确保了整经比较相似长度的段,不过拟合离群值的功能。

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

以下路径是不允许的:

不对齐整个信号 跳过样本 轮流回本身,重复功能

参考

[1] Paliwal,K. K.,阿南特阿加瓦尔和Sarvajit S.辛哈。“一个修改过Sakoe和千叶的动态时间规整算法的孤立词识别。”信号处理。卷。4,1982年,第329-333。

[2] Sakoe,宏明,和成美千叶。“动态规划算法优化的语音识别。”IEEE®声学,语音和信号处理的交易。卷。ASSP-26,第1号,1978年,第43-49。

扩展功能

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

介绍了在R2016a