ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:19.46KB ,
资源ID:3364783      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3364783.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用HMM的孤立字词语音识别系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用HMM的孤立字词语音识别系统.docx

1、利用HMM的孤立字词语音识别系统利用HMM的孤立字(词)语音识别系统 /* */* 文件名称:recog.cpp(主程序) */*/# include emhmm. hint BR_ DispMAX_ ARCS; /* Displayment to save multiplies (branch_ prob) * /int ME_ DispMAX_ ARCS; /* Displayment to save mnltiplies (mean) * /int CO_DispMAX_ ARCS; /* Displayment to save multiplies (covariance) * /in

2、t Train _ Disp MAX _ ARCS + MAX _ STATES; / * really only need max(ma,ms) * /im Num _ Dimensions;int Num_ Train_ Sets; /* Size of dimension of training data */int Total _ Frames;int Longest _ Train; /* the length of the longest training set */TRAINING TrainMAX-_ TRAIN_ SIZE;HMM Hmm MAX_ REF;main(arg

3、c,argv)int argc;char * argv; int i, num_ ref, result; int cntMAX _ REF; string hmm_ file; char * in file =NULL, *ref_list = NULL; char ch_ rMAX_REF8; FILE * fp; /*命令行参数设置*/if( argc 5 ) usage(argv 0 );for(i = 1; i argc; i+ + ) if(argvi0 ! = -) fprinff(stderr, Illegal switch %s n, argvi); usage(amv0 )

4、;switch (argvi) 1);case h: ref_ list = argv+ + i; break;case i: in_ file = argv+ + i; break;default: fprimf(stderr, Illegal switch %s n,argvi); usage(argv0); break; /*读取参考模型的数量,即词表的大小*/ if(fp = fopen(ref_ list, r) = = NULL) fprinff(stderr, %s: cant open %s to read. n, ref_list); exit(0);fscanf( fp,

5、%d, &num_ref);/*读取模型的参数*/ for(i = 0; i MAX_TRAIN_ SIZE) fprintf(stderr, %s: too many test patterns in %s. n, argv0, in_ file);exit(0);/*识别*/for(i = 0;i Num_Train_Sets; +i) result = dp(Train + i, num ref); + + cntresult; # if TRACE printf(%3d %3d: %s n, i + 1,Traini.length,ch_rresult); fflush (stdout

6、); # endif free(Train i. data);printf(# # # 识别结果# # #);for(i = 0;i num_ref;i + +) printf(# # # /%4s/ = %6.2f % n, ch_ri, cnti * 100.0/Num_Train_Sets);/*/* 函数名称:usage/*函数功能:提示信息,并退出程序 */* 输入函数:obj- 指向提示信息的指针 */*/usage(obj)char * obj; fprintf(stderr,Useage: %s -h HMM-list -i input-file n,obj); exit(0)

7、; 文件名称:(CMHMM的输入输出函数) #include cmhmm.h#include extern int BR_Disp,ME_Disp,CO_Disp,Train_Disp;extern int Total_Frames;extern int Num_Dimensions,Longest_Train;extern TRAINING Train;extern HMM Hmm;void read_hmm(char *file,int rnum) FILE *fp; int temp,i,j,k,num,mat_num,from,to,bdisp,mdisp,cdisp; float t

8、rans_prob; if(fp=fopen(file,r)=NULL) exit(0); if(fscanf(fp,%d,&Num_Dimensions)=EOF) exit(0); if(fscanf(fp,%d,&temp)=EOF) exit(0); Hmmrnum.num_omatrix=temp; if(fscanf(fp,%d,&temp)=EOF) exit(0); Hmmrnum.num_mixture=temp; for(i=0;iHmmrnum.num_omatrix;+i) temp=i*Hmmrnum.num_mixture; BR_Dispi=temp; temp*

9、=Num_Dimensions; ME_Dispi=temp; temp*=Num_Dimensions; CO_Dispi=temp; temp=FLOATSIZE*Hmmrnum.num_omatrix*Hmmrnum.num_mixture; if(Hmmrnum.branch_prob=(float *)malloc(temp)=NULL) exit(0); temp*=Num_Dimensions; if(Hmmrnum.mean=(float *)malloc(temp)=NULL) exit(0); temp*=Num_Dimensions; if(Hmmrnum.covaria

10、nce=(float *)malloc(temp)=NULL) exit(0); for(i=0;iHmmrnum.num_omatrix;i+) bdisp=BR_Dispi; for(j=0;jHmmrnum.num_mixture;j+) if(fscanf(fp,%f,Hmmrnum.branch_prob+bdisp+j)=EOF) exit(0); for(temp=0,j=0;jHmmrnum.num_mixture;+j,temp+=Num_Dimensions) mdisp=ME_Dispi+temp; cdisp=CO_Dispi+temp*Num_Dimensions;

