fixed-point: some work on innovation quantization
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:45:26 +0000 (04:45 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:45:26 +0000 (04:45 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5425 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/cb_search.c
libspeex/misc.h
libspeex/smallft.c
libspeex/vq.c
libspeex/vq.h

index 138ad8d..98ef8ad 100644 (file)
@@ -35,6 +35,7 @@
 #include "stack_alloc.h"
 #include "vq.h"
 #include "misc.h"
+#include <stdio.h>
 
 void split_cb_search_shape_sign(
 spx_sig_t target[],                    /* target vector */
@@ -54,7 +55,7 @@ int   complexity
    int i,j,k,m,n,q;
    spx_sig_t *resp;
    spx_sig_t *t, *e, *r2;
-   float *E;
+   spx_word32_t *E;
    spx_sig_t *tmp;
    float *ndist, *odist;
    int *itmp;
@@ -88,7 +89,7 @@ int   complexity
    t = PUSH(stack, nsf, spx_sig_t);
    e = PUSH(stack, nsf, spx_sig_t);
    r2 = PUSH(stack, nsf, spx_sig_t);
-   E = PUSH(stack, shape_cb_size, float);
+   E = PUSH(stack, shape_cb_size, spx_word32_t);
    ind = PUSH(stack, nb_subvect, int);
 
    tmp = PUSH(stack, 2*N*nsf, spx_sig_t);
@@ -116,12 +117,15 @@ int   complexity
          nind[i][j]=oind[i][j]=-1;
    }
 
+   for (i=0;i<nsf;i++)
+      t[i]=SHR(target[i],6);
+
    for (j=0;j<N;j++)
       for (i=0;i<nsf;i++)
-         ot[j][i]=target[i];
+         ot[j][i]=t[i];
 
-   for (i=0;i<nsf;i++)
-      t[i]=target[i];
+   /*for (i=0;i<nsf;i++)
+     printf ("%d\n", (int)t[i]);*/
 
    /* Pre-compute codewords response and energy */
    for (i=0;i<shape_cb_size;i++)
@@ -139,6 +143,9 @@ int   complexity
          for (k=0;k<=j;k++)
             res[j] += shape[k]*r[j-k];
          res[j] *= 0.03125;
+         
+         res[j] = SHR(res[j],6);
+         /*printf ("%d\n", (int)res[j]);*/
       }
       
       /* Compute codeword energy */
@@ -225,7 +232,7 @@ int   complexity
                   g=sign*0.03125*shape_cb[rind*subvect_size+m];
                   q=subvect_size-m;
                   for (n=subvect_size*(i+1);n<nsf;n++,q++)
-                     t[n] -= g*r[q];
+                     t[n] -= SHR((long long)(g*r[q]),6);
                }
 
 
index 40e1410..47a8375 100644 (file)
@@ -54,6 +54,7 @@ typedef long long   spx_sig_t;
 #define SIG_SHIFT    14
 
 #define SHR(a,shift) ((a) >> (shift))
+#define SHL(a,shift) ((a) << (shift))
 
 #define MULT16_16(a,b)     (((signed int)(a))*(b))
 #define MULT16_32_Q14(a,b) (((a)*((b)>>14)) + ((a)*((signed int)((b)&0x00003fff))>>14))
@@ -83,6 +84,7 @@ typedef float spx_word32_t;
 #define SIG_SHIFT    0
 
 #define SHR(a,shift)       (a)
+#define SHL(a,shift)       (a)
 #define MULT16_16(a,b)     ((a)*(b))
 
 
index 7dd7e20..0be6ebf 100644 (file)
@@ -11,7 +11,7 @@
  ********************************************************************
 
  function: *unnormalized* fft transform
- last mod: $Id: smallft.c,v 1.5 2003/10/08 04:44:02 jm Exp $
+ last mod: $Id: smallft.c,v 1.6 2003/10/08 04:45:26 jm Exp $
 
  ********************************************************************/
 
index cfd91af..503466e 100644 (file)
@@ -57,7 +57,7 @@ int vq_index(float *in, float *codebook, int len, int entries)
 
 
 /*Finds the indices of the n-best entries in a codebook*/
-void vq_nbest(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, float *E, int N, int *nbest, float *best_dist)
+void vq_nbest(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, float *best_dist)
 {
    int i,j,k,used;
    used = 0;
@@ -81,7 +81,7 @@ void vq_nbest(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, float *E
 }
 
 /*Finds the indices of the n-best entries in a codebook with sign*/
-void vq_nbest_sign(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, float *E, int N, int *nbest, float *best_dist)
+void vq_nbest_sign(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, float *best_dist)
 {
    int i,j,k, sign, used;
    used=0;
index 4242384..2c13d7b 100644 (file)
@@ -37,8 +37,8 @@
 
 int vq_index(float *in, float *codebook, int len, int entries);
 
-void vq_nbest(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, float *E, int N, int *nbest, float *best_dist);
+void vq_nbest(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, float *best_dist);
 
-void vq_nbest_sign(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, float *E, int N, int *nbest, float *best_dist);
+void vq_nbest_sign(spx_sig_t *in, spx_sig_t *codebook, int len, int entries, spx_word32_t *E, int N, int *nbest, float *best_dist);
 
 #endif