fixed-point: more conversion to spx_sig_t
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:42:59 +0000 (04:42 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:42:59 +0000 (04:42 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5423 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/filters.c
libspeex/ltp.c
libspeex/mdf.c
libspeex/misc.h
libspeex/nb_celp.c
libspeex/preprocess.c
libspeex/sb_celp.c
libspeex/smallft.c

index e5d1c8d..13dc96b 100644 (file)
@@ -50,8 +50,6 @@ void bw_lpc(float gamma, spx_coef_t *lpc_in, spx_coef_t *lpc_out, int order)
 #ifdef FIXED_POINT
 
 
-int fixed_point_on = 1;
-
 #define MUL_16_32_R15(a,bh,bl) ((a)*(bh) + ((a)*(bl)>>15))
 
 
@@ -60,14 +58,10 @@ void filter_mem2(spx_sig_t *x, spx_coef_t *num, spx_coef_t *den, spx_sig_t *y, i
    int i,j;
    int xi,yi;
 
-   float local_scale = 1;
-   if (!fixed_point_on)
-      local_scale = 16384.;
-
    for (i=0;i<N;i++)
    {
       int xh,xl,yh,yl;
-      xi=floor(.5+local_scale*x[i]);
+      xi=floor(.5+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++)
@@ -75,7 +69,7 @@ void filter_mem2(spx_sig_t *x, spx_coef_t *num, spx_coef_t *den, spx_sig_t *y, i
          mem[j] = mem[j+1] +  MUL_16_32_R15(num[j+1],xh,xl) - MUL_16_32_R15(den[j+1],yh,yl);
       }
       mem[ord-1] = MUL_16_32_R15(num[ord],xh,xl) - MUL_16_32_R15(den[ord],yh,yl);
-      y[i] = yi*(1.f/local_scale);
+      y[i] = yi;
    }
 }
 
@@ -84,14 +78,10 @@ void iir_mem2(spx_sig_t *x, spx_coef_t *den, spx_sig_t *y, int N, int ord, spx_m
    int i,j;
    int xi,yi;
 
-   float local_scale = 1;
-   if (!fixed_point_on)
-      local_scale = 16384.;
-   
    for (i=0;i<N;i++)
    {
       int yh,yl;
-      xi=floor(.5+local_scale*x[i]);
+      xi=floor(.5+x[i]);
       yi = xi + (mem[0]<<2);
       yh = yi>>15; yl=yi&0x00007fff; 
       for (j=0;j<ord-1;j++)
@@ -99,7 +89,7 @@ void iir_mem2(spx_sig_t *x, spx_coef_t *den, spx_sig_t *y, int N, int ord, spx_m
          mem[j] = mem[j+1] - MUL_16_32_R15(den[j+1],yh,yl);
       }
       mem[ord-1] = - MUL_16_32_R15(den[ord],yh,yl);
-      y[i] = yi*(1.f/local_scale);
+      y[i] = yi;
    }
 }
 
@@ -109,14 +99,10 @@ void fir_mem2(spx_sig_t *x, spx_coef_t *num, spx_sig_t *y, int N, int ord, spx_m
    int i,j;
    int xi,yi;
 
-   float local_scale = 1;
-   if (!fixed_point_on)
-      local_scale = 16384.;
-
    for (i=0;i<N;i++)
    {
       int xh,xl;
-      xi=floor(.5+local_scale*x[i]);
+      xi=floor(.5+x[i]);
       yi = xi + (mem[0]<<2);
       xh = xi>>15; xl=xi&0x00007fff;
       for (j=0;j<ord-1;j++)
@@ -124,7 +110,7 @@ void fir_mem2(spx_sig_t *x, spx_coef_t *num, spx_sig_t *y, int N, int ord, spx_m
          mem[j] = mem[j+1] +  MUL_16_32_R15(num[j+1],xh,xl);
       }
       mem[ord-1] = MUL_16_32_R15(num[ord],xh,xl);
-      y[i] = yi*(1.f/local_scale);
+      y[i] = yi;
    }
 
 }
index b429630..6b53048 100644 (file)
@@ -36,6 +36,8 @@
 #include "filters.h"
 #include "speex_bits.h"
 
+#include <stdio.h>
+
 #ifdef _USE_SSE
 #include "ltp_sse.h"
 #else
@@ -408,7 +410,6 @@ int cdbk_offset
    if (count_lost && pitch > subframe_offset)
    {
       float gain_sum;
-
       if (1) {
         float tmp = count_lost < 4 ? last_pitch_gain : 0.4 * last_pitch_gain;
          if (tmp>.95)
@@ -448,9 +449,9 @@ int cdbk_offset
    gain_val[2]=gain[2];
 
    {
-      float *e[3];
-      float *tmp2;
-      tmp2=PUSH(stack, 3*nsf, float);
+      spx_sig_t *e[3];
+      spx_sig_t *tmp2;
+      tmp2=PUSH(stack, 3*nsf, spx_sig_t);
       e[0]=tmp2;
       e[1]=tmp2+nsf;
       e[2]=tmp2+2*nsf;
index 518e2b7..d43cead 100644 (file)
@@ -55,7 +55,7 @@ SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length)
    st->cancel_count=0;
    st->adapt_rate = .01;
 
-   st->fft_lookup = speex_alloc(sizeof(struct drft_lookup));
+   st->fft_lookup = (struct drft_lookup*)speex_alloc(sizeof(struct drft_lookup));
    drft_init(st->fft_lookup, N);
    
    st->x = (float*)speex_alloc(N*sizeof(float));
index c642a94..40e1410 100644 (file)
 
 #ifdef FIXED_POINT
 
-extern int fixed_point_on;
-#define FIXED_SIGNAL fixed_point_on=1;
-#define FLOAT_SIGNAL fixed_point_on=0;
-
 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;
+typedef long long   spx_sig_t;
 
 #define LPC_SCALING  8192.
 #define SIG_SCALING  16384.
@@ -74,9 +70,6 @@ typedef float   spx_sig_t;
 
 #else
 
-#define FIXED_SIGNAL
-#define FLOAT_SIGNAL
-
 typedef float spx_mem_t;
 typedef float spx_coef_t;
 typedef float spx_sig_t;
index a1f159c..5a13688 100644 (file)
@@ -44,6 +44,8 @@
 #include "misc.h"
 #include "speex_callbacks.h"
 
+#include <stdio.h>
+
 #ifdef SLOW_TRIG
 #include "math_approx.h"
 #define cos speex_cos
@@ -123,9 +125,9 @@ void *nb_encoder_init(SpeexMode *m)
       part2=(st->frameSize>>1) + (st->subframeSize>>1);
       st->window = PUSH(st->stack, st->windowSize, spx_word16_t);
       for (i=0;i<part1;i++)
-         st->window[i]=SIG_SCALING*(.54-.46*cos(M_PI*i/part1));
+         st->window[i]=(spx_word16_t)(SIG_SCALING*(.54-.46*cos(M_PI*i/part1)));
       for (i=0;i<part2;i++)
-         st->window[part1+i]=SIG_SCALING*(.54+.46*cos(M_PI*i/part2));
+         st->window[part1+i]=(spx_word16_t)(SIG_SCALING*(.54+.46*cos(M_PI*i/part2)));
    }
    /* Create the window for autocorrelation (lag-windowing) */
    st->lagWindow = PUSH(st->stack, st->lpcSize+1, float);
@@ -213,14 +215,14 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
    stack=st->stack;
 
    /* Copy new data in input buffer */
-   speex_move(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
+   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];
 
    /* Move signals 1 frame towards the past */
-   speex_move(st->exc2Buf, st->exc2Buf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
-   speex_move(st->excBuf, st->excBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
-   speex_move(st->swBuf, st->swBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
+   speex_move(st->exc2Buf, st->exc2Buf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
+   speex_move(st->excBuf, st->excBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
+   speex_move(st->swBuf, st->swBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
 
 
    {
@@ -233,15 +235,15 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
       /* Compute auto-correlation */
       _spx_autocorr(w_sig, st->autocorr, st->lpcSize+1, st->windowSize);
    }
-   st->autocorr[0] *= st->lpc_floor; /* Noise floor in auto-correlation domain */
+   st->autocorr[0] = (spx_word16_t) (st->autocorr[0]*st->lpc_floor); /* Noise floor in auto-correlation domain */
 
    /* Lag windowing: equivalent to filtering in the power-spectrum domain */
    for (i=0;i<st->lpcSize+1;i++)
-      st->autocorr[i] *= st->lagWindow[i];
+      st->autocorr[i] = (spx_word16_t) (st->autocorr[i]*st->lagWindow[i]);
 
    /* Levinson-Durbin */
    _spx_lpc(st->lpc+1, st->autocorr, st->lpcSize);
-   st->lpc[0]=LPC_SCALING;
+   st->lpc[0]=(spx_coef_t)LPC_SCALING;
 
    /* LPC to LSPs (x-domain) transform */
    roots=lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 15, 0.2, stack);
@@ -1018,8 +1020,8 @@ static void nb_decode_lost(DecState *st, float *out, char *stack)
    pitch_gain *= fact;
 
    /* Shift all buffers by one frame */
-   speex_move(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
-   speex_move(st->excBuf, st->excBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
+   speex_move(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
+   speex_move(st->excBuf, st->excBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
 
    awk1=PUSH(stack, (st->lpcSize+1), spx_coef_t);
    awk2=PUSH(stack, (st->lpcSize+1), spx_coef_t);
@@ -1231,8 +1233,8 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
    }
 
    /* Shift all buffers by one frame */
-   speex_move(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
-   speex_move(st->excBuf, st->excBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
+   speex_move(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
+   speex_move(st->excBuf, st->excBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(spx_sig_t));
 
    /* If null mode (no transmission), just set a couple things to zero*/
    if (st->submodes[st->submodeID] == NULL)
@@ -1278,7 +1280,7 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
          lsp_dist += fabs(st->old_qlsp[i] - st->qlsp[i]);
       fact = .6*exp(-.2*lsp_dist);
       for (i=0;i<2*st->lpcSize;i++)
-         st->mem_sp[i] *= fact;
+         st->mem_sp[i] = (spx_mem_t)(st->mem_sp[i]*fact);
    }
 
 
@@ -1465,6 +1467,7 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
              SUBMODE(ltp_unquant)(exc, pit_min, pit_max, ol_pitch_coef, SUBMODE(ltp_params), 
                                   st->subframeSize, &pitch, &pitch_gain[0], bits, stack, 
                                   st->count_lost, offset, st->last_pitch_gain, 0);
+
 #ifdef EPIC_48K
          }
 #endif
@@ -1571,6 +1574,7 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
          } else {
             for (i=0;i<st->subframeSize;i++)
                exc[i]+=innov[i];
+            /*print_vec(exc, 40, "innov");*/
          }
          /* Decode second codebook (only for some modes) */
          if (SUBMODE(double_codebook))
@@ -1777,7 +1781,7 @@ int nb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_EXC:
       {
          int i;
-         float *e = (float*)ptr;
+         spx_sig_t *e = (spx_sig_t*)ptr;
          for (i=0;i<st->frameSize;i++)
             e[i]=st->exc[i];
       }
@@ -1785,7 +1789,7 @@ int nb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_INNOV:
       {
          int i;
-         float *e = (float*)ptr;
+         spx_sig_t *e = (spx_sig_t*)ptr;
          for (i=0;i<st->frameSize;i++)
             e[i]=st->innov[i];
       }
@@ -1877,7 +1881,7 @@ int nb_decoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_EXC:
       {
          int i;
-         float *e = (float*)ptr;
+         spx_sig_t *e = (spx_sig_t*)ptr;
          for (i=0;i<st->frameSize;i++)
             e[i]=st->exc[i];
       }
@@ -1885,7 +1889,7 @@ int nb_decoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_INNOV:
       {
          int i;
-         float *e = (float*)ptr;
+         spx_sig_t *e = (spx_sig_t*)ptr;
          for (i=0;i<st->frameSize;i++)
             e[i]=st->innov[i];
       }
index 6de1531..c52ead2 100644 (file)
@@ -216,7 +216,7 @@ SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_r
    st->loudness2 = 6000;
    st->nb_loudness_adapt = 0;
 
-   st->fft_lookup = speex_alloc(sizeof(struct drft_lookup));
+   st->fft_lookup = (struct drft_lookup*)speex_alloc(sizeof(struct drft_lookup));
    drft_init(st->fft_lookup,2*N);
 
    st->nb_adapt=0;
index 393e646..1130940 100644 (file)
@@ -183,9 +183,9 @@ void *sb_encoder_init(SpeexMode *m)
       part2 = st->subframeSize*5/2;
       st->window = PUSH(st->stack, st->windowSize, spx_word16_t);
       for (i=0;i<part1;i++)
-         st->window[i]=SIG_SCALING*(.54-.46*cos(M_PI*i/part1));
+         st->window[i]=(spx_word16_t)(SIG_SCALING*(.54-.46*cos(M_PI*i/part1)));
       for (i=0;i<part2;i++)
-         st->window[part1+i]=SIG_SCALING*(.54+.46*cos(M_PI*i/part2));
+         st->window[part1+i]=(spx_word16_t)(SIG_SCALING*(.54+.46*cos(M_PI*i/part2)));
    }
 
    st->lagWindow = PUSH(st->stack, st->lpcSize+1, float);
@@ -276,7 +276,7 @@ int sb_encode(void *state, float *in, SpeexBits *bits)
    for (i=0;i<st->frame_size;i++)
       st->high[st->windowSize-st->frame_size+i]=st->x1d[i];
 
-   speex_move(st->excBuf, st->excBuf+st->frame_size, (st->bufSize-st->frame_size)*sizeof(float));
+   speex_move(st->excBuf, st->excBuf+st->frame_size, (st->bufSize-st->frame_size)*sizeof(spx_sig_t));
 
 
    low_pi_gain = PUSH(stack, st->nbSubframes, float);
@@ -304,14 +304,14 @@ int sb_encode(void *state, float *in, SpeexBits *bits)
       _spx_autocorr(w_sig, st->autocorr, st->lpcSize+1, st->windowSize);
    }
 
-   st->autocorr[0] *= st->lpc_floor; /* Noise floor in auto-correlation domain */
+   st->autocorr[0] = (spx_word16_t)(st->autocorr[0]*st->lpc_floor); /* Noise floor in auto-correlation domain */
    /* Lag windowing: equivalent to filtering in the power-spectrum domain */
    for (i=0;i<st->lpcSize+1;i++)
-      st->autocorr[i] *= st->lagWindow[i];
+      st->autocorr[i] = (spx_word16_t)(st->autocorr[i]*st->lagWindow[i]);
 
    /* Levinson-Durbin */
    _spx_lpc(st->lpc+1, st->autocorr, st->lpcSize);
-   st->lpc[0]=LPC_SCALING;
+   st->lpc[0] = (spx_coef_t)LPC_SCALING;
 
    /* LPC to LSPs (x-domain) transform */
    roots=lpc_to_lsp (st->lpc, st->lpcSize, st->lsp, 15, 0.2, stack);
@@ -1274,7 +1274,7 @@ int sb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_EXC:
       {
          int i;
-         float *e = (float*)ptr;
+         spx_sig_t *e = (spx_sig_t*)ptr;
          for (i=0;i<st->full_frame_size;i++)
             e[i]=0;
          for (i=0;i<st->frame_size;i++)
@@ -1284,7 +1284,7 @@ int sb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_INNOV:
       {
          int i;
-         float *e = (float*)ptr;
+         spx_sig_t *e = (spx_sig_t*)ptr;
          for (i=0;i<st->full_frame_size;i++)
             e[i]=0;
          for (i=0;i<st->frame_size;i++)
@@ -1388,7 +1388,7 @@ int sb_decoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_EXC:
       {
          int i;
-         float *e = (float*)ptr;
+         spx_sig_t *e = (spx_sig_t*)ptr;
          for (i=0;i<st->full_frame_size;i++)
             e[i]=0;
          for (i=0;i<st->frame_size;i++)
@@ -1398,7 +1398,7 @@ int sb_decoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_INNOV:
       {
          int i;
-         float *e = (float*)ptr;
+         spx_sig_t *e = (spx_sig_t*)ptr;
          for (i=0;i<st->full_frame_size;i++)
             e[i]=0;
          for (i=0;i<st->frame_size;i++)
index aed6b3c..16009be 100644 (file)
@@ -11,7 +11,7 @@
  ********************************************************************
 
  function: *unnormalized* fft transform
- last mod: $Id: smallft.c,v 1.3 2003/09/18 03:58:58 jm Exp $
+ last mod: $Id: smallft.c,v 1.4 2003/10/08 04:42:59 jm Exp $
 
  ********************************************************************/
 
@@ -1239,8 +1239,8 @@ void drft_backward(struct drft_lookup *l,float *data){
 void drft_init(struct drft_lookup *l,int n)
 {
   l->n=n;
-  l->trigcache=speex_alloc(3*n*sizeof(*l->trigcache));
-  l->splitcache=speex_alloc(32*sizeof(*l->splitcache));
+  l->trigcache=(float*)speex_alloc(3*n*sizeof(*l->trigcache));
+  l->splitcache=(int*)speex_alloc(32*sizeof(*l->splitcache));
   fdrffti(n, l->trigcache, l->splitcache);
 }