PocketSphinx  0.6
src/libpocketsphinx/s2_semi_mgau.h
00001 /* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
00002 /* ====================================================================
00003  * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
00004  * reserved.
00005  *
00006  * Redistribution and use in source and binary forms, with or without
00007  * modification, are permitted provided that the following conditions
00008  * are met:
00009  *
00010  * 1. Redistributions of source code must retain the above copyright
00011  *    notice, this list of conditions and the following disclaimer. 
00012  *
00013  * 2. Redistributions in binary form must reproduce the above copyright
00014  *    notice, this list of conditions and the following disclaimer in
00015  *    the documentation and/or other materials provided with the
00016  *    distribution.
00017  *
00018  * This work was supported in part by funding from the Defense Advanced 
00019  * Research Projects Agency and the National Science Foundation of the 
00020  * United States of America, and the CMU Sphinx Speech Consortium.
00021  *
00022  * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
00023  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
00024  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00025  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
00026  * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00027  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
00028  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
00029  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
00030  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
00031  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
00032  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033  *
00034  * ====================================================================
00035  *
00036  */
00037 /*
00038  * Interface for "semi-continuous vector quantization", a.k.a. Sphinx2
00039  * fast GMM computation.
00040  */
00041 
00042 #ifndef __S2_SEMI_MGAU_H__
00043 #define __S2_SEMI_MGAU_H__
00044 
00045 /* SphinxBase headesr. */
00046 #include <sphinxbase/fe.h>
00047 #include <sphinxbase/logmath.h>
00048 #include <sphinxbase/mmio.h>
00049 
00050 /* Local headers. */
00051 #include "acmod.h"
00052 #include "hmm.h"
00053 #include "bin_mdef.h"
00054 #include "ms_gauden.h"
00055 
00056 typedef struct vqFeature_s vqFeature_t;
00057 
00058 typedef struct s2_semi_mgau_s s2_semi_mgau_t;
00059 struct s2_semi_mgau_s {
00060     ps_mgau_t base;     
00061     cmd_ln_t *config;   /* configuration parameters */
00062 
00063     gauden_t *g;        /* Set of Gaussians (pointers below point in here and will go away soon) */
00064     mfcc_t  ***means;   /* mean vectors foreach feature, density */
00065     mfcc_t  ***vars;    /* inverse var vectors foreach feature, density */
00066     mfcc_t  **dets;     /* det values foreach cb, feature */
00067 
00068     uint8 ***mixw;     /* mixture weight distributions */
00069     mmio_file_t *sendump_mmap;/* memory map for mixw (or NULL if not mmap) */
00070 
00071     uint8 *mixw_cb;    /* mixture weight codebook, if any (assume it contains 16 values) */
00072     int32 *veclen;      /* Length of feature streams */
00073     int16 n_feat;       /* Number of feature streams */
00074     int16 n_density;    /* Number of mixtures per codebook */
00075     int32 n_sen;        /* Number of senones */
00076     uint8 *topn_beam;   /* Beam for determining per-frame top-N densities */
00077     int16 max_topn;
00078     int16 ds_ratio;
00079 
00080     vqFeature_t ***topn_hist; 
00081     uint8 **topn_hist_n;      
00082     vqFeature_t **f;          
00083     int n_topn_hist;          
00085     /* Log-add table for compressed values. */
00086     logmath_t *lmath_8b;
00087     /* Log-add object for reloading means/variances. */
00088     logmath_t *lmath;
00089 };
00090 
00091 ps_mgau_t *s2_semi_mgau_init(acmod_t *acmod);
00092 void s2_semi_mgau_free(ps_mgau_t *s);
00093 int s2_semi_mgau_frame_eval(ps_mgau_t *s,
00094                             int16 *senone_scores,
00095                             uint8 *senone_active,
00096                             int32 n_senone_active,
00097                             mfcc_t **featbuf,
00098                             int32 frame,
00099                             int32 compallsen);
00100 int s2_semi_mgau_mllr_transform(ps_mgau_t *s,
00101                                 ps_mllr_t *mllr);
00102 
00103 
00104 #endif /*  __S2_SEMI_MGAU_H__ */