Пример #1
0
static void
fsg_model_write_fsm_trans(fsg_model_t * fsg, int i, FILE * fp)
{
    fsg_arciter_t *itor;

    for (itor = fsg_model_arcs(fsg, i); itor;
         itor = fsg_arciter_next(itor)) {
        fsg_link_t *tl = fsg_arciter_get(itor);
        fprintf(fp, "%d %d %s %f\n",
                tl->from_state, tl->to_state,
                (tl->wid < 0) ? "<eps>" : fsg_model_word_str(fsg, tl->wid),
                -logmath_log_to_ln(fsg->lmath, tl->logs2prob / fsg->lw));
    }
}
Пример #2
0
gauden_t *
gauden_init(const char *meanfile, const char *varfile, float32 varfloor,
            int32 precompute, logmath_t *logmath)
{
    int32 i, m, f, d, *flen;
    gauden_t *g;

    assert(meanfile != NULL);
    assert(varfile != NULL);
    assert(varfloor > 0.0);

    g = (gauden_t *) ckd_calloc(1, sizeof(gauden_t));
    g->mean = g->var = NULL;    /* To force them to be allocated */
    g->logmath = logmath;

    /* Read means and (diagonal) variances for all mixture gaussians */
    gauden_param_read(&(g->mean), &g->n_mgau, &g->n_feat, &g->n_density,
                      &g->featlen, meanfile);
    gauden_param_read(&(g->var), &m, &f, &d, &flen, varfile);

    /* Verify mean and variance parameter dimensions */
    if ((m != g->n_mgau) || (f != g->n_feat) || (d != g->n_density))
        E_FATAL
            ("Mixture-gaussians dimensions for means and variances differ\n");
    for (i = 0; i < g->n_feat; i++)
        if (g->featlen[i] != flen[i])
            E_FATAL("Feature lengths for means and variances differ\n");
    ckd_free(flen);

    /* Floor variances and precompute variance determinants */
    if (precompute)
        gauden_dist_precompute(g, varfloor);

    /* Floor for density values */
    min_density = logmath_log_to_ln(logmath, S3_LOGPROB_ZERO);

    return g;
}
Пример #3
0
int32
gc_compute_closest_cw(gs_t * gs, float32 * feat)
{
    int32 codeid, bst_codeid;
    float64 diff1, diff2, tmp1, tmp2, min;
    int32 cid;
    float64 min_density;
    /*E_INFO("Compute the closest Code word\n"); */
    min_density = logmath_log_to_ln(gs->logmath, S3_LOGPROB_ZERO);

    bst_codeid = 0;
    min = MAX_POS_FLOAT64;

    for (codeid = 0; codeid < gs->n_code; codeid += 2) {
        tmp1 = 0;
        tmp2 = 0;

        for (cid = 0; cid < gs->n_featlen; cid++) {
            diff1 = feat[cid] - (gs->codeword[codeid][cid]);
            tmp1 += diff1 * diff1;

            diff2 = feat[cid] - (gs->codeword[codeid + 1][cid]);
            tmp2 += diff2 * diff2;
        }

        if (tmp1 < min) {
            min = tmp1;
            bst_codeid = codeid;
        }

        if (tmp2 < min) {
            min = tmp2;
            bst_codeid = codeid + 1;
        }
    }
    return bst_codeid;
}