马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我用谱熵的方法进行端点检测,但是感觉判别门限设定的不对,该怎么设置呢,请各位高手帮忙
附上端点检测部分的程序,请大家指点,不胜感激
%T1=0.1;
%T2=0.08;
maxsilence=2;
minlen=10;
%T1 = min(T1, max(H)/2);
%T2 = min(T2, max(H)/4);
T1 = [max(H)-min(H)]/2;
T2 = max(H)/4;
status=0;
count=0;
silence=0;
%开始端点检测
x1 = 0;
x2 = 0;
xn=1;
for n=1:length(H) %xn记录连续语音中字的段数(几个字)
switch status
case {0,1} % 0 = 静音, 1 = 可能开始
if H(n) > T1 % 确信进入语音段
x1(xn) = max(n-count(xn)-1,1);
status = 2;
%silence(xn) = 0;
count(xn) = count(xn) + 1;
elseif H(n) > T2 % 可能处于语音段
status = 1;
count(xn) = count(xn) + 1;
else % 静音状态
status = 0;
count(xn)= 0;
silence(xn)=0;
x1(xn)=0;
x2(xn)=0;
end
case 2, % 2 = 语音段
if H(n) > T2 % 保持在语音段
count(xn) = count(xn) + 1;
else % 语音将结束
silence(xn) = silence(xn) +1;
if silence(xn) < maxsilence % 静音还不够长,尚未结束
count(xn) = count(xn) + 1;
elseif count(xn) < minlen % 语音长度太短,认为是噪声
status = 0;
silence(xn) = 0;
else % 语音结束
status = 3;
end
end
case 3,
status = 0;
xn=xn+1;
count(xn)= 0;
silence(xn)=0;
x1(xn)=0;
x2(xn)=0;
end
end |