calc_mix.c
来自「julius version 4.12.about sound recognit」· C语言 代码 · 共 82 行
C
82 行
/** * @file calc_mix.c * * <JA> * @brief 寒圭ガウス尸邵の脚みつき下の纷换¨润 tied-mixture 脱·キャッシュ痰し * </JA> * * <EN> * @brief Compute weighed sum of Gaussian mixture for non tied-mixture model (no cache) * </EN> * * @author Akinobu LEE * @date Thu Feb 17 14:18:52 2005 * * $Revision: 1.4 $ * *//* * Copyright (c) 1991-2007 Kawahara Lab., Kyoto University * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology * Copyright (c) 2005-2007 Julius project team, Nagoya Institute of Technology * All rights reserved */#include <sent/stddefs.h>#include <sent/htk_hmm.h>#include <sent/htk_param.h>#include <sent/hmm.h>#include <sent/hmm_calc.h>/** * @brief Compute the output probability of current state OP_State. * * No codebook-level cache is done. * * @param wrk [i/o] HMM computation work area * * @return the output probability of the state OP_State in log10 */LOGPROBcalc_mix(HMMWork *wrk){ int i; LOGPROB logprob, logprobsum; PROB *w; int *id; int s; PROB stream_weight; /* compute Gaussian set */ logprobsum = 0.0; for(s=0;s<wrk->OP_nstream;s++) { /* set stream weight */ if (wrk->OP_state->w) stream_weight = wrk->OP_state->w->weight[s]; else stream_weight = 1.0; /* setup storage pointer for this mixture pdf */ wrk->OP_vec = wrk->OP_vec_stream[s]; wrk->OP_veclen = wrk->OP_veclen_stream[s]; /* compute output probabilities */ /* computed Gaussians will be set in: score ... OP_calced_score[0..OP_calced_num] id ... OP_calced_id[0..OP_calced_num] */ (*(wrk->compute_gaussset))(wrk, wrk->OP_state->pdf[s]->b, wrk->OP_state->pdf[s]->mix_num, NULL, 0); /* add weights */ id = wrk->OP_calced_id; w = wrk->OP_state->pdf[s]->bweight; for(i=0;i<wrk->OP_calced_num;i++) { //printf("s%d-m%d: %f %f\n", s+1, i+1, wrk->OP_calced_score[i], w[id[i]]); wrk->OP_calced_score[i] += w[id[i]]; } /* add log probs */ logprob = addlog_array(wrk->OP_calced_score, wrk->OP_calced_num); /* if outprob of a stream is zero, skip this stream */ if (logprob <= LOG_ZERO) continue; /* sum all the obtained mixture scores */ logprobsum += logprob * stream_weight; } if (logprobsum == 0.0) return(LOG_ZERO); /* no valid stream */ if (logprobsum <= LOG_ZERO) return(LOG_ZERO); /* lowest == LOG_ZERO */ return (logprobsum * INV_LOG_TEN);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?