diff --git a/dnn/freq.c b/dnn/freq.c index 8f7e5ed35fd59f817001246cea4d26930f0c7292..724311cec6bd3b16b456c8afc370732439ce3b0b 100644 --- a/dnn/freq.c +++ b/dnn/freq.c @@ -51,7 +51,7 @@ static const opus_int16 eband5ms[] = { typedef struct { int init; kiss_fft_state *kfft; - float half_window[FRAME_SIZE]; + float half_window[OVERLAP_SIZE]; float dct_table[NB_BANDS*NB_BANDS]; } CommonState; @@ -127,9 +127,9 @@ CommonState common; static void check_init() { int i; if (common.init) return; - common.kfft = opus_fft_alloc_twiddles(2*FRAME_SIZE, NULL, NULL, NULL, 0); - for (i=0;i<FRAME_SIZE;i++) - common.half_window[i] = sin(.5*M_PI*sin(.5*M_PI*(i+.5)/FRAME_SIZE) * sin(.5*M_PI*(i+.5)/FRAME_SIZE)); + common.kfft = opus_fft_alloc_twiddles(WINDOW_SIZE, NULL, NULL, NULL, 0); + for (i=0;i<OVERLAP_SIZE;i++) + common.half_window[i] = sin(.5*M_PI*sin(.5*M_PI*(i+.5)/OVERLAP_SIZE) * sin(.5*M_PI*(i+.5)/OVERLAP_SIZE)); for (i=0;i<NB_BANDS;i++) { int j; for (j=0;j<NB_BANDS;j++) { @@ -209,10 +209,11 @@ float lpc_from_bands(float *lpc, const float *Ex) float rc[LPC_ORDER]; float Xr[FREQ_SIZE]; kiss_fft_cpx X_auto[FREQ_SIZE]; - float x_auto[FRAME_SIZE]; + float x_auto[WINDOW_SIZE]; interp_band_gain(Xr, Ex); + Xr[FREQ_SIZE-1] = 0; RNN_CLEAR(X_auto, FREQ_SIZE); - for (i=0;i<160;i++) X_auto[i].r = Xr[i]; + for (i=0;i<FREQ_SIZE;i++) X_auto[i].r = Xr[i]; inverse_transform(x_auto, X_auto); for (i=0;i<LPC_ORDER+1;i++) ac[i] = x_auto[i]; @@ -239,7 +240,7 @@ float lpc_from_cepstrum(float *lpc, const float *cepstrum) void apply_window(float *x) { int i; check_init(); - for (i=0;i<FRAME_SIZE;i++) { + for (i=0;i<OVERLAP_SIZE;i++) { x[i] *= common.half_window[i]; x[WINDOW_SIZE - 1 - i] *= common.half_window[i]; } diff --git a/dnn/freq.h b/dnn/freq.h index 034fff1b749529bf1aa01b7d4eb63dfcc71911bb..106a6a1771c577963ac46573d0838767ef3f35af 100644 --- a/dnn/freq.h +++ b/dnn/freq.h @@ -30,8 +30,9 @@ #define FRAME_SIZE_SHIFT 2 #define FRAME_SIZE (40<<FRAME_SIZE_SHIFT) -#define WINDOW_SIZE (2*FRAME_SIZE) -#define FREQ_SIZE (FRAME_SIZE + 1) +#define OVERLAP_SIZE (FRAME_SIZE) +#define WINDOW_SIZE (FRAME_SIZE + OVERLAP_SIZE) +#define FREQ_SIZE (WINDOW_SIZE/2 + 1) #define NB_BANDS 18