fixed-point: removed pre-emphasis, more cleanup
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:35:02 +0000 (04:35 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:35:02 +0000 (04:35 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5417 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/cb_search.c
libspeex/misc.h
libspeex/modes.c
libspeex/modes.h
libspeex/nb_celp.c
libspeex/nb_celp.h
libspeex/preprocess.c
libspeex/stereo.c
src/speexdec.c

index 04e775b..769c52a 100644 (file)
@@ -136,7 +136,8 @@ int   complexity
       {
          res[j]=0;
          for (k=0;k<=j;k++)
-            res[j] += 0.03125*shape[k]*r[j-k];
+            res[j] += shape[k]*r[j-k];
+         res[j] *= 0.03125;
       }
       
       /* Compute codeword energy */
index 1dec619..02dce18 100644 (file)
 #define MISC_H
 
 #ifndef VERSION
-#define VERSION "speex-1.0"
+#define VERSION "speex-1.1"
 #endif
 
-/*Disable some warnings on VC++*/
-#ifdef _MSC_VER
-#pragma warning(disable : 4244)
-#pragma warning(disable : 4305)
-#endif
-
-
 #ifdef FIXED_POINT
 
 typedef short        spx_word16_t;
index 5b65520..354e02a 100644 (file)
@@ -352,7 +352,6 @@ static SpeexNBMode nb_mode = {
    0.6,    /*gamma2*/
    .012,   /*lag_factor*/
    1.0002, /*lpc_floor*/
-   0.0,    /*preemph*/
 #ifdef EPIC_48K
    0,
 #endif
@@ -481,7 +480,6 @@ static SpeexSBMode sb_wb_mode = {
    0.6,    /*gamma2*/
    .001,   /*lag_factor*/
    1.0001, /*lpc_floor*/
-   0.0,    /*preemph*/
    0.9,
    {NULL, &wb_submode1, &wb_submode2, &wb_submode3, &wb_submode4, NULL, NULL, NULL},
    3,
@@ -525,7 +523,6 @@ static SpeexSBMode sb_uwb_mode = {
    0.6,    /*gamma2*/
    .002,   /*lag_factor*/
    1.0001, /*lpc_floor*/
-   0.0,    /*preemph*/
    0.7,
    {NULL, &wb_submode1, NULL, NULL, NULL, NULL, NULL, NULL},
    1,
@@ -611,7 +608,6 @@ static SpeexNBMode nb_48k_mode = {
    0.6,    /*gamma2*/
    .01,   /*lag_factor*/
    1.0003, /*lpc_floor*/
-   0.0,    /*preemph*/
    1,
    {NULL, NULL, &nb_48k_submode, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
    2,
index b4ac319..20baff8 100644 (file)
@@ -112,7 +112,6 @@ typedef struct SpeexNBMode {
    float   gamma2;         /**< Perceptual filter parameter #2 */
    float   lag_factor;     /**< Lag-windowing parameter */
    float   lpc_floor;      /**< Noise floor for LPC analysis */
-   float   preemph;        /**< Pre-emphasis */
 
 #ifdef EPIC_48K
    int     lbr48k;         /**< 1 for the special 4.8 kbps mode */
@@ -135,7 +134,6 @@ typedef struct SpeexSBMode {
    float   gamma2;        /**< Perceptual filter parameter #1 */
    float   lag_factor;    /**< Lag-windowing parameter */
    float   lpc_floor;     /**< Noise floor for LPC analysis */
-   float   preemph;       /**< Pre-emphasis */
    float   folding_gain;
 
    SpeexSubmode *submodes[SB_SUBMODES]; /**< Sub-mode data for the mode */
index dc474bc..bd07767 100644 (file)
@@ -59,9 +59,9 @@
 
 #define SUBMODE(x) st->submodes[st->submodeID]->x
 
-float exc_gain_quant_scal3[8]={-2.794750, -1.810660, -1.169850, -0.848119, -0.587190, -0.329818, -0.063266, 0.282826};
+float exc_gain_quant_scal3[8]={-2.794750f, -1.810660f, -1.169850f, -0.848119f, -0.587190f, -0.329818f, -0.063266f, 0.282826f};
 
-float exc_gain_quant_scal1[2]={-0.35, 0.05};
+float exc_gain_quant_scal1[2]={-0.35f, 0.05f};
 
 #define sqr(x) ((x)*(x))
 
@@ -92,12 +92,9 @@ void *nb_encoder_init(SpeexMode *m)
    st->max_pitch=mode->pitchEnd;
    st->lag_factor=mode->lag_factor;
    st->lpc_floor = mode->lpc_floor;
-   st->preemph = mode->preemph;
   
    st->submodes=mode->submodes;
    st->submodeID=st->submodeSelect=mode->defaultSubmode;
-   st->pre_mem=0;
-   st->pre_mem2=0;
    st->bounded_pitch = 1;
 
    st->encode_submode = 1;
@@ -217,10 +214,8 @@ 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(float));
-   st->inBuf[st->bufSize-st->frameSize] = in[0] - st->preemph*st->pre_mem;
-   for (i=1;i<st->frameSize;i++)
-      st->inBuf[st->bufSize-st->frameSize+i] = in[i] - st->preemph*in[i-1];
-   st->pre_mem = in[st->frameSize-1];
+   for (i=0;i<st->frameSize;i++)
+      st->inBuf[st->bufSize-st->frameSize+i] = in[i];
 
    /* Move signals 1 frame towards the past */
    speex_move(st->exc2Buf, st->exc2Buf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
@@ -504,10 +499,8 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
       /* Final signal synthesis from excitation */
       iir_mem2(st->exc, st->interp_qlpc, st->frame, st->frameSize, st->lpcSize, st->mem_sp);
 
-      in[0] = st->frame[0] + st->preemph*st->pre_mem2;
-      for (i=1;i<st->frameSize;i++)
-         in[i]=st->frame[i] + st->preemph*in[i-1];
-      st->pre_mem2=in[st->frameSize-1];
+      for (i=0;i<st->frameSize;i++)
+         in[i]=st->frame[i];
 
       return 0;
 
@@ -678,8 +671,7 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
       else
       {
          st->bw_lpc2[0]=1;
-         st->bw_lpc2[1]=-st->preemph;
-         for (i=2;i<=st->lpcSize;i++)
+         for (i=1;i<=st->lpcSize;i++)
             st->bw_lpc2[i]=0;
       }
 
@@ -909,10 +901,8 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
    }
 
    /* Replace input by synthesized speech */
-   in[0] = st->frame[0] + st->preemph*st->pre_mem2;
-   for (i=1;i<st->frameSize;i++)
-     in[i]=st->frame[i] + st->preemph*in[i-1];
-   st->pre_mem2=in[st->frameSize-1];
+   for (i=0;i<st->frameSize;i++)
+     in[i]=st->frame[i];
 
    if (SUBMODE(innovation_quant) == noise_codebook_quant || st->submodeID==0)
       st->bounded_pitch = 1;
@@ -952,12 +942,10 @@ void *nb_decoder_init(SpeexMode *m)
    st->gamma2=mode->gamma2;
    st->min_pitch=mode->pitchStart;
    st->max_pitch=mode->pitchEnd;
-   st->preemph = mode->preemph;
 
    st->submodes=mode->submodes;
    st->submodeID=mode->defaultSubmode;
 
-   st->pre_mem=0;
    st->lpc_enh_enabled=0;
 
 
@@ -1110,10 +1098,8 @@ static void nb_decode_lost(DecState *st, float *out, char *stack)
       }      
    }
 
-   out[0] = st->frame[0] + st->preemph*st->pre_mem;
-   for (i=1;i<st->frameSize;i++)
-      out[i]=st->frame[i] + st->preemph*out[i-1];
-   st->pre_mem=out[st->frameSize-1];
+   for (i=0;i<st->frameSize;i++)
+      out[i]=st->frame[i];
    
    st->first = 0;
    st->count_lost++;
@@ -1272,10 +1258,8 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
       /* Final signal synthesis from excitation */
       iir_mem2(st->exc, lpc, st->frame, st->frameSize, st->lpcSize, st->mem_sp);
 
-      out[0] = st->frame[0] + st->preemph*st->pre_mem;
-      for (i=1;i<st->frameSize;i++)
-         out[i]=st->frame[i] + st->preemph*out[i-1];
-      st->pre_mem=out[st->frameSize-1];
+      for (i=0;i<st->frameSize;i++)
+         out[i]=st->frame[i];
       st->count_lost=0;
       return 0;
    }
@@ -1624,11 +1608,8 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
    }
    
    /*Copy output signal*/
-   out[0] = st->frame[0] + st->preemph*st->pre_mem;
-   for (i=1;i<st->frameSize;i++)
-     out[i]=st->frame[i] + st->preemph*out[i-1];
-   st->pre_mem=out[st->frameSize-1];
-
+   for (i=0;i<st->frameSize;i++)
+     out[i]=st->frame[i];
 
    /* Store the LSPs for interpolation in the next frame */
    for (i=0;i<st->lpcSize;i++)
index bb50f66..d684076 100644 (file)
@@ -69,9 +69,6 @@ typedef struct EncState {
    float  gamma2;         /**< Perceptual filter: A(z/gamma2) */
    float  lag_factor;     /**< Lag windowing Gaussian width */
    float  lpc_floor;      /**< Noise floor multiplier for A[0] in LPC analysis*/
-   float  preemph;        /**< Pre-emphasis: P(z) = 1 - a*z^-1*/
-   float  pre_mem;        /**< 1-element memory for pre-emphasis */
-   float  pre_mem2;       /**< 1-element memory for pre-emphasis */
    char  *stack;          /**< Pseudo-stack allocation for temporary memory */
    float *inBuf;          /**< Input buffer (original signal) */
    float *frame;          /**< Start of original frame */
@@ -146,8 +143,6 @@ typedef struct DecState {
 
    float  gamma1;         /**< Perceptual filter: A(z/gamma1) */
    float  gamma2;         /**< Perceptual filter: A(z/gamma2) */
-   float  preemph;        /**< Pre-emphasis: P(z) = 1 - a*z^-1*/
-   float  pre_mem;        /**< 1-element memory for pre-emphasis */
    char  *stack;          /**< Pseudo-stack allocation for temporary memory */
    float *inBuf;          /**< Input buffer (original signal) */
    float *frame;          /**< Start of original frame */
index 48387ba..6de1531 100644 (file)
@@ -582,7 +582,7 @@ static void update_noise_prob(SpeexPreprocessState *st)
          st->Smin[i] = st->Stmp[i] = st->S[i]+100;
    }
 
-   if (st->nb_preprocess%80==0)
+   if (st->nb_preprocess%100==0)
    {
       for (i=1;i<N-1;i++)
       {
@@ -670,14 +670,15 @@ int speex_preprocess(SpeexPreprocessState *st, float *x, float *echo)
       else
          min_gamma *= 4.;
 #else
-      min_gamma = .2*fabs(mean_prior - mean_post)*fabs(mean_prior - mean_post);
-      if (min_gamma>.6)
-         min_gamma = .6;
-      if (min_gamma<.01)
-         min_gamma = .01;
+      min_gamma = .1*fabs(mean_prior - mean_post)*fabs(mean_prior - mean_post);
+      if (min_gamma>.15)
+         min_gamma = .15;
+      if (min_gamma<.02)
+         min_gamma = .02;
 #endif
+      /*min_gamma = .08;*/
 
-      if (gamma<min_gamma)
+      /*if (gamma<min_gamma)*/
          gamma=min_gamma;
       
       for (i=1;i<N;i++)
index e033ce5..f77f426 100644 (file)
@@ -35,7 +35,7 @@
 #include <math.h>
 
 /*float e_ratio_quant[4] = {1, 1.26, 1.587, 2};*/
-static float e_ratio_quant[4] = {.25, .315, .397, .5};
+static float e_ratio_quant[4] = {.25f, .315f, .397f, .5f};
 
 void speex_encode_stereo(float *data, int frame_size, SpeexBits *bits)
 {
index 689ea41..1c1898c 100644 (file)
@@ -194,6 +194,7 @@ FILE *out_file_open(char *outFile, int rate, int *channels)
 #endif
       info.play.encoding = AUDIO_ENCODING_SLINEAR;
       info.play.precision = 16;
+      info.play.sample_rate = rate;
       info.play.channels = *channels;
       
       if (ioctl(audio_fd, AUDIO_SETINFO, &info) < 0)