📄 divideword1.m
字号:
function postion=DivideWord1(x,fs)
if(length(x)<31007) wordnumber=2;else wordnumber=3;end
winSizeMs=20;
winShiftMs=20;
x=x/max(x);
winSize=millitosamples(winSizeMs,fs);
winShift=millitosamples(winShiftMs,fs);
tmp1 = enframe(x(1:end-1), winSize, winShift);
tmp2 = enframe(x(2:end) , winSize, winShift);
signs = (tmp1.*tmp2)<0;
diffs = (abs(tmp1 -tmp2))>0.02;
zc= sum(signs.*diffs, 2);
x_power=x.^2;
matix=enframe(x_power, winSize, winShift);
energy=sum(matix');
LowPower=(energy)<7;
LowZeroC=(zc)<1;
Power=zeros(1,length(energy));
ZeroC=zeros(1,length(energy));
LENGTH=0;
LENGTh=0;
IsWord=false;isword=false;
%
for i=1:length(energy)
if(LowPower(i)==1)
LENGTH=LENGTH+1;
Power(i)=-1;
IsWord=true;
end
if(LowZeroC(i)==1)
LENGTh=LENGTh+1;
ZeroC(i)=-1;
isword=true;
end
if(LowPower(i)==0&IsWord==true)
IsWord=false;
Power(find(Power==-1))=LENGTH;
LENGTH=0;
end
if(LowZeroC(i)==0&isword==true)
isword=false;
ZeroC(find(ZeroC==-1))=LENGTh;
LENGTh=0;
end
end
%----------------------------------------------------
%如果第一个字有清音的话,销掉第一个字的清音
p=find(Power>0);
if(min(p)<10)
l=min(p);
for i=0:Power(l)-1
Power(l+i)=0;
end
end
%------------------------------------------------------
%给每个候选区间打上标记
for i=1:wordnumber-1
Power(find(Power==max(Power)))=-1*max(Power);
ZeroC(find(ZeroC==max(ZeroC)))=-1*max(ZeroC);
end
Power(find(Power>0))=0;Power=Power*-1;
ZeroC(find(ZeroC>0))=0;ZeroC=ZeroC*-1;
numberE=1;numberZ=1;
for i=1:length(energy)-1
if(Power(i)>0)
Power(i)=numberE;
end
if(ZeroC(i)>0)
ZeroC(i)=numberZ;
end
if(Power(i)>0&Power(i+1)==0)
numberE=numberE+1;
end
if(ZeroC(i)>0&ZeroC(i+1)==0)
numberZ=numberZ+1;
end
end
%-------------------------------------------------------
out=[];
for i=1:wordnumber-1
a=find(Power==i);
b=find(ZeroC==i);
if((max(a)-min(b))*(min(a)-max(b))<=0)
temp=[max(min(a),min(b)) min(max(a),max(b))];
else
if(max(a)<min(b))
temp=[max(a) max(a)];
% temp=[floor((max(a)+min(b))*.5) floor((max(a)+min(b))*.5)];
else
% temp=[floor((max(b)+min(a))*.5) floor((max(b)+min(a))*.5)];
temp=[min(a) min(a)];
end
end
out=[out temp];
end
postion=out*winShift;
postion=[1 postion length(x)];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -