76 &ms_cont_mgau_frame_eval,
77 &ms_mgau_mllr_transform,
82 ms_mgau_init(cmd_ln_t *config, logmath_t *lmath,
bin_mdef_t *mdef)
95 g = msg->
g = gauden_init(cmd_ln_str_r(config,
"-mean"),
96 cmd_ln_str_r(config,
"-var"),
97 cmd_ln_float32_r(config,
"-varfloor"),
99 s = msg->
s = senone_init(msg->
g,
100 cmd_ln_str_r(config,
"-mixw"),
101 cmd_ln_str_r(config,
"-senmgau"),
102 cmd_ln_float32_r(config,
"-mixwfloor"),
105 s->
aw = cmd_ln_int32_r(config,
"-aw");
109 E_FATAL(
"#Feature mismatch: gauden= %d, senone= %d\n", g->
n_feat,
112 E_FATAL(
"#Densities mismatch: gauden= %d, senone= %d\n",
115 E_FATAL(
"Senones need more codebooks (%d) than present (%d)\n",
118 E_ERROR(
"Senones use fewer codebooks (%d) than present (%d)\n",
121 msg->
topn = cmd_ln_int32_r(config,
"-topn");
122 E_INFO(
"The value of topn: %d\n", msg->
topn);
125 (
"-topn argument (%d) invalid or > #density codewords (%d); set to latter\n",
133 msg->mgau_active = ckd_calloc(g->
n_mgau,
sizeof(int8));
136 mg->
vt = &ms_mgau_funcs;
149 ckd_free_3d((
void *) msg->dist);
150 ckd_free(msg->mgau_active);
159 return gauden_mllr_transform(msg->
g, mllr, msg->config);
165 uint8 *senone_active,
166 int32 n_senone_active,
178 topn = ms_mgau_topn(msg);
179 g = ms_mgau_gauden(msg);
180 sen = ms_mgau_senone(msg);
185 for (gid = 0; gid < g->
n_mgau; gid++)
188 best = (int32) 0x7fffffff;
189 for (s = 0; s < sen->
n_sen; s++) {
191 if (best > senscr[s]) {
197 for (s = 0; s < sen->
n_sen; s++) {
198 int32 bs = senscr[s] - best;
209 for (gid = 0; gid < g->
n_mgau; gid++)
210 msg->mgau_active[gid] = 0;
213 for (i = 0; i < n_senone_active; i++) {
215 int32 s = senone_active[i] + n;
216 msg->mgau_active[sen->
mgau[s]] = 1;
221 for (gid = 0; gid < g->
n_mgau; gid++) {
222 if (msg->mgau_active[gid])
226 best = (int32) 0x7fffffff;
228 for (i = 0; i < n_senone_active; i++) {
229 int32 s = senone_active[i] + n;
231 if (best > senscr[s]) {
239 for (i = 0; i < n_senone_active; i++) {
240 int32 s = senone_active[i] + n;
241 int32 bs = senscr[s] - best;