A single mixture-Gaussian model for one senone (see above comment). More...
#include <cont_mgau.h>
Public Attributes | |
int32 | n_comp |
int32 | bstidx |
int32 | bstscr |
int32 | updatetime |
float32 ** | mean |
float32 ** | var |
float32 *** | fullvar |
float32 * | lrd |
int32 * | mixw |
float32 * | mixw_f |
A single mixture-Gaussian model for one senone (see above comment).
Mixture Gaussians: Weighted set of Gaussian densities, each with its own mean vector and diagonal covariance matrix. Specialized for continuous HMMs to improve speed performance. So, a separate mixture Gaussian, with its own mixture weights, for each HMM state. Also, a single feature stream assumed. (In other words, the mgau_t structure below represents a senone in a fully continuous HMM model.)
Given a Gaussian density with mean vector m and diagonal variance vector v, and some input vector x, all of length n, the Mahalanobis distance of x from the Gaussian mean m is given by: {1/sqrt((2pi)^n * det(v))} * exp{-Sum((x[i] - m[i])^2 / (2v[i]))} To speed up this evaluation, the first sub-expression ({1/sqrt...}) can be precomputed at initialization, and so can 1/2v[i] in the second sub-expression. Secondly, recognition systems work with log-likelihood values, so these distances or likelihood values are computed in log-domain. Finally, float32 operations are costlier than int32 ones, so the log-values are converted to logs3 domain (see libmisc/logs3.h) (but before the mixing weights are applied). Thus, to reiterate, the final scores are (int32) logs3 values.
int32 mgau_t::bstidx |
Index for the most likely Gaussians in this mixture of component. It persists through time.
Referenced by approx_cont_mgau_frame_eval(), and mgau_eval().
int32 mgau_t::bstscr |
Scores for the most likely Gaussians in this mixture of component.
Referenced by approx_cont_mgau_frame_eval(), and mgau_eval().
float32*** mgau_t::fullvar |
Referenced by mgau_free().
float32* mgau_t::lrd |
Log(Reciprocal(Determinant (variance))). (Then there is also a (2pi)^(veclen) involved...)
Referenced by mgau_comp_eval(), and mgau_free().
float32** mgau_t::mean |
The n_comp means of the Gaussians. The mean vector for a single mixture-Gaussian model for one senone. Dimension: n_comp * dimension
Referenced by main(), mgau_comp_eval(), mgau_dump(), and mgau_free().
int32* mgau_t::mixw |
Mixture weights for the n_comp components (int32 instead of float32 because these values are in logs3 domain)
Referenced by mgau_free().
float32* mgau_t::mixw_f |
(ONLY USED IN ENDPOINTER) mixture weights for the n_comp components in float32
Referenced by mgau_free().
int32 mgau_t::n_comp |
#Component Gaussians in this mixture. NOTE: May be 0 (for the untrained states).
Referenced by mgau_comp_eval().
int32 mgau_t::updatetime |
Update time
Referenced by approx_cont_mgau_frame_eval(), and mgau_eval().
float32** mgau_t::var |
The n_comp (diagonal) variances of the Gaussians. Could be converted to 1/(2*var) for faster computation (see above comment). The diagonal variance vector for a single mixture-Gaussian model for one senone. Dimension: n_comp * dimension
Referenced by mgau_comp_eval(), mgau_dump(), mgau_free(), mgau_init(), and mgau_var_nzvec_floor().