Big cleanup, removed Direct-Form I filters
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Sun, 20 Oct 2002 21:11:13 +0000 (21:11 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Sun, 20 Oct 2002 21:11:13 +0000 (21:11 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@4025 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/filters.c
libspeex/filters.h

index 7c5bbee..22394d5 100644 (file)
@@ -87,16 +87,6 @@ void enh_lpc(float *ak, int order, float *num, float *den, float k1, float k2, f
    POP(stack);
 }
 
-void syn_filt(float *x, float *a, float *y, int N, int ord)
-{
-   int i,j;
-   for (i=0;i<N;i++)
-   {
-      y[i]=x[i];
-      for (j=1;j<=ord;j++)
-         y[i] -= a[j]*y[i-j];
-   }
-}
 
 void syn_filt_zero(float *x, float *a, float *y, int N, int ord)
 {
@@ -109,32 +99,6 @@ void syn_filt_zero(float *x, float *a, float *y, int N, int ord)
    }
 }
 
-void syn_filt_mem(float *x, float *a, float *y, int N, int ord, float *mem)
-{
-   int i,j;
-   for (i=0;i<N;i++)
-   {
-      y[i]=x[i];
-      for (j=1;j<=min(ord,i);j++)
-         y[i] -= a[j]*y[i-j];
-      for (j=i+1;j<=ord;j++)
-         y[i] -= a[j]*mem[j-i-1];
-   }
-   for (i=0;i<ord;i++)
-      mem[i]=y[N-i-1];
-}
-
-
-void residue(float *x, float *a, float *y, int N, int ord)
-{
-   int i,j;
-   for (i=N-1;i>=0;i--)
-   {
-      y[i]=x[i];
-      for (j=1;j<=ord;j++)
-         y[i] += a[j]*x[i-j];
-   }
-}
 
 void residue_zero(float *x, float *a, float *y, int N, int ord)
 {
@@ -147,21 +111,6 @@ void residue_zero(float *x, float *a, float *y, int N, int ord)
    }
 }
 
-void residue_mem(float *x, float *a, float *y, int N, int ord, float *mem)
-{
-   int i,j;
-   for (i=N-1;i>=0;i--)
-   {
-      y[i]=x[i];
-      for (j=1;j<=min(ord,i);j++)
-         y[i] += a[j]*x[i-j];
-      for (j=i+1;j<=ord;j++)
-         y[i] += a[j]*mem[j-i-1];
-   }
-   for (i=0;i<ord;i++)
-      mem[i]=x[N-i-1];
-}
-
 
 void filter_mem2(float *x, float *num, float *den, float *y, int N, int ord, float *mem)
 {
@@ -210,100 +159,22 @@ void iir_mem2(float *x, float *den, float *y, int N, int ord, float *mem)
 }
 
 
