fixed-point: LPC and LSP types changed to word16
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:31:40 +0000 (04:31 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:31:40 +0000 (04:31 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5414 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/filters.c
libspeex/lpc.c
libspeex/lsp.c
libspeex/misc.h
libspeex/nb_celp.c

index eb1e5ed..4951c96 100644 (file)
@@ -61,8 +61,8 @@ void filter_mem2(float *x, spx_coef_t *num, spx_coef_t *den, float *y, int N, in
    
    for (i=0;i<ord+1;i++)
    {
-      nums[i] = (int)floor(.5+8192*num[i]);
-      dens[i] = (int)floor(.5+8192*den[i]);
+      nums[i] = (int)floor(.5+num[i]);
+      dens[i] = (int)floor(.5+den[i]);
    }
 
    for (i=0;i<N;i++)
@@ -88,12 +88,12 @@ void iir_mem2(float *x, spx_coef_t *den, float *y, int N, int ord, spx_mem_t *me
    
    for (i=0;i<11;i++)
    {
-      if (fabs(den[i])>3.999)
+      if (fabs(den[i])>3.999*8192)
       {
          speex_warning_int("tata", den[i]*100);
-         den[i]=3.999;
+         den[i]=3.999*8192;
       }
-      dens[i] = (int)floor(.5+8192*den[i]);
+      dens[i] = (int)floor(.5+den[i]);
    }
 
    for (i=0;i<N;i++)
@@ -120,7 +120,7 @@ void fir_mem2(float *x, spx_coef_t *num, float *y, int N, int ord, spx_mem_t *me
    
    for (i=0;i<11;i++)
    {
-      nums[i] = (int)floor(.5+8192*num[i]);
+      nums[i] = (int)floor(.5+num[i]);
    }
 
    for (i=0;i<N;i++)
index 88c4ccb..0b8e2c0 100644 (file)
@@ -107,7 +107,7 @@ int          p
       error -= MULT16_16_Q13(r,MULT16_16_Q13(error,r));
    }
    for (i = 0; i < p; i++)
-      lpc[i] = lpcq[i]/8192.;
+      lpc[i] = lpcq[i];
    return error;
 }
 
index ccb8bcd..3785a72 100644 (file)
@@ -67,8 +67,6 @@ Modified by Jean-Marc Valin
 
 \*---------------------------------------------------------------------------*/
 
-#undef FIXED_POINT
-
 #ifdef FIXED_POINT
 
 static float cheb_poly_eva(float *coef,float x,int m,char *stack)
@@ -199,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]-*p++;
-       *qx++ = a[i]-a[lpcrdr+1-i]+*q++;
+       *px++ = (a[i]+a[lpcrdr+1-i])/8192.-*p++;
+       *qx++ = (a[i]-a[lpcrdr+1-i])/8192.+*q++;
     }
     px = P;
     qx = Q;
@@ -342,23 +340,22 @@ void lsp_to_lpc(float *freq,spx_coef_t *ak,int lpcrdr, char *stack)
            n4 = n3 + 1;
            xout1 = xin1 - MULT16_32_Q14(freqn[i2],*n1) + *n2;
             xout2 = xin2 - MULT16_32_Q14(freqn[i2+1],*n3) + *n4;
-           *n2 = floor(.5+*n1);
-           *n4 = floor(.5+*n3);
-           *n1 = floor(.5+xin1);
-           *n3 = floor(.5+xin2);
+           *n2 = *n1;
+           *n4 = *n3;
+           *n1 = xin1;
+           *n3 = xin2;
            xin1 = xout1;
            xin2 = xout2;
        }
        xout1 = xin1 + *(n4+1);
        xout2 = xin2 - *(n4+2);
-       ak[j] = ((128+xout1 + xout2)>>8)/8192.;
+       ak[j] = ((128+xout1 + xout2)>>8);
        *(n4+1) = xin1;
        *(n4+2) = xin2;
 
        xin1 = 0.0;
        xin2 = 0.0;
     }
-
 }
 #else
 
index 420dfe2..796eb3e 100644 (file)
 
 #ifdef FIXED_POINT
 
-typedef int spx_mem_t;
-typedef float spx_coef_t;
-typedef float spx_sig_t;
-typedef short spx_word16_t;
-typedef int spx_word32_t;
+typedef short        spx_word16_t;
+typedef int          spx_word32_t;
+typedef spx_word32_t spx_mem_t;
+typedef spx_word16_t spx_coef_t;
+typedef float   spx_sig_t;
 
 #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))
index f1fd3bf..97f9b14 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]=1;
+   st->lpc[0]=8192.;
 
    /* LPC to LSPs (x-domain) transform */
    roots=lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 15, 0.2, stack);