⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtw.m

📁 基于DTW算法的孤立字识别系统。用Matlab编程实现语音信号的端点检测
💻 M
字号:
function dist=dtw(test,ref)
%dwt高效算法
global x y_min y_max
global t r
global D d
global m n

t=test;
r=ref;
n=size(t,1);
m=size(r,1);

d=zeros(m,1);
D=ones(m,1)*realmax;
D(1)=0;

%如果两个模板的长度相差过多,匹配失败
if (2*m-n<3)|(2*n-m<2)
    dist=realmax;
    return
end

%计算匹配区域
xa=round((2*m-n)/3);
xb=round((2*n-m)*2/3);

if xb>xa
% 1:xa
% xa+1:xb
% xb+1:N
for x=1:xa
    y_max=2*x;
    y_min=round(0.5*x);
    warp
end
for x=(xa+1):xb
    y_max=round(0.5*(x-n)+m);
    y_min=round(0.5*x);
    warp
end
for x=(xb+1):n
    y_max=round(0.5*(x-n)+m);
    y_min=round(2*(x-n)+m);
    warp
end
elseif xa>xb
% xa>xb,按下面的区域匹配
% 1:xb
% xb+1:xa
% xa+1:N

for x=1:xb
    y_max=2*x;
    y_min=round(0.5*x);
    warp
end
for x=(xb+1):xa
    y_max=2*x;
    y_min=round(2*(x-n)+m);
    warp
end
for x=(xa+1);n
    y_max=round(0.5*(x-n)+m);
    y_min=round(2*(x-n)+m);
    warp
end
elseif xa==xb
% xa=xb,按下面的区域匹配
% 0:xa
% xa+1:N
for x=1:xa
    y_max=2*x;
    y_min=round(0.5*x);
    warp
end
for x=(xa+1):n
    y_max=round(0.5*(x-n)+m);
    y_min=round(2*(x-n)+m);
    warp
end
end

%返回匹配函数
dist=D(m);

function warp
global x y_max y_min
global t r
global D d
global m n

d=D;
for y=y_min:y_max
    D1=D(y);
    if y>1
        D2=D(y-1);
    else
        D2=realmax;
    end
    if y>2
        D3=D(y-2);
    else
        D3=realmax;
    end
    d(y)=sum((t(x,:)-r(y,:)).^2)+min([D1,D2,D3]);
end

D=d;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -