gusucode.com > 用matlab仿真0到9十个数字的语音识别源码程序 > Speech-Recogenition/shibiesb.m
function [num sbjg]=shibiesb(file) %识别原始的语音文件 %filename='D:\work\语音\1107\语音文件\t222'; filename=file; [qs,zz,num]=readlab([filename '.lab']); [d,fp,dt,tc,t]=readhtk([filename '.wav']); pd=zeros(4,3000);%定义一个临时的矩阵pd,用于存储4个语音波形序列,序列长度不超过3000 %通过.lab和.wav文件将语音文件中的声音信号读入pd中 for i=1:4 qs1(i)=round(qs(i)/fp/10000000); zz1(i)=round(zz(i)/fp/10000000); cb(i)=zz1(i)-qs1(i)+1; pd(i,1)=cb(i); for j1=qs1(i):zz1(i) pd(i,j1-qs1(i)+2)=d(j1); end end %分别对4个数字进行识别 for sb=1:4 [ceps,freqresp,fb,fbrecon,freqrecon] = mfcc(pd(sb,2:pd(sb,1)), 8000, 160); %计算每个数字的mfcc参数 [a1 a2]=size(ceps); if (a2>14) datacell(:,:,sb)=ceps(:,1:15);%截取前13*15部分 %读取0到9十个数字的HMM特征参数,并计算概率 for i=1:10 fid = fopen(['d:\shuzi' char(i+47) '.mat'],'r'); prior=fread(fid,6,'double'); prior=reshape(prior,6,1); transmat=fread(fid,36,'double'); transmat=reshape(transmat,6,6); mu=fread(fid,78,'double'); mu=reshape(mu,13,6); Sigma=fread(fid,1014,'double'); Sigma=reshape(Sigma,13,13,6); mixmat=fread(fid,6,'double'); mixmat=reshape(mixmat,6,1); fclose(fid); loglik(i) = mhmm_logprob(datacell(:,:,sb), prior, transmat, mu, Sigma, mixmat);%计算概率 end %比较概率的大小,求出概率最大者 jieguo=loglik(1); jg=1; for i=1:10 if loglik(i)>jieguo jieguo=loglik(i); jg=i; end end sbjg(sb)=jg-1; else sbjg(sb)=-1; end end