Decoder seems to work
authorjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 13 Mar 2002 18:06:01 +0000 (18:06 +0000)
committerjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 13 Mar 2002 18:06:01 +0000 (18:06 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@3139 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/cb_search.c
libspeex/speex.c
libspeex/testenc.c

index e5e3885..47d9641 100644 (file)
@@ -280,7 +280,13 @@ FrameBits *bits
 #else 
       for (i=0;i<5;i++)
          gains[i]= sign[i]*gains[i]/max_gain/(Ee[ind[i]]+.001);
-#endif      
+#endif  
+
+   printf ("unquant gains: ");
+   for (i=0;i<5;i++)
+      printf ("%f ", gains[i]);
+   printf ("\n");
+    
       for (i=0;i<5;i++)
          for (j=0;j<8;j++)
             exc[8*i+j]+=gains[i]*codebook[ind[i]][j];
@@ -301,10 +307,12 @@ int   nsf,                      /* number of samples in subframe */
 FrameBits *bits
 )
 {
-   int i;
+   int i,j;
    int ind[5];
    float gains[5];
    float sign[5];
+   int max_gain_ind, vq_gain_ind;
+   float max_gain, Ee[5];
    for (i=0;i<5;i++)
    {
       ind[i] = frame_bits_unpack_unsigned(bits, 7);
@@ -312,6 +320,25 @@ FrameBits *bits
          sign[i]=-1;
       else
          sign[i]=1;
+      Ee[i]=.001;
+      for (j=0;j<8;j++)
+         Ee[i]+=codebook[ind[i]][j]*codebook[ind[i]][j];
    }
-   frame_bits_unpack_unsigned(bits, 11);
+   max_gain_ind = frame_bits_unpack_unsigned(bits, 3);
+   vq_gain_ind = frame_bits_unpack_unsigned(bits, 8);
+   printf ("unquant gains ind: %d %d\n", max_gain_ind, vq_gain_ind);
+
+   max_gain=exp(max_gain_ind+3.0);
+   for (i=0;i<5;i++)
+      gains[i] = sign[i]*exc_gains_table[vq_gain_ind][i]*max_gain/Ee[i];
+   
+   printf ("unquant gains: ");
+   for (i=0;i<5;i++)
+      printf ("%f ", gains[i]);
+   printf ("\n");
+
+   for (i=0;i<5;i++)
+      for (j=0;j<8;j++)
+         exc[8*i+j]+=gains[i]*codebook[ind[i]][j];
+   
 }
index b768773..817e516 100644 (file)
@@ -502,6 +502,10 @@ void decode(DecState *st, FrameBits *bits, float *out)
 {
    int i, sub;
 
+   memmove(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
+   memmove(st->excBuf, st->excBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
+
+
    lsp_unquant_nb(st->qlsp, st->lpcSize, bits);
    if (st->first)
    {
@@ -543,7 +547,7 @@ void decode(DecState *st, FrameBits *bits, float *out)
 
       /*Adaptive codebook contribution*/
       pitch_unquant_3tap(exc, st->min_pitch, st->max_pitch, st->subframeSize, bits, st->stack);
-
+       
       /*Fixed codebook contribution*/
       split_cb_unquant(exc, exc_table, st->subframeSize, bits);
 
index 3085621..e37c1b4 100644 (file)
@@ -59,7 +59,7 @@ int main(int argc, char **argv)
       }
       frame_bits_rewind(&bits);
       
-      decode(&dec, &bits, decbuf);
+      decode(&dec, &bits, input);
 
       /* Save the bits here */
       frame_bits_reset(&bits);