本帖最后由 sleep168 于 2017-4-4 09:59 编辑
老师,谢谢你的解答!我使用的是书中的bluesky1.wav语音,我还是不太理解SF1和SF2的作用,以及最后一句话[这样SF1和SF2就等长............调用findSegment函数来得到。]我前面按照您的方法改好了,绘图采用了一个比较笨的方法,提取端点中的大值作为新的端点,提取结束点中的小值作为新的结束点进行绘图,但是在识别效果出现了误差。
请问老师解释一下如何准确定位
具体代码如下:
[
subplot 515; plot(time,x,'k');
title('优化后的语音端点识别结果');
xlabel('时间/s'); ylabel('幅值');
vsl3=min(vsl1,vsl2);
vsl4=max(vsl1,vsl2)
for k=1 : min(vsl1,vsl3) % 标出语音端点
nx1=voiceseg1(k).begin;
nx2=voiceseg1(k).end;
nx3=voiceseg2(k).begin;
nx4=voiceseg2(k).end;
nx5=max(nx1,nx3);
nx6=min(nx2,nx4);
fprintf('%4d %4d %4d\n',k,nx1,nx2);
fprintf('%4d %4d %4d\n',k,nx3,nx4);
subplot 515;
line([frameTime(nx5) frameTime(nx5)],[-1 1],'color','k','LineStyle','-');
line([frameTime(nx6) frameTime(nx6)],[-1 1],'color','r','LineStyle','--');
end
for k=(vsl3+1:vsl4) % 标出语音端点
if vsl1>vsl2
fprintf('%4d %4d %4d\n',k,nx1,nx2);
subplot 515;
line([frameTime(nx1) frameTime(nx1)],[-1 1],'color','k','LineStyle','-');
line([frameTime(nx2) frameTime(nx2)],[-1 1],'color','r','LineStyle','--');
end
if vsl1
fprintf('%4d %4d %4d\n',k,nx3,nx4);
subplot 515;
line([frameTime(nx3) frameTime(nx3)],[-1 1],'color','k','LineStyle','-');
line([frameTime(nx4) frameTime(nx4)],[-1 1],'color','r','LineStyle','--');
end
end
]
C:\Users\Bing\Desktop\untitled
untitled.jpg
(214.63 KB, 下载次数: 12)
2017-4-4 09:47 上传
初步结果