static int acmod_init_feat(acmod_t *acmod) { acmod->fcb = feat_init(cmd_ln_str_r(acmod->config, "-feat"), cmn_type_from_str(cmd_ln_str_r(acmod->config,"-cmn")), cmd_ln_boolean_r(acmod->config, "-varnorm"), agc_type_from_str(cmd_ln_str_r(acmod->config, "-agc")), 1, cmd_ln_int32_r(acmod->config, "-ceplen")); if (acmod->fcb == NULL) return -1; if (cmd_ln_str_r(acmod->config, "-lda")) { E_INFO("Reading linear feature transformation from %s\n", cmd_ln_str_r(acmod->config, "-lda")); if (feat_read_lda(acmod->fcb, cmd_ln_str_r(acmod->config, "-lda"), cmd_ln_int32_r(acmod->config, "-ldadim")) < 0) return -1; } if (cmd_ln_str_r(acmod->config, "-svspec")) { int32 **subvecs; E_INFO("Using subvector specification %s\n", cmd_ln_str_r(acmod->config, "-svspec")); if ((subvecs = parse_subvecs(cmd_ln_str_r(acmod->config, "-svspec"))) == NULL) return -1; if ((feat_set_subvecs(acmod->fcb, subvecs)) < 0) return -1; } if (cmd_ln_exists_r(acmod->config, "-agcthresh") && 0 != strcmp(cmd_ln_str_r(acmod->config, "-agc"), "none")) { agc_set_threshold(acmod->fcb->agc_struct, cmd_ln_float32_r(acmod->config, "-agcthresh")); } if (acmod->fcb->cmn_struct && cmd_ln_exists_r(acmod->config, "-cmninit")) { char *c, *cc, *vallist; int32 nvals; vallist = ckd_salloc(cmd_ln_str_r(acmod->config, "-cmninit")); c = vallist; nvals = 0; while (nvals < acmod->fcb->cmn_struct->veclen && (cc = strchr(c, ',')) != NULL) { *cc = '\0'; acmod->fcb->cmn_struct->cmn_mean[nvals] = FLOAT2MFCC(atof_c(c)); c = cc + 1; ++nvals; } if (nvals < acmod->fcb->cmn_struct->veclen && *c != '\0') { acmod->fcb->cmn_struct->cmn_mean[nvals] = FLOAT2MFCC(atof_c(c)); } ckd_free(vallist); } return 0; }
int main(int argc, char *argv[]) { feat_t *fcb; mfcc_t **in_feats, ***out_feats, ***out_feats2, ***optr; int32 i, j, ncep, nfr, nfr1, nfr2; in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t)); out_feats = (mfcc_t ***)ckd_calloc_3d(8, 1, 39, sizeof(mfcc_t)); /* Test 1s_c_d_dd features */ fcb = feat_init("1s_c_d_dd", CMN_NONE, 0, AGC_NONE, 1, 13); ncep = 6; nfr1 = feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats); printf("Processed %d input %d output frames\n", ncep, nfr1); for (i = 0; i < nfr1; ++i) { printf("%d: ", i); for (j = 0; j < 39; ++j) { printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j])); } printf("\n"); } feat_free(fcb); /* Test in "live" mode. */ fcb = feat_init("1s_c_d_dd", CMN_NONE, 0, AGC_NONE, 1, 13); optr = out_feats2 = (mfcc_t ***)ckd_calloc_3d(8, 1, 39, sizeof(mfcc_t)); nfr2 = 0; ncep = 2; nfr = feat_s2mfc2feat_live(fcb, in_feats, &ncep, TRUE, FALSE, optr); printf("Processed %d input %d output frames\n", ncep, nfr); nfr2 += nfr; for (i = 0; i < nfr; ++i) { printf("%d: ", i); for (j = 0; j < 39; ++j) { printf("%.3f ", MFCC2FLOAT(optr[i][0][j])); } printf("\n"); } optr += nfr; ncep = 2; nfr = feat_s2mfc2feat_live(fcb, in_feats + 2, &ncep, FALSE, FALSE, optr); nfr2 += nfr; printf("Processed %d input %d output frames\n", ncep, nfr); for (i = 0; i < nfr; ++i) { printf("%d: ", i); for (j = 0; j < 39; ++j) { printf("%.3f ", MFCC2FLOAT(optr[i][0][j])); } printf("\n"); } optr += nfr; ncep = 2; nfr = feat_s2mfc2feat_live(fcb, in_feats + 4, &ncep, FALSE, TRUE, optr); nfr2 += nfr; printf("Processed %d input %d output frames\n", ncep, nfr); for (i = 0; i < nfr; ++i) { printf("%d: ", i); for (j = 0; j < 39; ++j) { printf("%.3f ", MFCC2FLOAT(optr[i][0][j])); } printf("\n"); } optr += nfr; feat_free(fcb); TEST_EQUAL(nfr1, nfr2); for (i = 0; i < nfr1; ++i) { for (j = 0; j < 39; ++j) { TEST_EQUAL(out_feats[i][0][j], out_feats2[i][0][j]); } } ckd_free_3d(out_feats2); ckd_free_3d(out_feats); ckd_free(in_feats); return 0; }
int main_initialize(int argc, char *argv[], lexicon_t **out_lex, model_def_t **out_omdef, model_def_t **out_dmdef, feat_t** out_feat) { model_def_t *dmdef = NULL; model_def_t *omdef = NULL; lexicon_t *lex = NULL; feat_t *feat; const char *fn; uint32 n_ts; uint32 n_cb; const char *ts2cbfn; parse_cmd_ln(argc, argv); feat = feat_init(cmd_ln_str("-feat"), cmn_type_from_str(cmd_ln_str("-cmn")), cmd_ln_boolean("-varnorm"), agc_type_from_str(cmd_ln_str("-agc")), 1, cmd_ln_int32("-ceplen")); if (cmd_ln_str("-lda")) { E_INFO("Reading linear feature transformation from %s\n", cmd_ln_str("-lda")); if (feat_read_lda(feat, cmd_ln_str("-lda"), cmd_ln_int32("-ldadim")) < 0) return -1; } if (cmd_ln_str("-svspec")) { int32 **subvecs; E_INFO("Using subvector specification %s\n", cmd_ln_str("-svspec")); if ((subvecs = parse_subvecs(cmd_ln_str("-svspec"))) == NULL) return -1; if ((feat_set_subvecs(feat, subvecs)) < 0) return -1; } if (cmd_ln_exists("-agcthresh") && 0 != strcmp(cmd_ln_str("-agc"), "none")) { agc_set_threshold(feat->agc_struct, cmd_ln_float32("-agcthresh")); } if (feat->cmn_struct && cmd_ln_exists("-cmninit")) { char *c, *cc, *vallist; int32 nvals; vallist = ckd_salloc(cmd_ln_str("-cmninit")); c = vallist; nvals = 0; while (nvals < feat->cmn_struct->veclen && (cc = strchr(c, ',')) != NULL) { *cc = '\0'; feat->cmn_struct->cmn_mean[nvals] = FLOAT2MFCC(atof(c)); c = cc + 1; ++nvals; } if (nvals < feat->cmn_struct->veclen && *c != '\0') { feat->cmn_struct->cmn_mean[nvals] = FLOAT2MFCC(atof(c)); } ckd_free(vallist); } *out_feat = feat; if (cmd_ln_str("-omoddeffn")) { E_INFO("Reading output model definitions: %s\n", cmd_ln_str("-omoddeffn")); /* Read in the model definitions. Defines the set of CI phones and context dependent phones. Defines the transition matrix tying and state level tying. */ if (model_def_read(&omdef, cmd_ln_str("-omoddeffn")) != S3_SUCCESS) { return S3_ERROR; } if (cmd_ln_str("-dmoddeffn")) { E_INFO("Reading dump model definitions: %s\n", cmd_ln_str("-dmoddeffn")); if (model_def_read(&dmdef, cmd_ln_str("-dmoddeffn")) != S3_SUCCESS) { return S3_ERROR; } setup_d2o_map(dmdef, omdef); } else { E_INFO("Assuming dump and output model definitions are identical\n"); } ts2cbfn = cmd_ln_str("-ts2cbfn"); if (ts2cbfn) { if (strcmp(SEMI_LABEL, ts2cbfn) == 0) { omdef->cb = semi_ts2cb(omdef->n_tied_state); n_ts = omdef->n_tied_state; n_cb = 1; } else if (strcmp(CONT_LABEL, ts2cbfn) == 0) { omdef->cb = cont_ts2cb(omdef->n_tied_state); n_ts = omdef->n_tied_state; n_cb = omdef->n_tied_state; } else if (strcmp(PTM_LABEL, ts2cbfn) == 0) { omdef->cb = ptm_ts2cb(omdef); n_ts = omdef->n_tied_state; n_cb = omdef->acmod_set->n_ci; } else if (s3ts2cb_read(cmd_ln_str("-ts2cbfn"), &omdef->cb, &n_ts, &n_cb) != S3_SUCCESS) { return S3_ERROR; } if (omdef->n_tied_state != n_ts) { E_FATAL("Model definition file n_tied_state = %u, but %u mappings in ts2cb\n", omdef->n_tied_state, n_ts); } } } else { E_INFO("No mdef files. Assuming 1-class init\n"); } *out_omdef = omdef; *out_dmdef = dmdef; fn = cmd_ln_str("-dictfn"); if (fn) { E_INFO("Reading main lexicon: %s\n", fn); lex = lexicon_read(NULL, fn, omdef->acmod_set); if (lex == NULL) return S3_ERROR; } fn = cmd_ln_str("-fdictfn"); if (fn) { E_INFO("Reading filler lexicon: %s\n", fn); (void)lexicon_read(lex, fn, omdef->acmod_set); } *out_lex = lex; stride = cmd_ln_int32("-stride"); return S3_SUCCESS; }
main (int32 argc, char *argv[]) { char *str; #if 0 ckd_debug(100000); #endif E_INFO("%s COMPILED ON: %s, AT: %s\n\n", argv[0], __DATE__, __TIME__); /* Digest command line argument definitions */ cmd_ln_define (defn); if ((argc == 2) && (strcmp (argv[1], "help") == 0)) { cmd_ln_print_definitions(); exit(1); } /* Look for default or specified arguments file */ str = NULL; if ((argc == 2) && (argv[1][0] != '-')) str = argv[1]; else if (argc == 1) { str = "s3align.arg"; E_INFO("Looking for default argument file: %s\n", str); } if (str) { /* Build command line argument list from file */ if ((argc = load_argfile (str, argv[0], &argv)) < 0) { fprintf (stderr, "Usage:\n"); fprintf (stderr, "\t%s argument-list, or\n", argv[0]); fprintf (stderr, "\t%s [argument-file] (default file: s3align.arg)\n\n", argv[0]); cmd_ln_print_definitions(); exit(1); } } cmdline_parse (argc, argv); if ((cmd_ln_access("-mdeffn") == NULL) || (cmd_ln_access("-meanfn") == NULL) || (cmd_ln_access("-varfn") == NULL) || (cmd_ln_access("-mixwfn") == NULL) || (cmd_ln_access("-tmatfn") == NULL) || (cmd_ln_access("-dictfn") == NULL)) E_FATAL("Missing -mdeffn, -meanfn, -varfn, -mixwfn, -tmatfn, or -dictfn argument\n"); if ((cmd_ln_access("-ctlfn") == NULL) || (cmd_ln_access("-insentfn") == NULL)) E_FATAL("Missing -ctlfn or -insentfn argument\n"); if ((cmd_ln_access ("-s2stsegdir") == NULL) && (cmd_ln_access ("-stsegdir") == NULL) && (cmd_ln_access ("-phsegdir") == NULL) && (cmd_ln_access ("-wdsegdir") == NULL) && (cmd_ln_access ("-outsentfn") == NULL)) E_FATAL("Missing output file/directory argument(s)\n"); tm_utt = timing_new (); /* * Initialize log(S3-base). All scores (probs...) computed in log domain to avoid * underflow. At the same time, log base = 1.0001 (1+epsilon) to allow log values * to be maintained in int32 variables without significant loss of precision. */ if (cmd_ln_access("-logbase") == NULL) logs3_init (1.0001); else { float32 logbase; logbase = *((float32 *) cmd_ln_access("-logbase")); if (logbase <= 1.0) E_FATAL("Illegal log-base: %e; must be > 1.0\n", logbase); if (logbase > 1.1) E_WARN("Logbase %e perhaps too large??\n", logbase); logs3_init ((float64) logbase); } /* Initialize feature stream type */ feat_init ((char *) cmd_ln_access ("-feat")); /* BHIKSHA: PASS CEPSIZE TO FEAT_CEPSIZE, 6 Jan 98 */ cepsize = *((int32 *) cmd_ln_access("-ceplen")); cepsize = feat_cepsize (cepsize); /* END CHANGES BY BHIKSHA */ /* Read in input databases */ models_init (); senscale = (int32 *) ckd_calloc (S3_MAX_FRAMES, sizeof(int32)); tmr_utt = cyctimer_new ("U"); tmr_gauden = cyctimer_new ("G"); tmr_senone = cyctimer_new ("S"); tmr_align = cyctimer_new ("A"); /* Initialize align module */ align_init (); printf ("\n"); tot_nfr = 0; process_ctlfile (); if (tot_nfr > 0) { printf ("\n"); printf("TOTAL FRAMES: %8d\n", tot_nfr); printf("TOTAL CPU TIME: %11.2f sec, %7.2f xRT\n", tm_utt->t_tot_cpu, tm_utt->t_tot_cpu/(tot_nfr*0.01)); printf("TOTAL ELAPSED TIME: %11.2f sec, %7.2f xRT\n", tm_utt->t_tot_elapsed, tm_utt->t_tot_elapsed/(tot_nfr*0.01)); } #if (! WIN32) system ("ps aguxwww | grep s3align"); #endif /* Hack!! To avoid hanging problem under Linux */ if (logfp) { fclose (logfp); *stdout = orig_stdout; *stderr = orig_stderr; } exit(0); }
static void models_init(cmd_ln_t *config) { int32 cisencnt; kbc = New_kbcore(config); kbc->logmath = logs3_init(cmd_ln_float64_r(config, "-logbase"), 1, cmd_ln_int32_r(config, "-log3table")); /* Initialize feaure stream type */ kbc->fcb = feat_init(cmd_ln_str_r(config, "-feat"), cmn_type_from_str(cmd_ln_str_r(config, "-cmn")), cmd_ln_boolean_r(config, "-varnorm"), agc_type_from_str(cmd_ln_str_r(config, "-agc")), 1, cmd_ln_int32_r(config, "-ceplen")); s3_am_init(kbc); /* Initialize the front end if -adcin is specified */ if (cmd_ln_exists_r(config, "-adcin") && cmd_ln_boolean_r(config, "-adcin")) { if ((fe = fe_init_auto_r(config)) == NULL) { E_FATAL("fe_init_auto_r() failed\n"); } } assert(kbc); assert(kbc->mdef); assert(kbc->tmat); /* Dictionary */ dict = dict_init(kbc->mdef, cmd_ln_str_r(config, "-dict"), cmd_ln_str_r(config, "-fdict"), cmd_ln_int32_r(config, "-lts_mismatch"), cmd_ln_boolean_r(config, "-mdef_fillers"), /* Never do mdef filler phones. */ FALSE, TRUE); for (cisencnt = 0; cisencnt == kbc->mdef->cd2cisen[cisencnt]; cisencnt++); ascr = ascr_init(kbc->mdef->n_sen, 0, /* No composite senone */ mdef_n_sseq(kbc->mdef), 0, /* No composite senone sequence */ 1, /* Phoneme lookahead window =1. Not enabled phoneme lookahead at this moment */ cisencnt); fastgmm = fast_gmm_init(cmd_ln_int32_r(config, "-ds"), cmd_ln_int32_r(config, "-cond_ds"), cmd_ln_int32_r(config, "-dist_ds"), cmd_ln_int32_r(config, "-gs4gs"), cmd_ln_int32_r(config, "-svq4svq"), cmd_ln_float64_r(config, "-subvqbeam"), cmd_ln_float64_r(config, "-ci_pbeam"), cmd_ln_float64_r(config, "-tighten_factor"), cmd_ln_int32_r(config, "-maxcdsenpf"), kbc->mdef->n_ci_sen, kbc->logmath); adapt_am = adapt_am_init(); }
static int initialize(int argc, char *argv[]) { const char *fdictfn; const char *dictfn; const char *ts2cbfn; uint32 n_ts; uint32 n_cb; /* define, parse and (partially) validate the command line */ parse_cmd_ln(argc, argv); feat = feat_init(cmd_ln_str("-feat"), cmn_type_from_str(cmd_ln_str("-cmn")), cmd_ln_boolean("-varnorm"), agc_type_from_str(cmd_ln_str("-agc")), 1, cmd_ln_int32("-ceplen")); if (cmd_ln_str("-lda")) { E_INFO("Reading linear feature transformation from %s\n", cmd_ln_str("-lda")); if (feat_read_lda(feat, cmd_ln_str("-lda"), cmd_ln_int32("-ldadim")) < 0) return -1; } if (cmd_ln_str("-svspec")) { int32 **subvecs; E_INFO("Using subvector specification %s\n", cmd_ln_str("-svspec")); if ((subvecs = parse_subvecs(cmd_ln_str("-svspec"))) == NULL) return -1; if ((feat_set_subvecs(feat, subvecs)) < 0) return -1; } if (cmd_ln_exists("-agcthresh") && 0 != strcmp(cmd_ln_str("-agc"), "none")) { agc_set_threshold(feat->agc_struct, cmd_ln_float32("-agcthresh")); } if (feat->cmn_struct && cmd_ln_exists("-cmninit")) { char *c, *cc, *vallist; int32 nvals; vallist = ckd_salloc(cmd_ln_str("-cmninit")); c = vallist; nvals = 0; while (nvals < feat->cmn_struct->veclen && (cc = strchr(c, ',')) != NULL) { *cc = '\0'; feat->cmn_struct->cmn_mean[nvals] = FLOAT2MFCC(atof(c)); c = cc + 1; ++nvals; } if (nvals < feat->cmn_struct->veclen && *c != '\0') { feat->cmn_struct->cmn_mean[nvals] = FLOAT2MFCC(atof(c)); } ckd_free(vallist); } if (cmd_ln_str("-segdir")) corpus_set_seg_dir(cmd_ln_str("-segdir")); if (cmd_ln_str("-segext")) corpus_set_seg_ext(cmd_ln_str("-segext")); corpus_set_mfcc_dir(cmd_ln_str("-cepdir")); corpus_set_mfcc_ext(cmd_ln_str("-cepext")); if (cmd_ln_str("-lsnfn")) corpus_set_lsn_filename(cmd_ln_str("-lsnfn")); corpus_set_ctl_filename(cmd_ln_str("-ctlfn")); if (cmd_ln_int32("-nskip") && cmd_ln_int32("-runlen")) { corpus_set_interval(cmd_ln_int32("-nskip"), cmd_ln_int32("-runlen")); } else if (cmd_ln_int32("-part") && cmd_ln_int32("-npart")) { corpus_set_partition(cmd_ln_int32("-part"), cmd_ln_int32("-npart")); } if (corpus_init() != S3_SUCCESS) { return S3_ERROR; } if (cmd_ln_str("-moddeffn")) { E_INFO("Reading %s\n", cmd_ln_str("-moddeffn")); /* Read in the model definitions. Defines the set of CI phones and context dependent phones. Defines the transition matrix tying and state level tying. */ if (model_def_read(&mdef, cmd_ln_str("-moddeffn")) != S3_SUCCESS) { return S3_ERROR; } ts2cbfn = cmd_ln_str("-ts2cbfn"); if (strcmp(SEMI_LABEL, ts2cbfn) == 0) { mdef->cb = semi_ts2cb(mdef->n_tied_state); n_ts = mdef->n_tied_state; n_cb = 1; } else if (strcmp(CONT_LABEL, ts2cbfn) == 0) { mdef->cb = cont_ts2cb(mdef->n_tied_state); n_ts = mdef->n_tied_state; n_cb = mdef->n_tied_state; } else if (strcmp(PTM_LABEL, ts2cbfn) == 0) { mdef->cb = ptm_ts2cb(mdef); n_ts = mdef->n_tied_state; n_cb = mdef->acmod_set->n_ci; } else if (s3ts2cb_read(ts2cbfn, &mdef->cb, &n_ts, &n_cb) != S3_SUCCESS) { return S3_ERROR; } dictfn = cmd_ln_str("-dictfn"); if (dictfn == NULL) { E_FATAL("You must specify a content dictionary using -dictfn\n"); } E_INFO("Reading %s\n", dictfn); lex = lexicon_read(NULL, /* no lexicon to start */ dictfn, mdef->acmod_set); if (lex == NULL) return S3_ERROR; fdictfn = cmd_ln_str("-fdictfn"); if (fdictfn) { E_INFO("Reading %s\n", fdictfn); (void)lexicon_read(lex, /* add filler words content lexicon */ fdictfn, mdef->acmod_set); } } return S3_SUCCESS; }
kbcore_t *kbcore_init (float64 logbase, char *feattype, char *cmn, char *varnorm, char *agc, char *mdeffile, char *dictfile, char *fdictfile, char *compsep, char *lmfile, char *fillpenfile, float64 silprob, float64 fillprob, float64 langwt, float64 inspen, float64 uw, char *meanfile, char *varfile, float64 varfloor, char *mixwfile, float64 mixwfloor, char *subvqfile, char *tmatfile, float64 tmatfloor) { kbcore_t *kb; E_INFO("Initializing core models:\n"); kb = (kbcore_t *) ckd_calloc (1, sizeof(kbcore_t)); kb->fcb = NULL; kb->mdef = NULL; kb->dict = NULL; kb->dict2pid = NULL; kb->lm = NULL; kb->fillpen = NULL; kb->dict2lmwid = NULL; kb->mgau = NULL; kb->svq = NULL; kb->tmat = NULL; logs3_init (logbase); if (feattype) { if ((kb->fcb = feat_init (feattype, cmn, varnorm, agc)) == NULL) E_FATAL("feat_init(%s) failed\n", feattype); if (feat_n_stream(kb->fcb) != 1) E_FATAL("#Feature streams(%d) != 1\n", feat_n_stream(kb->fcb)); } if (mdeffile) { if ((kb->mdef = mdef_init (mdeffile)) == NULL) E_FATAL("mdef_init(%s) failed\n", mdeffile); } if (dictfile) { if (! compsep) compsep = ""; else if ((compsep[0] != '\0') && (compsep[1] != '\0')) { E_FATAL("Compound word separator(%s) must be empty or single character string\n", compsep); } if ((kb->dict = dict_init (kb->mdef, dictfile, fdictfile, compsep[0])) == NULL) E_FATAL("dict_init(%s,%s,%s) failed\n", dictfile, fdictfile ? fdictfile : "", compsep); } if (lmfile) { if ((kb->lm = lm_read (lmfile, langwt, inspen, uw)) == NULL) E_FATAL("lm_read(%s, %e, %e, %e) failed\n", lmfile, langwt, inspen, uw); } if (fillpenfile || (lmfile && kb->dict)) { if (! kb->dict) /* Sic */ E_FATAL("No dictionary for associating filler penalty file(%s)\n", fillpenfile); if ((kb->fillpen = fillpen_init (kb->dict, fillpenfile, silprob, fillprob, langwt, inspen)) == NULL) E_FATAL("fillpen_init(%s) failed\n", fillpenfile); } if (meanfile) { if ((! varfile) || (! mixwfile)) E_FATAL("Varfile or mixwfile not specified along with meanfile(%s)\n", meanfile); kb->mgau = mgau_init (meanfile, varfile, varfloor, mixwfile, mixwfloor, TRUE); if (kb->mgau == NULL) E_FATAL("gauden_init(%s, %s, %e) failed\n", meanfile, varfile, varfloor); if (subvqfile) { if ((kb->svq = subvq_init (subvqfile, varfloor, -1, kb->mgau)) == NULL) E_FATAL("subvq_init (%s, %e, -1) failed\n", subvqfile, varfloor); } } if (tmatfile) { if ((kb->tmat = tmat_init (tmatfile, tmatfloor)) == NULL) E_FATAL("tmat_init (%s, %e) failed\n", tmatfile, tmatfloor); } if (kb->dict && kb->lm) { /* Initialize dict2lmwid */ if ((kb->dict2lmwid = wid_dict_lm_map (kb->dict, kb->lm)) == NULL) E_FATAL("Dict/LM word-id mapping failed\n"); } if (kb->mdef && kb->dict) { /* Initialize dict2pid */ kb->dict2pid = dict2pid_build (kb->mdef, kb->dict); } /* ***************** Verifications ***************** */ E_INFO("Verifying models consistency:\n"); if (kb->fcb && kb->mgau) { /* Verify feature streams against gauden codebooks */ if (feat_stream_len(kb->fcb, 0) != mgau_veclen(kb->mgau)) E_FATAL("Feature streamlen(%d) != mgau streamlen(%d)\n", feat_stream_len(kb->fcb, 0), mgau_veclen(kb->mgau)); } if (kb->mdef && kb->mgau) { /* Verify senone parameters against model definition parameters */ if (kb->mdef->n_sen != mgau_n_mgau(kb->mgau)) E_FATAL("Mdef #senones(%d) != mgau #senones(%d)\n", kb->mdef->n_sen, mgau_n_mgau(kb->mgau)); } if (kb->mdef && kb->tmat) { /* Verify transition matrices parameters against model definition parameters */ if (kb->mdef->n_tmat != kb->tmat->n_tmat) E_FATAL("Mdef #tmat(%d) != tmatfile(%d)\n", kb->mdef->n_tmat, kb->tmat->n_tmat); if (kb->mdef->n_emit_state != kb->tmat->n_state) E_FATAL("Mdef #states(%d) != tmat #states(%d)\n", kb->mdef->n_emit_state, kb->tmat->n_state); } return kb; }
int main(int argc, char *argv[]) { feat_t *fcb; mfcc_t **in_feats, ***out_feats; int32 i, j, ncep; /* Test "raw" features without concatenation */ fcb = feat_init("13", CMN_NONE, 0, AGC_NONE, 1, 13); in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t)); out_feats = (mfcc_t ***)ckd_calloc_3d(6, 1, 13, sizeof(mfcc_t)); ncep = 6; feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats); for (i = 0; i < 6; ++i) { for (j = 0; j < 13; ++j) { printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j])); } printf("\n"); } feat_free(fcb); ckd_free(in_feats); ckd_free_3d(out_feats); /* Test "raw" features with concatenation */ fcb = feat_init("13:1", CMN_NONE, 0, AGC_NONE, 1, 13); in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t)); out_feats = (mfcc_t ***)ckd_calloc_3d(8, 1, 39, sizeof(mfcc_t)); ncep = 6; feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats); for (i = 0; i < 6; ++i) { for (j = 0; j < 39; ++j) { printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j])); } printf("\n"); } feat_free(fcb); /* Test 1s_c_d_dd features */ fcb = feat_init("1s_c_d_dd", CMN_NONE, 0, AGC_NONE, 1, 13); ncep = 6; feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats); for (i = 0; i < 6; ++i) { for (j = 0; j < 39; ++j) { printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j])); } printf("\n"); } /* Verify that the deltas are correct. */ for (i = 2; i < 4; ++i) { for (j = 0; j < 13; ++j) { if (fabs(MFCC2FLOAT(out_feats[i][0][13+j] - (out_feats[i+2][0][j] - out_feats[i-2][0][j]))) > 0.01) { printf("Delta mismatch in [%d][%d]\n", i, j); return 1; } } } feat_free(fcb); ckd_free(in_feats); ckd_free_3d(out_feats); return 0; }