static void feat_agc(feat_t *fcb, mfcc_t **mfc, int32 nfr, int32 beginutt, int32 endutt) { agc_type_t agc_type = fcb->agc; if (!(beginutt && endutt) && agc_type != AGC_NONE) /* Only agc_emax in block computation mode. */ agc_type = AGC_EMAX; switch (agc_type) { case AGC_MAX: agc_max(fcb->agc_struct, mfc, nfr); break; case AGC_EMAX: agc_emax(fcb->agc_struct, mfc, nfr); if (endutt) agc_emax_update(fcb->agc_struct); break; case AGC_NOISE: agc_noise(fcb->agc_struct, mfc, nfr); break; default: ; } cep_dump_dbg(fcb, mfc, nfr, "After AGC"); }
static void feat_compute_utt(feat_t *fcb, mfcc_t **mfc, int32 nfr, int32 win, mfcc_t ***feat) { int32 i; cep_dump_dbg(fcb, mfc, nfr, "Incoming features (after padding)"); feat_cmn(fcb, mfc, nfr, 1, 1); feat_agc(fcb, mfc, nfr, 1, 1); /* Create feature vectors */ for (i = win; i < nfr - win; i++) { fcb->compute_feat(fcb, mfc + i, feat[i - win]); } feat_print_dbg(fcb, feat, nfr - win * 2, "After dynamic feature computation"); if (fcb->lda) { feat_lda_transform(fcb, feat, nfr - win * 2); feat_print_dbg(fcb, feat, nfr - win * 2, "After LDA"); } if (fcb->subvecs) { feat_subvec_project(fcb, feat, nfr - win * 2); feat_print_dbg(fcb, feat, nfr - win * 2, "After subvector projection"); } }
static void feat_cmn(feat_t *fcb, mfcc_t **mfc, int32 nfr, int32 beginutt, int32 endutt) { cmn_type_t cmn_type = fcb->cmn; if (!(beginutt && endutt) && cmn_type != CMN_NONE) /* Only cmn_prior in block computation mode. */ cmn_type = CMN_PRIOR; switch (cmn_type) { case CMN_CURRENT: cmn(fcb->cmn_struct, mfc, fcb->varnorm, nfr); break; case CMN_PRIOR: cmn_prior(fcb->cmn_struct, mfc, fcb->varnorm, nfr); if (endutt) cmn_prior_update(fcb->cmn_struct); break; default: ; } cep_dump_dbg(fcb, mfc, nfr, "After CMN"); }