Пример #1
0
void
vtln_alpha(Recog *recog, RecogProcess *r)
{
    Sentence *s;
    float alpha, alpha_bgn, alpha_end;
    float max_alpha;
    LOGPROB max_score;
    PROCESS_AM *am;
    MFCCCalc *mfcc;
    SentenceAlign *align;

    s = &(r->result.sent[0]);
    align = result_align_new();

    max_score = LOG_ZERO;

    printf("------------ begin VTLN -------------\n");

    mfcc = r->am->mfcc;

    alpha_bgn = mfcc->para->vtln_alpha - VTLN_RANGE;
    alpha_end = mfcc->para->vtln_alpha + VTLN_RANGE;

    for(alpha = alpha_bgn; alpha <= alpha_end; alpha += VTLN_STEP) {
        mfcc->para->vtln_alpha = alpha;
        if (InitFBank(mfcc->wrk, mfcc->para) == FALSE) {
            jlog("ERROR: VTLN: InitFBank() failed\n");
            return;
        }
        if (wav2mfcc(recog->speech, recog->speechlen, recog) == FALSE) {
            jlog("ERROR: VTLN: wav2mfcc() failed\n");
            return;
        }
        outprob_prepare(&(r->am->hmmwrk), mfcc->param->samplenum);
        word_align(s->word, s->word_num, mfcc->param, align, r);
        printf("%f: %f\n", alpha, align->allscore);
        if (max_score < align->allscore) {
            max_score = align->allscore;
            max_alpha = alpha;
        }
    }
    printf("MAX: %f: %f\n", max_alpha, max_score);
    mfcc->para->vtln_alpha = max_alpha;
    if (InitFBank(mfcc->wrk, mfcc->para) == FALSE) {
        jlog("ERROR: VTLN: InitFBank() failed\n");
        return;
    }

    printf("------------ end VTLN -------------\n");

    result_align_free(align);

}
Пример #2
0
/** 
 * Setup work area for parameters, values, buffers, tables to compute
 * MFCC vectors, with a given parameter configurations
 * 
 * @param para [in] configuration parameters
 *
 * @return pointer to the newly allocated work area.
 */
MFCCWork *
WMP_work_new(Value *para)
{
  MFCCWork *w;

  /* newly allocated area should be cleared */
  w = (MFCCWork *)mymalloc(sizeof(MFCCWork));
  memset(w, 0, sizeof(MFCCWork));

  /* set filterbank information */
  if (InitFBank(w, para) == FALSE) return NULL;

#ifdef MFCC_SINCOS_TABLE
  /* prepare tables */
  make_costbl_hamming(w, para->framesize);
  make_fft_table(w, w->fb.n);
  if (para->mfcc_dim >= 0) {
    make_costbl_makemfcc(w, para->fbank_num, para->mfcc_dim);
    make_sintbl_wcep(w, para->lifter, para->mfcc_dim);
  }
#endif

  /* prepare some buffers */
  w->fbank = (double *)mymalloc((para->fbank_num+1)*sizeof(double));
  w->bf = (float *)mymalloc(w->fb.fftN * sizeof(float));
  w->bflen = w->fb.fftN;

  return w;
}