dtw
使用动态时间翘曲的信号之间的距离
描述
例子
啁啾和正弦波的动态时间翘曲
产生两个实信号:一个啁啾信号和一个正弦信号。
X = cos(2* *(3*(1:1000)/1000).^2);Y = cos(2* *9*(1:399)/400);
使用动态时间翘曲对齐信号,使它们之间的欧几里得距离的和最小。显示对齐信号和距离。
dtw (x, y);
将正弦波频率改为其初始值的两倍。重复计算。
Y = cos(2* *18*(1:39 99)/400);dtw (x, y);
给每个信号加一个虚部。恢复初始正弦频率。使用动态时间翘曲通过最小化欧几里得距离的平方和来对齐信号。
X = exp(2i*pi*(3*(1:1000)/1000).^2);Y = exp(2i*pi*9*(1:399)/400);dtw (x, y,“方”);
对齐写作样本
设计一个类似于早期计算机输出的字体。用它来写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 (“腐败”)结束
再生成两个损坏的单词版本。使用动态时间翘曲对齐它们。
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”)
的内置功能重复计算dtw
.
dtw(1、2);
约束弯曲路径
生成两个由不同长度的谷分隔的两个不同的峰组成的信号。把信号画出来。
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)
在不限制扭曲路径的情况下对齐信号。为了产生完美的对齐,该函数只需要重复较短信号的一个样本。
图dtw (x1, x2);
画出弯曲路径和两个信号之间的直线拟合。为了实现对齐,该函数将峰值之间的槽慷慨地扩展。
[d,i1,i2] = dtw(x1,x2);图绘制(i1、i2“啊——”,[i1(1) i1(end)],[i2(1) i2(end)])
重复计算,但现在将扭曲路径限制为与直线拟合最多偏差三个元素。画出拉伸信号和弯曲路径。
[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)])
这种约束可以防止翘曲过多地集中在一小部分样本上,从而牺牲对齐质量。用一个样本约束重复计算。
dtw (x1, x2, 1);
语音信号的动态时间扭曲
加载采样的语音信号 .该文件包含一段女性声音的录音,说的是“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₂”)包含(的时间(秒))
输入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),扭曲的)包含(的时间(秒))
要收听,输入soundsc(a1w,Fs), pause(1), sound(a2w,Fs)
用一个完整的单词重复这个实验。加载一个包含“坚强”这个词的文件,由一个女人和一个男人说。信号以8千赫采样。
负载(“strong.mat”)输入soundsc(her,fs), pause(2), soundsc(he,fs)
扭曲时间轴,使信号之间的绝对距离最小化。画出原始信号和变换后的信号。计算它们共享的扭曲“持续时间”。
dtw(她,他,“绝对”);传奇(“她”,“他”)
[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);
输入参数
x
- - - - - -输入信号
向量|矩阵
输入信号,指定为实数或复数向量或矩阵。
数据类型:单
|双
复数支持:金宝app是的
y
- - - - - -输入信号
向量|矩阵
输入信号,指定为实数或复数向量或矩阵。
数据类型:单
|双
复数支持:金宝app是的
maxsamp
- - - - - -调节窗口宽度
正
(默认)|正整数
调整窗口的宽度,指定为正整数。
数据类型:单
|双
度规
- - - - - -距离度量
“欧几里得”
(默认)|“绝对”
|“方”
|“symmkl”
距离度量,指定为“欧几里得”
,“绝对”
,“方”
,或“symmkl”
.如果X而且Y都是K那么是-维信号度规
规定d锰(X,Y的距离米样品X和n样品Y.看到动态时间翘曲欲了解更多有关d锰(X,Y).
“欧几里得”
-差分平方和的平方根,也称为欧几里得或ℓ2度量:“绝对”
-绝对差和,又称曼哈顿、市区街区、出租车或ℓ1度量:“方”
欧几里得度规的平方,由差的平方和组成:“symmkl”
-对称Kullback-Leibler度量。这个指标只对实数和正数有效X而且Y:
输出参数
经销
-最小距离
正实标量
信号之间的最小距离,作为正实标量返回。
9
-第一个信号的弯曲路径
指标向量|指标矩阵
第一个信号的弯曲路径,作为一个矢量或指数矩阵返回。
iy
-第二个信号的弯曲路径
指标向量|指标矩阵
第二个信号的弯曲路径,作为一个矢量或指数矩阵返回。
更多关于
动态时间翘曲
两个具有相同特征的信号以相同的顺序排列,由于其部分持续时间的差异,可能会出现非常不同的情况。动态时间扭曲了这些持续时间,因此相应的特征出现在公共时间轴上的相同位置,从而突出了信号之间的相似性。
考虑这两者K维信号
而且
哪有米而且N样本,分别。鉴于d锰(X,Y的距离米样品X和n样品Y中指定的度规
,经销
延伸X而且Y到一个公共的瞬间集上,使得全局信号到信号距离测量值最小。
最初,该函数排列所有可能的值d锰(X,Y)形成晶格状
然后经销
在由两个相同长度的序列参数化的晶格中寻找路径,9
而且iy
比如,
是最低的。可接受的经销
路径从d11(X,Y),结束地址为d锰(X,Y),以及“棋王”的组合:
垂直移动:(米,n)→(米+ 1,n)
水平移动:(米,n)→(米,n+ 1)
对角线移动:(米,n)→(米+ 1,n+ 1)
这种结构确保了任何可接受的路径对齐完整的信号,不会跳过样本,也不会重复信号特征。此外,一个理想的路径运行接近对角线之间延伸d11(X,Y),d锰(X,Y).这个额外的约束,由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++代码。
版本历史
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。