www.pudn.com > SpeechTestDTW.rar > dtw.m
% testS=[ 1,2,2;
% 3,5,6;
% 1,2,3;
% 1,2,3;
% 4,5,6;
% 1,2,3]';
% refS=[ 1,2,2;
% 3,5,6;
% 1,2,3;
% 1,2,3;
% 1,2,3;
% 1,2,3;
% 1,2,3;
% 4,5,6;
% 4,5,6;
% 1,2,3]';
function dist=dtw(testS,refS)
%test是测试语音信号n帧,ref是模板语音信号m帧,每帧信息表示为倒谱
%ref=[1,2,3,4,5,6];
n=size(testS,2);
m=size(refS,2);
if n>=m
test=testS;
ref=refS;
else
test=refS;
ref=testS;
end;
n=size(test,2);
m=size(ref,2);
%if n>=m
%帧距离匹配矩阵
d=ones(n,m);
for i=1:n
for j=1:m
d(i,j)=sum((test(:,i)-ref(:,j)).^2);
end
end
D=ones(n,m)*realmax;
D(1,1)=d(1,1);
%动态规划
for i=2:n
j1=max(1,2*i-2*n+m);
j2=min(m,2*i-1);
for j=j1:j2
D1=D(i-1,j);
if(j>1)
D2=D(i-1,j-1);
else
D2=realmax;
end
if(j>2)
D3=D(i-1,j-2);
else
D3=realmax;
end
D(i,j)=d(i,j)+min([D1 D2 D3]);
end
end
dist=D(n,m);
% D
% else
% %帧距离匹配矩阵
% d=ones(m,n);
%
% for i=1:m
% for j=1:n
% d(i,j)=sum((ref(:,i)-test(:,j)).^2);
% end
% end
%
% D=ones(m,n)*realmax;
% D(1,1)=d(1,1);
%
% %动态规划
% for i=2:m
% for j=1:n
% D1=D(i-1,j);
% if(j>1)
% D2=D(i-1,j-1);
% else
% D2=realmax;
% end
% if(j>2)
% D3=D(i-1,j-2);
% else
% D3=realmax;
% end
% tempD=min([D1,D2,D3]);
% D(i,j)=d(i,j)+tempD;
% end
% end
% dist=D(m,n);
% end