fixed-point: sb_celp gain quantization, fixed missing entry in nb_celp gain
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Fri, 14 Nov 2003 18:46:29 +0000 (18:46 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Fri, 14 Nov 2003 18:46:29 +0000 (18:46 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5577 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/nb_celp.c
libspeex/sb_celp.c

index 7e6102c..e9fc983 100644 (file)
@@ -57,7 +57,7 @@
 #define SUBMODE(x) st->submodes[st->submodeID]->x
 
 #ifdef FIXED_POINT
-spx_word32_t ol_gain_table[31]={18900, 25150, 33468, 44536, 59265, 78865, 104946, 139653, 185838, 247297, 329081, 437913, 582736, 775454, 1031906, 1373169, 1827293, 2431601, 3235761, 4305867, 5729870, 7624808, 10146425, 13501971, 17967238, 23909222, 31816294, 42338330, 56340132, 74972501, 99766822};
+spx_word32_t ol_gain_table[32]={18900, 25150, 33468, 44536, 59265, 78865, 104946, 139653, 185838, 247297, 329081, 437913, 582736, 775454, 1031906, 1373169, 1827293, 2431601, 3235761, 4305867, 5729870, 7624808, 10146425, 13501971, 17967238, 23909222, 31816294, 42338330, 56340132, 74972501, 99766822, 132760927};
 #endif
 
 #ifdef FIXED_POINT
@@ -579,7 +579,7 @@ int nb_encode(void *state, short *in, SpeexBits *bits)
       int qe = scal_quant32(ol_gain, ol_gain_table, 32);
       /*ol_gain = exp(qe/3.5)*SIG_SCALING;*/
       ol_gain = MULT16_32_Q15(28406,ol_gain_table[qe]);
-      speex_bits_pack(bits, qe, 5);      
+      speex_bits_pack(bits, qe, 5);
    }
 #else
    {
index cdf12ca..f0b9edb 100644 (file)
 
 #define SUBMODE(x) st->submodes[st->submodeID]->x
 
+#ifdef FIXED_POINT
+spx_word16_t gc_quant_bound[16] = {125, 164, 215, 282, 370, 484, 635, 832, 1090, 1428, 1871, 2452, 3213, 4210, 5516, 7228};
+#endif
+
 #define QMF_ORDER 64
 
 #ifdef FIXED_POINT
@@ -580,13 +584,9 @@ int sb_encode(void *state, short *in, SpeexBits *bits)
          /*printf ("%f %f %f %f\n", el, eh, filter_ratio, gc);*/
 #ifdef FIXED_POINT
          {
-            int qgc = (int)floor(.5+3.7*(log(gc/128.)+0.15556));
-            if (qgc<0)
-               qgc=0;
-            if (qgc>15)
-               qgc=15;
+            int qgc = scal_quant(gc, gc_quant_bound, 16);
             speex_bits_pack(bits, qgc, 4);
-            gc = 128*exp((1/3.7)*qgc-0.15556);
+            gc = MULT16_32_Q15(28626,gc_quant_bound[qgc]);
          }
 #else
          {