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

📄 subvq.h

📁 CMU大名鼎鼎的SPHINX-3大词汇量连续语音识别系统
💻 H
字号:
/* ==================================================================== * 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. * * ==================================================================== * *//* * subvq.h *  * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1999 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** *  * HISTORY *  * 20.Apr.2001  RAH (rhoughton@mediasite.com, ricky.houghton@cs.cmu.edu) *              Updated subvq_free () to free more allocated memory *  * 15-Dec-1999	M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * 		Moved subvq_t.{frm_sen_eval,frm_gau_eval} to cont_mgau.h. *  * 14-Dec-1999	M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * 		Added subvq_t.{frm_sen_eval,frm_gau_eval}.  Changed subvq_frame_eval to * 		return the normalization factor. *  * 06-Dec-1999	M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * 		Added subvq_subvec_eval_logs3(). *  * 14-Oct-1999	M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * 		Changed ci_active flags input to sen_active in subvq_frame_eval(). *  * 20-Jul-1999	M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * 		Added subvq_gautbl_eval_logs3(). *  * 12-Mar-1999	M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * 		Started. */#ifndef _S3_SUBVQ_H_#define _S3_SUBVQ_H_#include "s3types.h"#include "cont_mgau.h"#include "vector.h"#include "logs3.h"/** \file subvq.h    \brief Implementation of Sub-vector quantization. */#ifdef __cplusplusextern "C" {#endif  /** Wrapper structures of sub-vector quantization   */typedef struct {    arraysize_t origsize;	/** origsize.r = #codebooks (or states) in original model;				   origsize.c = max #codewords/codebook in original model. */    int32 n_sv;			/** #Subvectors */    int32 vqsize;		/** #Codewords in each subvector quantized mean/var table */    int32 **featdim;		/** featdim[s] = Original feature dimensions in subvector s */    vector_gautbl_t *gautbl;	/** Vector-quantized Gaussians table for each sub-vector */    int32 ***map;		/** map[i][j] = map from original codebook(i)/codeword(j) to				   sequence of nearest vector quantized subvector codewords;				   so, each map[i][j] is of length n_sv.  Finally, map is				   LINEARIZED, so that it indexes into a 1-D array of scores				   rather than a 2-D array (for faster access). */   /* Working space used during evaluation. */    float32 *subvec;		/** Subvector extracted from feature vector */    int32 **vqdist;		/** vqdist[i][j] = score (distance) for i-th subvector compared				   to j-th subvector-codeword */    int32 *gauscore;		/** Subvq-based approx. Gaussian density scores for one mixture */    int32 *mgau_sl;		/** Shortlist for one mixture (based on gauscore[]) */  /* ARCHAN, 1111, 04, move the static global variables to the structure again. */  /* RAH, 5.8.01, VQ_EVAL determines how many vectors are used to   * compute the shortlist, for now this value is only relevant when n_sv =3.   * Setting it to 1 means that only the CEP values are estimated, 2 means that    * CEP and delta values are estimated, 3 means all three are estimated.   * Note, we must adjust the beam widths as we muck around with these.   */    int32 VQ_EVAL;              /** Number of sub-vector to be computed */} subvq_t;  /** * SubVQ file format: *   VQParam #Original-Codebooks #Original-Codewords/codebook(max) -> #Subvectors #VQ-codewords *   Subvector 0 length <length> <feature-dim> <feature-dim> <feature-dim> ... *   Subvector 1 length <length> <feature-dim> <feature-dim> <feature-dim> ... *   ... *   Codebook 0 *   Row 0 of mean/var values (interleaved) for subvector 0 codebook (in 1 line) *   Row 1 of above *   Row 2 of above *   ... *   Map 0 *   Mappings for state 0 codewords (in original model) to codewords of this subvector codebook *   Mappings for state 1 codewords (in original model) to codewords of this subvector codebook *   Mappings for state 2 codewords (in original model) to codewords of this subvector codebook *   ... *   Repeated for each subvector codebook 1 *   Repeated for each subvector codebook 2 *   ... *   End */subvq_t *subvq_init (char *file,	/** In: Subvector model file */		     float64 varfloor,	/** In: Floor to be applied to variance values */		     int32 max_sv,	/** In: Use the first so many subvectors instead of all;					   if <0, use all */		     mgau_model_t *g);	/** In: Original model from which this subvq model was					   built, for cross-validation; optional */  /** Deallocate sub-vector quantization */void subvq_free (subvq_t *vq);  /** * Evaluate senone scores for one frame.  If subvq model is available, for each senone, first * get approximate Gaussian density scores using it; obtain a shortlist of Gaussians using * these scores, then evaluate the shortlist exactly.  If no subvq model, evaluate senones * using all Gaussian densities.  Finally, scale senone scores by subtracting the best. * Return value: The normalization factor (best senone absolute score). */int32 subvq_frame_eval (subvq_t *vq,	/** In: Sub-vector model */			mgau_model_t *g,/** In: Exact mixture Gaussian model */			int32 beam,	/** In: (Logs3) threshold for selecting shortlist;					   range = [-infinity(widest beam), 0(narrowest)] */			float32 *feat,	/** In: Input feature vector for this frame */			int32 *sen_active,	/** In: Active flags for each senone (optional).						   If not NULL, only active ones evaluated */			int32 *senscr);	/** Out: Normalized senone scores */  /** * Evaluate the Mahalanobis distances between the given feature vector and each entry in the * given subvq codebook.  Save results, as logs3 values, in vq->vqdist[][]. */void subvq_gautbl_eval_logs3 (subvq_t *vq,	/** In/Out: Reference subvq structure */			      float32 *feat);	/** In: Subvectors extracted from this, and						   compared to relevant subvq codewords */  /** * Evaluate the codewords for a single given subvector sv, wrt the input feature vector. * Save results, as logs3 values, in vq->vqdist[sv][]. * (Basically, like subvq_gautbl_eval_logs3, but for a single given subvector instead of all.) */void subvq_subvec_eval_logs3 (subvq_t *vq,	/** In/Out: Reference subvq structure */			      float32 *feat,	/** In: Input feature subvector extracted from						 ** this, and compared to relevant codewords */			      int32 sv);	/** In: ID of subvector being evaluated *//* * Based on previously computed subvq scores (Mahalanobis distances), determine the active * components in the given mixture (using the vq->map). * Return value: #Candidates in the returned shortlist. */int32 subvq_mgau_shortlist (subvq_t *vq,				   int32 m,	/** In: GMM index */				   int32 n,	/** In: #Components in specified mixture */				   int32 beam);	/** In: Threshold to select active components *//* * Compute the scores of a gaussian using only sum of the sub-vector scores.  */int32 subvq_mgau_eval (mgau_model_t *g,		       subvq_t *vq, /*the SVQ */		       int32 m, /*In: GMM Index */		       int32 n, /* #Components in a specified mixture */		       int32 *active /*Active list of mixture */		       );#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

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