fixed-point: replace divisions by shifts...
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 05:01:18 +0000 (05:01 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 05:01:18 +0000 (05:01 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5433 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/filters.c
libspeex/misc.h
libspeex/nb_celp.c
libspeex/sb_celp.c
libspeex/smallft.c

index 99a17d5..208f845 100644 (file)
@@ -130,7 +130,7 @@ void filter_mem2(spx_sig_t *x, spx_coef_t *num, spx_coef_t *den, spx_sig_t *y, i
    for (i=0;i<N;i++)
    {
       int xh,xl,yh,yl;
-      xi=floor(.5+x[i]);
+      xi=x[i];
       yi = xi + (mem[0]<<2);
       xh = xi>>15; xl=xi&0x00007fff; yh = yi>>15; yl=yi&0x00007fff; 
       for (j=0;j<ord-1;j++)
@@ -150,7 +150,7 @@ void iir_mem2(spx_sig_t *x, spx_coef_t *den, spx_sig_t *y, int N, int ord, spx_m
    for (i=0;i<N;i++)
    {
       int yh,yl;
-      xi=floor(.5+x[i]);
+      xi=x[i];
       yi = xi + (mem[0]<<2);
       yh = yi>>15; yl=yi&0x00007fff; 
       for (j=0;j<ord-1;j++)
@@ -171,7 +171,7 @@ void fir_mem2(spx_sig_t *x, spx_coef_t *num, spx_sig_t *y, int N, int ord, spx_m
    for (i=0;i<N;i++)
    {
       int xh,xl;
-      xi=floor(.5+x[i]);
+      xi=x[i];
       yi = xi + (mem[0]<<2);
       xh = xi>>15; xl=xi&0x00007fff;
       for (j=0;j<ord-1;j++)
index b0b7b7a..9385f73 100644 (file)
@@ -45,10 +45,10 @@ 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 long long   spx_sig_t;
+typedef spx_word32_t spx_sig_t;
 
 #define LPC_SCALING  8192.
-#define SIG_SCALING  16384.
+#define SIG_SCALING  16384
 
 #define LPC_SHIFT    13
 #define SIG_SHIFT    14
index 923dfbd..7fef0cc 100644 (file)
@@ -217,7 +217,7 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
    /* Copy new data in input buffer */
    speex_move(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
    for (i=0;i<st->frameSize;i++)
-      st->inBuf[st->bufSize-st->frameSize+i] = SIG_SCALING*in[i];
+      st->inBuf[st->bufSize-st->frameSize+i] = SHL((int)in[i], SIG_SHIFT);
 
    /* Move signals 1 frame towards the past */
    speex_move(st->exc2Buf, st->exc2Buf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
@@ -904,7 +904,7 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
 
    /* Replace input by synthesized speech */
    for (i=0;i<st->frameSize;i++)
-     in[i]=st->frame[i]/SIG_SCALING;
+     in[i]=SHR(st->frame[i],SIG_SHIFT);
 
    if (SUBMODE(innovation_quant) == noise_codebook_quant || st->submodeID==0)
       st->bounded_pitch = 1;
@@ -1615,7 +1615,7 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
    
    /*Copy output signal*/
    for (i=0;i<st->frameSize;i++)
-     out[i]=st->frame[i]/SIG_SCALING;
+     out[i]=SHR(st->frame[i],SIG_SHIFT);
 
    /* Store the LSPs for interpolation in the next frame */
    for (i=0;i<st->lpcSize;i++)
index 27884d3..776609d 100644 (file)
@@ -1083,7 +1083,7 @@ int sb_decode(void *state, SpeexBits *bits, float *out)
    fir_mem_up(st->high, h1, st->y1, st->full_frame_size, QMF_ORDER, st->g1_mem, stack);
 
    for (i=0;i<st->full_frame_size;i++)
-      out[i]=2*(st->y0[i]-st->y1[i]) / SIG_SCALING;
+      out[i]=SHR((st->y0[i]-st->y1[i]), SIG_SHIFT-1);
 
    for (i=0;i<st->lpcSize;i++)
       st->old_qlsp[i] = st->qlsp[i];
index 58dc4b7..24f3086 100644 (file)
@@ -11,7 +11,7 @@
  ********************************************************************
 
  function: *unnormalized* fft transform
- last mod: $Id: smallft.c,v 1.13 2003/10/08 04:57:58 jm Exp $
+ last mod: $Id: smallft.c,v 1.14 2003/10/08 05:01:18 jm Exp $
 
  ********************************************************************/