function [x1,x2,Voiceframe]=frameDetect(Y,FS)
%归一化幅度至【-1,1】
Y=double(Y);
Y=Y-mean(Y);
Y=Y/max(abs(Y));
%帧长10ms 帧内交织5ms
FrameLength=round(FS*20/1000);
% FrameLength=240;
FrameInc=round(FS*10/1000);
% FrameInc=80;
% Amp1=50;
% Amp2=10;
Zcr1=10;
Zcr2=5;
Delta =0.01;%过零率监测域值
MaxSilence=3; % 30ms
MinLength=15; % 150ms
Status=0; % 0静音,1开始,2语音段,3结束
Count=0;
Silence=0;
%计算过零率
frametemp=enframe(Y,FrameLength,FrameInc);
tmp1=enframe(Y(1:length(Y)-1),FrameLength,FrameInc);
tmp2=enframe(Y(2:length(Y)),FrameLength,FrameInc);
signs=(tmp1.*tmp2)<0;
diffs=abs((tmp1-tmp2))>Delta;
zcr=sum(signs.*diffs,2);
%计算短时能量
%滤波
filter_Y=filter([1 -0.9375],1,Y);
%分帧
%短时能量
frame=enframe(filter_Y,FrameLength,FrameInc);
%三种能量
amp1=sum(abs(frame),2);
amp2=sum(frame.*frame,2);
amp3=sum(log(frame.*frame+eps),2);
amp=amp1; %采用第1种幅度检测
%amp=amp-min(amp);
%调整幅度门限
Max=max(amp);
Min=min(amp);
B=(Max-Min)/Max;%比例因子调整域值
factor=1.0;
%Amp1=Min+(Max-Min)/3;
%Amp2=Min+(Max-Min)/60;
Amp1=Min+B.^factor*(Max-Min)/3;
Amp2=Min+B.^factor*(Max-Min)/60;
%开始端点检测
x1=0;
x2=0;
Count=0;
Silence=0;
for n = 1:length(zcr)
switch Status
case {0,1}
if amp(n) > Amp1
x1=max(n-Count-1,1);
Status =2;
Silence=0;
Count=Count+1;
elseif amp(n)> Amp2 | zcr(n) > Zcr2
Status =1;
Count=Count+1;
else
Status =0;
Count =0;
end
case 2,
if amp(n)> Amp2 | zcr(n) > Zcr2
Count=Count+1;
else
Silence=Silence+1;
if Silence< MaxSilence
Count=Count+1;
elseif Count< MinLength
Status=0;
Silence=0;
Count=0;
else
Status=3;
end
end
case 3
break;
end
end
Count=Count-Silence;
x2=x1+Count-1;
Voiceframe=frametemp(x1:x2,:);
% x2=x2-mod(x2,1);
figure(1)
subplot(3,1,1);
plot(Y);
axis([1 length(Y) -1 1]);
ylabel('Speach');
line([x1*FrameInc x1*FrameInc],[-1 1],'Color','red');
line([x2*FrameInc x2*FrameInc],[-1 1],'Color','red');
subplot(3,1,2);
plot(amp);
axis([1 length(amp) 0 max(amp)]);
ylabel('Energy');
line([x1 x1],[0 max(amp)],'Color','red');
line([x2 x2],[0 max(amp)],'Color','red');
subplot(3,1,3);
plot(zcr);
axis([1 length(zcr) 0 max(zcr)]);
ylabel('ZCR');
line([x1 x1],[0 max(zcr)],'Color','red');
line([x2 x2],[0 max(zcr)],'Color','red');
% disp('[x1,x2,Amp1,Amp2,mean(amp(1:x1)),mean(amp)]');
%[x1,x2,Amp1,Amp2,mean(amp(1:x1)),mean(amp)]
没有合适的资源?快使用搜索试试~ 我知道了~
matlab程序使用动态时间规整语音识别.zip
共27个文件
mat:10个
wav:10个
m:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 31 浏览量
2023-12-27
16:00:58
上传
评论
收藏 112KB ZIP 举报
温馨提示
matlab程序使用动态时间规整语音识别.zip
资源推荐
资源详情
资源评论
收起资源包目录
matlab程序使用动态时间规整语音识别.zip (27个子文件)
Y-123
3960471
FrameDetect.m 3KB
ModelCalc.m 829B
Durbin.m 564B
ModelRecord.m 170B
dtw.m 940B
新建文件夹
recogTest.m 1KB
model
H4.mat 7KB
H7.mat 5KB
H3.mat 7KB
H0.mat 6KB
H9.mat 6KB
H8.mat 3KB
H1.mat 5KB
H6.mat 4KB
H5.mat 5KB
H2.mat 4KB
test
H0.wav 43KB
H4.wav 43KB
H8.wav 43KB
H6.wav 43KB
H1.wav 43KB
H5.wav 43KB
H2.wav 43KB
H9.wav 43KB
H7.wav 43KB
H3.wav 43KB
ENFRAME.M 377B
G
共 27 条
- 1
资源评论
m0_74456535
- 粉丝: 89
- 资源: 704
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功