-void pole_zero_mem(float *x, float *num, float *den, float *y, int N, int ord, float *mem, float *stack)
-{
-   float *tmp=PUSH(stack, N);
-   syn_filt_mem(x, den, tmp, N, ord, mem);
-   residue_mem(tmp, num, y, N, ord, mem+ord);
-   POP(stack);
-}
-
-
-/*
-void fir_mem(float *x, float *a, float *y, int N, int M, float *mem)
-{
-   int i,j;
-   for (i=0;i<N;i++)
-   {
-      y[i]=0;
-      for (j=0;j<=min(M-1,i);j++)
-         y[i] += a[j]*x[i-j];
-      for (j=i+1;j<=M-1;j++)
-         y[i] += a[j]*mem[j-i-1];
-   }
-   for (i=0;i<M-1;i++)
-      mem[i]=x[N-i-1];
-}
-*/
 
 void syn_percep_zero(float *xx, float *ak, float *awk1, float *awk2, float *y, int N, int ord)
 {
-   int i,j;
-   float long_filt[21];
-   float iir[20];
-   float fir[10];
-   float x[40];
-   int ord2=ord<<1;
-   for (i=0;i<=ord;i++)
-      long_filt[i]=ak[i];
-   for (i=ord+1;i<=ord2;i++)
-      long_filt[i]=0;
-   residue_zero(long_filt,awk2,long_filt,1+(ord<<1),ord);
-
-   for (i=0;i<N;i++)
-      x[i]=xx[i];
-   for (i=0;i<ord2;i++)
-      iir[i]=long_filt[ord2-i];
+   int i;
+   /*FIXME: Should make that dynamic*/
+   float mem[10];
    for (i=0;i<ord;i++)
-      fir[i]=awk1[ord-i];
-
-   for (i=0;i<ord2;i++)
-   {
-      y[i]=x[i];
-      for (j=1;j<=min(ord2,i);j++)
-         y[i] -= long_filt[j]*y[i-j];
-      for (j=1;j<=min(ord,i);j++)
-         y[i] += awk1[j]*x[i-j];
-   }
-#if 0
-   for (i=ord2;i<N;i++)
-   {
-      float *yptr=y+i-ord2;
-      float *xptr=x+i-ord;
-      y[i]=x[i];
-      for (j=0;j<ord2;j++)
-         y[i]-= iir[j]*yptr[j];
-      for (j=0;j<ord;j++)
-         y[i]+= fir[j]*xptr[j];
-   }
-#else
-   for (i=ord2;i<N;i++)
-   {
-      float *f, *ptr;
-      float sum1=x[i], sum2=0;
-      f=iir;
-      ptr=y+i-ord2;
-      for (j=0;j<ord2;j+=2)
-      {
-         sum1-= f[0]*ptr[0];
-         sum2-= f[1]*ptr[1];
-         f+=2;
-         ptr+=2;
-      }
-      f=fir;
-      ptr=x+i-ord;
-      for (j=0;j<ord;j+=2)
-      {
-         sum1+= f[0]*ptr[0];
-         sum2+= f[1]*ptr[1];
-         f+=2;
-         ptr+=2;
-      }
-      y[i]=sum1+sum2;
-   }
-#endif
+      mem[i]=0;
+   filter_mem2(xx, awk1, ak, y, N, ord, mem);
+   for (i=0;i<ord;i++)
+     mem[i]=0;
+   iir_mem2(y, awk2, y, N, ord, mem);
+  
 }
 
+
 #if 1
 #define MAX_FILTER 100
 #define MAX_SIGNAL 1000
index 7361051..c8ed46c 100644 (file)
@@ -50,30 +50,13 @@ void enh_lpc(float *ak, int order, float *num, float *den, float k1, float k2, f
 void lpc_flat(float g1, float g2, float *lpc_in, float *lpc_out1, float *lpc_out2, int order);
 
 
-#if 0
-/* Synthesis filter using the past of y[n] (negative indices) as memory */
-void syn_filt(float *x, float *a, float *y, int N, int ord);
-#endif
 
 /* Synthesis filter using zero memory */
 void syn_filt_zero(float *x, float *a, float *y, int N, int ord);
 
-#if 0
-/* Synthesis filter using memory */
-void syn_filt_mem(float *x, float *a, float *y, int N, int ord, float *mem);
-
-/* Analysis (FIR) filter using the past of x[n] (negative indices) as memory */
-void residue(float *x, float *a, float *y, int N, int ord);
-#endif
-
 /* Analysis (FIR) filter using zero memory */
 void residue_zero(float *x, float *a, float *y, int N, int ord);
 
-#if 0
-/* Analysis (FIR) filter using memory */
-void residue_mem(float *x, float *a, float *y, int N, int ord, float *mem);
-#endif
-
 
 
 /* FIR filter */
@@ -92,6 +75,5 @@ float *pitch_gain,   /*pitch gain (3-tap)*/
 float  comb_gain     /*gain of comb filter*/
 );
 
-void pole_zero_mem(float *x, float *num, float *den, float *y, int N, int ord, float *mem, float *stack);
 
 #endif