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

📄 ms_mllr.c

📁 CMU大名鼎鼎的SPHINX-3大词汇量连续语音识别系统
💻 C
字号:
/* * mllr.c -- Application of MLLR regression matrices to codebook means *  * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1996 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** *  * HISTORY *  * 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 <s3.h>*/#include "ms_mllr.h"int32 ms_mllr_read_regmat (const char *regmatfile,			float32 ****A,			float32 ***B,			int32 *streamlen,			int32 n_stream){    int32 i, 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 (n_stream, sizeof (float32 **));    lB = (float32 **) ckd_calloc (n_stream, sizeof (float32 *));    for (i = 0; i < n_stream; ++i) {	lA[i] = (float32 **) ckd_calloc_2d (streamlen[i], streamlen[i], sizeof(float32));	lB[i] = (float32 *) ckd_calloc (streamlen[i], 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;        if ((fscanf (fp, "%d", &n) != 1) || (n != n_stream))	goto readerror;        for (i = 0; i < n_stream; ++i) {	if ((fscanf(fp, "%d", &n) != 1) || (streamlen[i] != n))	    goto readerror;		for (j = 0; j < streamlen[i]; j++) {	    for (k = 0; k < streamlen[i]; ++k) {		if (fscanf(fp, "%f ", &lA[i][j][k]) != 1)		    goto readerror;	    }	}	for (j = 0; j < streamlen[i]; j++) {	    if (fscanf(fp, "%f ", &lB[i][j]) != 1)		goto readerror;	}    }    *A = lA;    *B = lB;    fclose(fp);    return 0;readerror:    E_ERROR("Error reading MLLR file %s\n", regmatfile);    for (i = 0; i < n_stream; i++) {	ckd_free_2d ((void **)lA[i]);	ckd_free (lB[i]);    }    ckd_free (lA);    ckd_free (lB);    fclose (fp);        *A = NULL;    *B = NULL;        return -1;}int32 ms_mllr_free_regmat (float32 ***A,			float32 **B,			int32 *streamlen,			int32 n_stream){    int32 i;        for (i = 0; i < n_stream; i++) {	ckd_free_2d ((void **) A[i]);	ckd_free (B[i]);    }    ckd_free (A);    ckd_free (B);    return 0;}int32 ms_mllr_norm_mgau (float32 ***mean,		      int32 n_density,		      float32 ***A,		      float32 **B,		      int32 *streamlen,		      int32 n_stream){    int32 s, d, l, m;    float64 *temp;        /* Transform codebook for each stream s */    for (s = 0; s < n_stream; s++) {	temp = (float64 *) ckd_calloc (streamlen[s], sizeof(float64));	/* Transform each density d in selected codebook */	for (d = 0; d < n_density; d++) {	    for (l = 0; l < streamlen[s]; l++) {		temp[l] = 0.0;		for (m = 0; m < streamlen[s]; m++) {		    temp[l] += A[s][l][m] * mean[s][d][m];		}		temp[l] += B[s][l];	    }	    for (l = 0; l < streamlen[s]; l++) {		mean[s][d][l] = (float32) temp[l];	    }	}	ckd_free (temp);    }    return 0;}

⌨️ 快捷键说明

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