Mercurial > hg > audiostuff
view intercom/ilbc/anaFilter.c @ 2:13be24d74cd2
import intercom-0.4.1
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Fri, 25 Jun 2010 09:57:52 +0200 |
parents | |
children |
line wrap: on
line source
/****************************************************************** iLBC Speech Coder ANSI-C Source Code anaFilter.c Copyright (C) The Internet Society (2004). All Rights Reserved. ******************************************************************/ #include <string.h> #include "iLBC_define.h" /*----------------------------------------------------------------* * LP analysis filter. *---------------------------------------------------------------*/ void anaFilter(float *In, /* (i) Signal to be filtered */ float *a, /* (i) LP parameters */ int len, /* (i) Length of signal */ float *Out, /* (o) Filtered signal */ float *mem /* (i/o) Filter state */ ) { int i, j; float *po, *pi, *pm, *pa; po = Out; /* Filter first part using memory from past */ for (i = 0; i < LPC_FILTERORDER; i++) { pi = &In[i]; pm = &mem[LPC_FILTERORDER - 1]; pa = a; *po = 0.0; for (j = 0; j <= i; j++) { *po += (*pa++) * (*pi--); } for (j = i + 1; j < LPC_FILTERORDER + 1; j++) { *po += (*pa++) * (*pm--); } po++; } /* Filter last part where the state is entirely in the input vector */ for (i = LPC_FILTERORDER; i < len; i++) { pi = &In[i]; pa = a; *po = 0.0; for (j = 0; j < LPC_FILTERORDER + 1; j++) { *po += (*pa++) * (*pi--); } po++; } /* Update state vector */ memcpy(mem, &In[len - LPC_FILTERORDER], LPC_FILTERORDER * sizeof(float)); }