
   /******************************************************************

       iLBC Speech Coder ANSI-C Source Code

       filter.h

       Copyright (C) The Internet Society (2004).
       All Rights Reserved.

   ******************************************************************/






#ifndef __iLBC_FILTER_H
#define __iLBC_FILTER_H

void AllPoleFilter(float *InOut,        /* (i/o) on entrance InOut[-orderCoef] to
                                           InOut[-1] contain the state of the
                                           filter (delayed samples). InOut[0] to
                                           InOut[lengthInOut-1] contain the filter
                                           input, on en exit InOut[-orderCoef] to
                                           InOut[-1] is unchanged and InOut[0] to
                                           InOut[lengthInOut-1] contain filtered
                                           samples */
  float *Coef,                  /* (i) filter coefficients, Coef[0] is assumed
                                   to be 1.0 */
  int lengthInOut,              /* (i) number of input/output samples */
  int orderCoef                 /* (i) number of filter coefficients */
  );

void AllZeroFilter(float *In,   /* (i) In[0] to In[lengthInOut-1] contain
                                   filter input samples */
  float *Coef,                  /* (i) filter coefficients (Coef[0] is assumed
                                   to be 1.0) */
  int lengthInOut,              /* (i) number of input/output samples */
  int orderCoef,                /* (i) number of filter coefficients */
  float *Out                    /* (i/o) on entrance Out[-orderCoef] to Out[-1]
                                   contain the filter state, on exit Out[0]
                                   to Out[lengthInOut-1] contain filtered
                                   samples */
  );

void ZeroPoleFilter(float *In,  /* (i) In[0] to In[lengthInOut-1] contain filter
                                   input samples In[-orderCoef] to In[-1]
                                   contain state of all-zero section */
  float *ZeroCoef,              /* (i) filter coefficients for all-zero
                                   section (ZeroCoef[0] is assumed to
                                   be 1.0) */
  float *PoleCoef,              /* (i) filter coefficients for all-pole section
                                   (ZeroCoef[0] is assumed to be 1.0) */
  int lengthInOut,              /* (i) number of input/output samples */
  int orderCoef,                /* (i) number of filter coefficients */
  float *Out                    /* (i/o) on entrance Out[-orderCoef] to Out[-1]
                                   contain state of all-pole section. On
                                   exit Out[0] to Out[lengthInOut-1]
                                   contain filtered samples */
  );






void DownSample(float *In,      /* (i) input samples */
  float *Coef,                  /* (i) filter coefficients */
  int lengthIn,                 /* (i) number of input samples */
  float *state,                 /* (i) filter state */
  float *Out                    /* (o) downsampled output */
  );

#endif
