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

📄 mllr.c

📁 CMU大名鼎鼎的SPHINX-3大词汇量连续语音识别系统
💻 C
字号:
/* ==================================================================== * Copyright (c) 1995-2004 Carnegie Mellon University.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * This work was supported in part by funding from the Defense Advanced  * Research Projects Agency and the National Science Foundation of the  * United States of America, and the CMU Sphinx Speech Consortium. * * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ==================================================================== * *//* * mllr.c -- Application of MLLR regression matrices to codebook means *  * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1996 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** *  * HISTORY *  * 24-Jul-04    ARCHAN (archan@cs.cmu.edu) at Carnegie Mellon University *              First checked in from sphinx 3.0 to sphinx 3.5 *  * 02-Dec-96	M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * 		Added reading of MLLR classes in transformation file.  Currently must * 		be 1. *  * 26-Sep-96	M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * 		Started (copied from Vipul Parikh's implementation). */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include "mllr.h"void mllr_dump(float32 **A, float32 *B,int32 veclen){  int32 i,j;  char* tmpstr;  assert(A!=NULL);  assert(B!=NULL);  tmpstr=ckd_calloc((veclen * 20),sizeof(char));  for(i=0;i<veclen;i++){    sprintf(tmpstr,"A %d ",i);    for(j=0;j<veclen;j++){      sprintf(tmpstr,"%s %f ",tmpstr, A[i][j]);    }    sprintf(tmpstr,"%s\n",tmpstr);    E_INFO("%s\n",tmpstr);  }    sprintf(tmpstr,"B\n");  for(i=0;i<veclen;i++){    sprintf(tmpstr,"%s %f ",tmpstr, B[i]);  }  sprintf(tmpstr,"%s \n",tmpstr);  E_INFO("%s\n",tmpstr);  ckd_free(tmpstr);}int32 mllr_read_regmat (const char *regmatfile,			float32 ***A,			float32 **B,			int32 ceplen			){    int32 j, k, n;    FILE  *fp;    float32 **lA, *lB;    if ((fp = fopen(regmatfile, "r")) == NULL) {	E_ERROR ("fopen(%s,r) failed\n", regmatfile);	return -1;    } else	E_INFO ("Reading MLLR transformation file %s\n", regmatfile);    lA = (float32 **) ckd_calloc_2d (ceplen, ceplen, sizeof(float32));        lB = (float32 *) ckd_calloc (ceplen, sizeof (float32 ));    /* Read #MLLR-classes; must be 1 for now (rkm@cs.cmu.edu, 12-Dec-1996) */    if ((fscanf (fp, "%d", &n) != 1) || (n != 1))	goto readerror;    /* The number of stream must be 1 for now (archan@cs.cmu.edu 24-Jul-2004) */    if ((fscanf (fp, "%d", &n) != 1) || (n != 1))	goto readerror;        if ((fscanf(fp, "%d", &n) != 1) || (ceplen != n))      goto readerror;        for (j = 0; j < ceplen; j++) {      for (k = 0; k < ceplen; ++k) {	if (fscanf(fp, "%f ", &lA[j][k]) != 1)	  goto readerror;      }    }    for (j = 0; j < ceplen; j++) {      if (fscanf(fp, "%f ", &lB[j]) != 1)	goto readerror;    }    *A = lA;    *B = lB;    fclose(fp);    return 0;readerror:    E_ERROR("Error reading MLLR file %s\n", regmatfile);    ckd_free_2d ((void **)lA);    ckd_free (lB);    fclose (fp);        *A = NULL;    *B = NULL;        return -1;}int32 mllr_free_regmat (float32 **A,			float32 *B			){    ckd_free_2d ((void **) A);    ckd_free (B);    return 0;}int32 mllr_norm_mgau (mgau_model_t *mgauset,		      float32 **A,		      float32 *B,		      mdef_t *mdef		      ){    int32 d, c, l, m;    float32 *temp;    int32 n_density=mgauset->n_mgau;    int32 n_mix=mgauset->max_comp;    int32 ceplen=mgauset->veclen;    mgau_t *mgau;    /* Transform codebook for each stream s */    temp = (float32 *) ckd_calloc (ceplen, sizeof(float32));        /* Transform each density d in selected codebook */    for (d = 0; d < n_density; d++) {      mgau=mgauset->mgau;      if(mdef->cd2cisen[d]!=d){ /* If d is a CD senone */	for(c = 0 ; c < n_mix ; c++){	  for (l = 0; l < ceplen; l++){	    temp[l] = 0.0;	    for (m = 0; m < ceplen; m++) {	      temp[l] += A[l][m] * mgau[d].mean[c][m];	    }	    temp[l] += B[l];	  }	  for(l=0 ; l < ceplen ;l++){	    mgau[d].mean[c][l] = temp[l];	  }	}      }    }    ckd_free (temp);    return 0;} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -