Think both encoder and decoder for SB-CELP work...
authorjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 10 Apr 2002 05:46:37 +0000 (05:46 +0000)
committerjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 10 Apr 2002 05:46:37 +0000 (05:46 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@3237 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/cb_search.c
libspeex/sb_celp.c
libspeex/speex.c

index dcdf72a..05d28af 100644 (file)
@@ -352,12 +352,16 @@ float *stack
       gains[i]=scal_gains4[gain_id];
       gains[i] *= sign[i];
       gains[i] *= exc_energy;
-   }
 
+
+   }
    for (i=0;i<nb_subvect;i++)
       for (j=0;j<subvect_size;j++)
          exc[subvect_size*i+j]+=gains[i]*shape_cb[ind[i]*subvect_size+j];
-   
+   printf ("decode_exc:");
+   for (i=0;i<nsf;i++)
+      printf (" %f", exc[i]);
+   printf ("\n");
    POP(stack);
    POP(stack);
    POP(stack);
index 3dd5593..749c8b3 100644 (file)
@@ -721,13 +721,15 @@ void sb_decode(SBDecState *st, FrameBits *bits, float *out)
       }
 
       {
-         int k,N=4;
-         float el=0,eh=0,g;
+         int k,N=4,el=0;
          int *index;
          float *gains;
-         int of=k*st->subframeSize/N;
+         int of;
          gains = PUSH(st->stack, N);
          index = (int*) PUSH(st->stack, N);
+
+         for (i=0;i<st->subframeSize;i++)
+           el+=sqr(st->st_low.exc[offset+i]);
          
          for (k=0;k<N;k++)
             index[k] = frame_bits_unpack_unsigned(bits,6);
@@ -737,13 +739,14 @@ void sb_decode(SBDecState *st, FrameBits *bits, float *out)
             int sign, gain_ind;
             sign = frame_bits_unpack_unsigned(bits,1);
             gain_ind = frame_bits_unpack_unsigned(bits,3);
-            gains[k] = quant_high_gain2[gain_ind];
+            gains[k]=exp(quant_high_gain2[gain_ind])*(1+sqrt(el/st->subframeSize))/filter_ratio;
             if (sign)
                gains[k] =- gains[k];
          }
 
          for (k=0;k<N;k++)
          {
+            of=k*st->subframeSize/N;
             for (i=0;i<st->subframeSize/N;i++)
                exc[of+i]=gains[k]*stoc[index[k]+i];
          }
@@ -751,6 +754,9 @@ void sb_decode(SBDecState *st, FrameBits *bits, float *out)
          POP(st->stack);
          POP(st->stack);
       }
+
+      syn_filt_mem(exc, st->interp_qlpc, sp, st->subframeSize, st->lpcSize, st->mem_sp);
+
    }
 
    /* Up-sample coded low-band and high-band*/
index 7fe131b..229f17d 100644 (file)
@@ -433,6 +433,7 @@ void encode(EncState *st, float *in, FrameBits *bits)
 void decoder_init(DecState *st, SpeexMode *mode)
 {
    int i;
+   st->first=1;
    /* Codec parameters, should eventually have several "modes"*/
    st->frameSize = mode->frameSize;
    st->windowSize = mode->windowSize;
@@ -521,11 +522,21 @@ void decode(DecState *st, FrameBits *bits, float *out)
       for (i=0;i<st->lpcSize;i++)
          st->interp_qlsp[i] = (1-tmp)*st->old_qlsp[i] + tmp*st->qlsp[i];
 
+      printf ("decode lsp:");
+      for (i=0;i<st->lpcSize;i++)
+         printf (" %f", st->interp_qlsp[i]);
+      printf ("\n");
+
       /* Compute interpolated LPCs (unquantized) */
       for (i=0;i<st->lpcSize;i++)
          st->interp_qlsp[i] = cos(st->interp_qlsp[i]);
       lsp_to_lpc(st->interp_qlsp, st->interp_qlpc, st->lpcSize, st->stack);
 
+      printf ("decode lpc:");
+      for (i=0;i<=st->lpcSize;i++)
+         printf (" %f", st->interp_qlpc[i]);
+      printf ("\n");
+
       tmp=1;
       st->pi_gain[sub]=0;
       for (i=0;i<=st->lpcSize;i++)