用matlab仿真0到9十个数字的语音识别源码程序 - matlab通信信号 - 谷速源码
下载频道> 资源分类> matlab源码> 通信信号> 用matlab仿真0到9十个数字的语音识别源码程序

标题:用matlab仿真0到9十个数字的语音识别源码程序
分享到:

所属分类: 通信信号 资源类型:程序源码 文件大小: 112.18 KB 上传时间: 2019-06-16 15:21:34 下载次数: 363 资源积分:1分 提 供 者: zhangsan456 Speech-Recogenition
内容:
用matlab仿真0到9十个数字的语音识别 1、对语音的WAV文件和LAB文件进行处理,产生十个文件,每个文件对应于一个数字,存贮着该数字的波形文件。(shujuzhengli.m) 2、分别利用上面十个文件训练出十个HMM模板,具体方法是:首先将语音的波形文件分帧,以128个点为一帧,帧移为64,每一帧通过mfcc.m计算出13个系数,随着波形的长度不同,一个语音文件可以计算得到13*N个系数,截取13*15的矩阵(mfcc系数)用作训练数据。一般一个HMM模板用20组mfcc系数训练,得到初始状态分布、状态转移矩阵、高斯正态分布的均值和方差以及混合矩阵,这就是该语音的特征,存贮下来,识别的时候使用。(trainmfcc.m) 3、识别过程:识别的前面部分与训练相似,都是要计算得到mfcc系数,不同在于,识别时,将计算得到的mfcc 参数分别代入训练得到的HMM模板求出概率,比较出最大概率者,则该模板对应的数字就是识别的数字。(shibiesb.m) 4、用大量语音文件做测试,结果正确率为90 以上。-Speech Recogonition: Mumber 0-9
function trainmfcc(file)
% 对0到9十个数字训练出HMM模型参数
for biaoshi=1:10 
fid = fopen([file char(biaoshi+47) '.mat'],'r');%依次打开存储了0到9十个数字的语音文件
%定义一个临时的矩阵ku,用于存储20个相应数字的语音波形序列,序列长度不超过3000
ku=zeros(20,3000);
for i=1:20
   ku(i,:)=fread(fid,3000,'double');%ku(i,:)中,第一个数存贮了该序列的长度
end
fclose(fid);
%对20个语音波形文件,分别计算出其MFCC参数,MFCC参数为13维*帧长,帧语音波形的长短而不同,最后截取前13*15的部分,存入datacell中
for i=1:20
    input=ku(i,2:ku(i,1));
    [ceps,freqresp,fb,fbrecon,freqrecon] = mfcc(input, 8000, 160);
    datacell(:,:,i)=ceps(:,1:15);%datacell存贮格式为datacell(mfcc参数长度13,帧长15,序列个数20)
end    
  O = 13;         %Number of coefficients in a vector (mfcc参数长度)
  M = 1;          %Number of mixtures (混合高斯分布的数目)
  Q = 6;          %Number of states (状态数)
  cov_type = 'full';
% 连续HMM模型参数训练
prior0 = normalise(rand(Q,1));%随机生成初始状态
transmat0 = mk_stochastic(rand(Q,Q));%随机生成状态转移矩阵
  [mu0, Sigma0] = mixgauss_init(Q*M, datacell, cov_type);%生成高斯分布的均值和方差
  mu0 = reshape(mu0, [O Q M]);
  Sigma0 = reshape(Sigma0, [O O Q M]);
  mixmat0 = mk_stochastic(rand(Q,M));
%HMM模参数训练函数
[LL, prior1, transmat1, mu1, Sigma1, mixmat1] = mhmm_em(datacell, prior0, transmat0, mu0, Sigma0, mixmat0, 'max_iter', 5);
%将训练得到的相应数字的HMM参数prior1, transmat1, mu1, Sigma1, mixmat1分别存入到shuzi0,shuzi1.....shuzi9,文件中
fid = fopen(['d:\shuzi' char(biaoshi+47) '.mat'],'wb');
fwrite(fid,prior1,'double');
fwrite(fid,transmat1,'double');
fwrite(fid,mu1,'double');
fwrite(fid,Sigma1,'double');
fwrite(fid,mixmat1,'double');
fclose(fid);
end

关键词: 十个数字 语音识别 源码程序

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved