?? 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 + -