11、for(k=0;kNum_Dimensions;k+) if(fscanf(fp,%f,Hmmrnum.mean+mdisp+k)=EOF) exit(0); for(k=0;kNum_Dimensions*Num_Dimensions;k+) if(fscanf(fp,%f,Hmmrnum.covariance+cdisp+k)=EOF) exit(0); if(fscanf(fp,%d,&temp)=EOF)exit(0); Hmmrnum.num_states=temp; if(Hmmrnum.states=(STATE *)malloc(sizeof(STATE)*Hmmrnum.nu

12、m_states)=NULL)exit(0); for(i=0;iHmmrnum.num_states;i+) Hmmrnum.statesi.label=i; Hmmrnum.statesi.num_from=Hmmrnum.statesi.num_to=0; Hmmrnum.statesi.is_initial=Hmmrnum.statesi.is_final=FALSE; if(fscanf(fp,%d,&temp)=EOF)exit(0); Hmmrnum.num_initial=temp; for(i=0;iHmmrnum.num_initial;i+) if(fscanf(fp,%

13、d,&num)=EOF)exit(0); Hmmrnum.statesnum.is_initial=TRUE; if(fscanf(fp,%d,&temp)=EOF)exit(0); Hmmrnum.num_final=temp; for(i=0;iHmmrnum.num_final;i+) if(fscanf(fp,%d,&num)=EOF)exit(0); Hmmrnum.statesnum.is_final=TRUE; if(fscanf(fp,%d,&temp)=EOF)exit(0); Hmmrnum.num_arcs=temp; if(Hmmrnum.transitions=(TR

14、ANSITION*)malloc(sizeof(TRANSITION)* Hmmrnum.num_arcs)=NULL)exit(0); for(i=0;i=Hmmrnum.num_omatrix)|(mat_numHmmrnum.num_states-1)|(fromHmmrnum.num_states-1)|(to0) fprintf(stderr,read_hmm:Illegal from(%d)-to(%d)n,from,to); exit(0); if(trans_prob100)exit(0); if(fs=fopen(f_list,r)=NULL) fprintf(stderr,

15、red_data:cant open %s to readn,f_list); exit(0); for(cnt=0;fscanf(fs,%s,f_name)!=EOF;+cnt) if(cnt=MAX_TRAIN_SIZE) printf(Warning in read_data:number of data sets(%s) is forced into %d.n,f_list, MAX_TRAIN_SIZE); fflush(stdout); break; if(fp=fopen(f_name,rb)=NULL)exit(0); for(length=0;(m=fread(buff,FL

16、OATSIZE,(Num_Dimensions+1),fp)=(Num_Dimensions+1);+length); if(Traincnt.data=(float *)malloc(FLOATSIZE * Num_Dimensions*length)=NULL) fprintf(stderr,read_data:not enough space for %sn,f_list); exit(EOF); rewind(fp); for(i=j=0;(m=fread(buff,FLOATSIZE,(Num_Dimensions+1),fp)=(Num_Dimensions+1);+i) for(

17、k=1;kmax)max=length; fclose(fs); Total_Frames=total_length; Longest_Train=max; for(i=j=0;jlength;data = train - data;/* memory allocation for work */if(pn = (double * )malloc(Longest_Train * MAX_STATES * DOUBLEESIZE) = NULL) exit(0);if(outprob_buff = (double * )malloc(Longest_Train) * MAX_ARCS * DOU

18、BLESIZE) = NULL) exit(0);for(s = i = 0;s MAX_STATES; i + = Longest_Train) Outprob_Disps + + = i;for(n = 0;n num_ref; n+) /* step1 */ s = MAX_STATES * Longest_Train;for(i = 0;is;i+) pni=INFINT; /* clear pn */for(s = 0;sHummn.num_omatrix; + + s) if(Hmmn.statess.is_initial) pnTrain_Disps =0.0;for(i = 0

19、;iMAX_ARCA * Longest_Train;outprob_buffi + + = INFINIT);for(s = 0;sHummn.num_omatrix;s + +) for(i = 0;i length; i + +) sum_prob = 0.0; for(j = 0;j Hummn.num_mixture; j + +) branch_prob = Hummn.branch_probBR_disps + j; if(branch_prob = = 0.0) continue; sum_prob + = pow(branch_prob,5.0) * cal_outprob

20、(&(Hummn),n,s,i,j); outprob_buffOutprob_Disps + i = log(sum_prob); for(i = 0;i length; i + +) /* step2 */ for(s = 0;s Hummn.num_states; s + +) /* step3 */ index = Train_Disps + i; stop = &(Hummn.statess.trans_toHummn.statess.num_to); for(cptr = &(Hummn.statess.trans_to0);cptr out_prob_index = = NULL_TRANSITION) prev_pn = pn + (Train_Disptptr - origin + i); if( * prev_pn INFINIT) px =

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1