fixed-point: LPC/LSP cleanup
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:32:24 +0000 (04:32 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:32:24 +0000 (04:32 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5415 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/lsp.c
libspeex/misc.h
libspeex/nb_celp.c
libspeex/sb_celp.c
libspeex/testenc_wb.c

index 3785a72..4b86d6d 100644 (file)
@@ -197,8 +197,8 @@ int lpc_to_lsp (spx_coef_t *a,int lpcrdr,float *freq,int nb,float delta, char *s
     *px++ = 1.0;
     *qx++ = 1.0;
     for(i=1;i<=m;i++){
-       *px++ = (a[i]+a[lpcrdr+1-i])/8192.-*p++;
-       *qx++ = (a[i]-a[lpcrdr+1-i])/8192.+*q++;
+       *px++ = (a[i]+a[lpcrdr+1-i])/LPC_SCALING - *p++;
+       *qx++ = (a[i]-a[lpcrdr+1-i])/LPC_SCALING + *q++;
     }
     px = P;
     qx = Q;
index 796eb3e..1dec619 100644 (file)
@@ -54,6 +54,8 @@ typedef spx_word32_t spx_mem_t;
 typedef spx_word16_t spx_coef_t;
 typedef float   spx_sig_t;
 
+#define LPC_SCALING  8192.
+
 #define MULT16_32_Q14(a,b) (((a)*((b)>>14)) + ((a)*((signed int)((b)&0x00003fff))>>14))
 #define MULT16_32_Q15(a,b) (((a)*((b)>>15)) + ((a)*((signed int)((b)&0x00007fff))>>15))
 
@@ -74,6 +76,8 @@ typedef float spx_sig_t;
 typedef float spx_word16_t;
 typedef float spx_word32_t;
 
+#define LPC_SCALING  1.
+
 #endif
 
 #ifndef RELEASE
index 97f9b14..dc474bc 100644 (file)
@@ -243,7 +243,7 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
 
    /* Levinson-Durbin */
    _spx_lpc(st->lpc+1, st->autocorr, st->lpcSize);
-   st->lpc[0]=8192.;
+   st->lpc[0]=LPC_SCALING;
 
    /* LPC to LSPs (x-domain) transform */
    roots=lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 15, 0.2, stack);
@@ -668,6 +668,8 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
          st->pi_gain[sub] += tmp*st->interp_qlpc[i];
          tmp = -tmp;
       }
+      st->pi_gain[sub] /= LPC_SCALING;
+
 
       /* Compute bandwidth-expanded (unquantized) LPCs for perceptual weighting */
       bw_lpc(st->gamma1, st->interp_lpc, st->bw_lpc1, st->lpcSize);
@@ -1423,6 +1425,7 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
          st->pi_gain[sub] += tmp*st->interp_qlpc[i];
          tmp = -tmp;
       }
+      st->pi_gain[sub] /= LPC_SCALING;
 
       /* Reset excitation */
       for (i=0;i<st->subframeSize;i++)
index 1acd45e..b03bd48 100644 (file)
@@ -290,7 +290,7 @@ int sb_encode(void *state, float *in, SpeexBits *bits)
 
    /* Levinson-Durbin */
    _spx_lpc(st->lpc+1, st->autocorr, st->lpcSize);
-   st->lpc[0]=1;
+   st->lpc[0]=LPC_SCALING;
 
    /* LPC to LSPs (x-domain) transform */
    roots=lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 15, 0.2, stack);
@@ -494,6 +494,9 @@ int sb_encode(void *state, float *in, SpeexBits *bits)
          tmp = -tmp;
          st->pi_gain[sub]+=st->interp_qlpc[i];
       }
+      rh /= LPC_SCALING;
+      st->pi_gain[sub] /= LPC_SCALING;
+
       rl = low_pi_gain[sub];
       rl=1/(fabs(rl)+.01);
       rh=1/(fabs(rh)+.01);
@@ -972,6 +975,9 @@ int sb_decode(void *state, SpeexBits *bits, float *out)
             tmp = -tmp;
             st->pi_gain[sub]+=st->interp_qlpc[i];
          }
+         rh /= LPC_SCALING;
+         st->pi_gain[sub] /= LPC_SCALING;
+
          rl = low_pi_gain[sub];
          rl=1/(fabs(rl)+.01);
          rh=1/(fabs(rh)+.01);
index 31fe77c..c5d13a1 100644 (file)
@@ -30,7 +30,7 @@ int main(int argc, char **argv)
    speex_encoder_ctl(st, SPEEX_SET_VBR, &tmp);
    tmp=10;
    speex_encoder_ctl(st, SPEEX_SET_QUALITY, &tmp);
-   tmp=3;
+   tmp=5;
    speex_encoder_ctl(st, SPEEX_SET_COMPLEXITY, &tmp);
    tmp=3;
    speex_encoder_ctl(st, SPEEX_SET_HIGH_MODE, &tmp);
@@ -63,7 +63,7 @@ int main(int argc, char **argv)
       speex_encode(st, input, &bits);
       nbBits = speex_bits_write(&bits, cbits, 200);
       bitCount+=bits.nbBits;
-      printf ("Encoding frame in %d bits\n", nbBits*8);
+      /*printf ("Encoding frame in %d bits\n", nbBits*8);*/
       if (argc==4)
          fwrite(cbits, 1, nbBits, fbits);
       {
@@ -74,7 +74,7 @@ int main(int argc, char **argv)
             esig += bak2[i]*bak2[i];
          }
          snr = 10*log10((esig+1)/(enoise+1));
-         printf ("real SNR = %f\n", snr);
+         /*printf ("real SNR = %f\n", snr);*/
       }
       speex_bits_rewind(&bits);