cmn_prior.c
来自「CMU大名鼎鼎的SPHINX-3大词汇量连续语音识别系统」· C语言 代码 · 共 120 行
C
120 行
/* ==================================================================== * Copyright (c) 1999-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. * * ==================================================================== * *//************************************************* * CMU ARPA Speech Project * * Copyright (c) 2000 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * 30-Dec-2000 Rita Singh (rsingh@cs.cmu.edu) at Carnegie Mellon University * Created */#include "cmn_prior.h"void cmn_prior(float32 **incep, int32 varnorm, int32 nfr, int32 ceplen, int32 endutt){ static float32 *cur_mean = NULL; /* the mean subtracted from input frames */ static float32 *sum = NULL; /* the sum over input frames */ static int32 nframe; /* the total number of input frames */ static int32 initialize=1; float32 sf; int32 i, j; assert(incep!=NULL); if (varnorm) E_FATAL("Variance normalization not implemented in live mode decode\n"); if (initialize){ cur_mean = (float32 *) ckd_calloc(ceplen, sizeof(float32)); /* A front-end dependent magic number */ cur_mean[0] = 12.0; sum = (float32 *) ckd_calloc(ceplen, sizeof(float32)); nframe = 0; initialize = 0; E_INFO("mean[0]= %.2f, mean[1..%d]= 0.0\n", cur_mean[0], ceplen-1); } if (nfr <= 0) return; for (i = 0; i < nfr; i++){ for (j = 0; j < ceplen; j++){ sum[j] += incep[i][j]; incep[i][j] -= cur_mean[j]; } ++nframe; } /* Shift buffer down if we have more than CMN_WIN_HWM frames */ if (nframe > CMN_WIN_HWM) { sf = (float32) (1.0/nframe); for (i = 0; i < ceplen; i++) cur_mean[i] = sum[i] * sf; /* Make the accumulation decay exponentially */ if (nframe >= CMN_WIN_HWM) { sf = CMN_WIN * sf; for (i = 0; i < ceplen; i++) sum[i] *= sf; nframe = CMN_WIN; } } if (endutt) { /* Update mean buffer */ sf = (float32) (1.0/nframe); for (i = 0; i < ceplen; i++) cur_mean[i] = sum[i] * sf; /* Make the accumulation decay exponentially */ if (nframe > CMN_WIN_HWM) { sf = CMN_WIN * sf; for (i = 0; i < ceplen; i++) sum[i] *= sf; nframe = CMN_WIN; } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?