Mercurial > hg > audiostuff
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/intercom/ilbc/anaFilter.c Fri Jun 25 09:57:52 2010 +0200 @@ -0,0 +1,71 @@ + + /****************************************************************** + + 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)); +}