static int phone_loop_search_start(ps_search_t *search) { phone_loop_search_t *pls = (phone_loop_search_t *)search; int i; /* Reset and enter all phone HMMs. */ for (i = 0; i < pls->n_phones; ++i) { hmm_t *hmm = (hmm_t *)&pls->phones[i]; hmm_clear(hmm); hmm_enter(hmm, 0, -1, 0); } phone_loop_search_free_renorm(pls); pls->best_score = 0; return 0; }
void ngram_fwdflat_start(ngram_search_t *ngs) { root_chan_t *rhmm; int i; ptmr_reset(&ngs->fwdflat_perf); ptmr_start(&ngs->fwdflat_perf); build_fwdflat_wordlist(ngs); build_fwdflat_chan(ngs); ngs->bpidx = 0; ngs->bss_head = 0; for (i = 0; i < ps_search_n_words(ngs); i++) ngs->word_lat_idx[i] = NO_BP; /* Reset the permanently allocated single-phone words, since they * may have junk left over in them from previous searches. */ for (i = 0; i < ngs->n_1ph_words; i++) { int32 w = ngs->single_phone_wid[i]; rhmm = (root_chan_t *) ngs->word_chan[w]; hmm_clear(&rhmm->hmm); } /* Start search with <s>; word_chan[<s>] is permanently allocated */ rhmm = (root_chan_t *) ngs->word_chan[ps_search_start_wid(ngs)]; hmm_enter(&rhmm->hmm, 0, NO_BP, 0); ngs->active_word_list[0][0] = ps_search_start_wid(ngs); ngs->n_active_word[0] = 1; ngs->best_score = 0; ngs->renormalized = FALSE; for (i = 0; i < ps_search_n_words(ngs); i++) ngs->last_ltrans[i].sf = -1; if (!ngs->fwdtree) ngs->n_frame = 0; ngs->st.n_fwdflat_chan = 0; ngs->st.n_fwdflat_words = 0; ngs->st.n_fwdflat_word_transition = 0; ngs->st.n_senone_active_utt = 0; }
void hmm_init(hmm_context_t *ctx, hmm_t *hmm, int mpx, int32 ssid, s3tmatid_t tmatid) { hmm->ctx = ctx; hmm->mpx = mpx; hmm->n_emit_state = ctx->n_emit_state; if (mpx) { hmm->s.mpx_ssid = ckd_calloc(hmm_n_emit_state(hmm), sizeof(*hmm->s.mpx_ssid)); memset(hmm->s.mpx_ssid, -1, sizeof(*hmm->s.mpx_ssid) * hmm_n_emit_state(hmm)); hmm->s.mpx_ssid[0] = ssid; } else { hmm->s.ssid = ssid; } hmm->tmatid = tmatid; hmm_clear(hmm); }
static int phone_loop_search_start(ps_search_t *search) { phone_loop_search_t *pls = (phone_loop_search_t *)search; int i; /* Reset and enter all phone HMMs. */ for (i = 0; i < pls->n_phones; ++i) { hmm_t *hmm = (hmm_t *)&pls->hmms[i]; hmm_clear(hmm); hmm_enter(hmm, 0, -1, 0); } memset(pls->penalties, 0, pls->n_phones * sizeof(*pls->penalties)); for (i = 0; i < pls->window; i++) memset(pls->pen_buf[i], 0, pls->n_phones * sizeof(*pls->pen_buf[i])); phone_loop_search_free_renorm(pls); pls->best_score = 0; pls->pen_buf_ptr = 0; return 0; }
void hmm_init(hmm_context_t *ctx, hmm_t *hmm, int mpx, int ssid, int tmatid) { hmm->ctx = ctx; hmm->mpx = mpx; hmm->n_emit_state = ctx->n_emit_state; if (mpx) { int i; hmm->ssid = BAD_SSID; hmm->senid[0] = ssid; for (i = 1; i < hmm_n_emit_state(hmm); ++i) { hmm->senid[i] = BAD_SSID; } } else { hmm->ssid = ssid; memcpy(hmm->senid, ctx->sseq[ssid], hmm->n_emit_state * sizeof(*hmm->senid)); } hmm->tmatid = tmatid; hmm_clear(hmm); }
void fsg_psubtree_pnode_deactivate(fsg_pnode_t * pnode) { hmm_clear(&pnode->hmm); }