📄 enddect.m
字号:
%%%语音信号的端点检测过程,采用单一门限解决
function yendpoint=enddect(y)
a=0.95;
y1=filter([1 -a],1,y);
len=256;inc=100;
yframe=enframe(y1,len,inc);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
w=hamming(len);
N=size(yframe,1);
w1=ones(N,1)*w';
yw=yframe.*w1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 对信号进行的预处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 分帧加窗信号有问题
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p=zeros(1,N);
t=0;
for k=1:N
amp1=0;
for n=1:len
amp1=amp1+sum(yw(k,n).*yw(k,n),2);
end
t=t+1;
p(t)=amp1; % 短时幅度
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 短时幅度
z=zeros(1,N);
m=0;
for k=1:N
zer=0;
for n=1:len-1
if (yw(k,n).*yw(k,n+1)<0) & (abs(yw(k,n)-yw(k,n+1))>0.02)
zer=zer+1;
end
end
m=m+1;
z(m)=zer; %短时过零率
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 短时过零率
t=1:N;
EZn(t)=p(t).*z(t); %短时能零积
EZ=max(EZn(t)).*0.01; %平均短时能零积 %%平均短时能零积的确定有待改进
d=1.0; %经验值 %% d值的确定有待改进
NH=d.*EZ; %门限值
for t=1:N;
if (EZn(t)> NH)
y(t)=1;
else
y(t)=0;
end
end
t=1:N;
n=0;
for t=1:N
while y(t)>0
n=n+1;
ys(n)=t;
break,
end
end
ys1=ys(1);
ysend=ys(end);
yendpoint=yw(ys1:ysend,:);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -