⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 divideword1.m

📁 实现用MFCC作为特证向量的孤立词识别系统
💻 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 + -