ref: fb3112ade604387b27030008ccf9c204efbb19fd
parent: e8c962128577b84f1070e255908e2da0802e39dd
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Thu Dec 13 10:42:11 EST 2018
Removing most of the full-overlap assumptions from freq.[ch]
--- a/dnn/freq.c
+++ b/dnn/freq.c
@@ -51,7 +51,7 @@
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 @@
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 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 @@
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];
}
--- 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
--
⑨