diff options
author | Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> | 2008-09-06 06:31:56 +0400 |
---|---|---|
committer | Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> | 2008-09-06 07:07:38 +0400 |
commit | 097cf5e4e75e1310bd27e3ee39f7df38f8f8c91c (patch) | |
tree | ef1f3e13ee5b93fce22a162aabad05736373732f /libspeex/nb_celp.c | |
parent | 99a7ef29c4a4b7de435190b927354ba84bd65635 (diff) |
The LPC analysis window and lag window are now in Q15.
Diffstat (limited to 'libspeex/nb_celp.c')
-rw-r--r-- | libspeex/nb_celp.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/libspeex/nb_celp.c b/libspeex/nb_celp.c index a36da69..b696ebb 100644 --- a/libspeex/nb_celp.c +++ b/libspeex/nb_celp.c @@ -468,16 +468,17 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) ALLOC(autocorr, NB_ORDER+1, spx_word16_t); /* Window for analysis */ for (i=0;i<NB_WINDOW_SIZE-NB_FRAME_SIZE;i++) - w_sig[i] = EXTRACT16(SHR32(MULT16_16(st->winBuf[i],st->window[i]),SIG_SHIFT)); + w_sig[i] = MULT16_16_Q15(st->winBuf[i],st->window[i]); for (;i<NB_WINDOW_SIZE;i++) - w_sig[i] = EXTRACT16(SHR32(MULT16_16(in[i-NB_WINDOW_SIZE+NB_FRAME_SIZE],st->window[i]),SIG_SHIFT)); + w_sig[i] = MULT16_16_Q15(in[i-NB_WINDOW_SIZE+NB_FRAME_SIZE],st->window[i]); /* Compute auto-correlation */ _spx_autocorr(w_sig, autocorr, NB_ORDER+1, NB_WINDOW_SIZE); autocorr[0] = ADD16(autocorr[0],MULT16_16_Q15(autocorr[0],st->lpc_floor)); /* Noise floor in auto-correlation domain */ /* Lag windowing: equivalent to filtering in the power-spectrum domain */ for (i=0;i<NB_ORDER+1;i++) - autocorr[i] = MULT16_16_Q14(autocorr[i],st->lagWindow[i]); + autocorr[i] = MULT16_16_Q15(autocorr[i],st->lagWindow[i]); + autocorr[0] = ADD16(autocorr[0],1); /* Levinson-Durbin */ _spx_lpc(lpc, autocorr, NB_ORDER); |