Mercurial > hg > audiostuff
view intercom/ilbc/syntFilter.c @ 4:26cd8f1ef0b1
import spandsp-0.0.6pre17
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Fri, 25 Jun 2010 15:50:58 +0200 |
parents | 13be24d74cd2 |
children |
line wrap: on
line source
/****************************************************************** iLBC Speech Coder ANSI-C Source Code syntFilter.c Copyright (C) The Internet Society (2004). All Rights Reserved. ******************************************************************/ #include "iLBC_define.h" /*----------------------------------------------------------------* * LP synthesis filter. *---------------------------------------------------------------*/ void syntFilter(float *Out, /* (i/o) Signal to be filtered */ float *a, /* (i) LP parameters */ int len, /* (i) Length of signal */ float *mem /* (i/o) Filter state */ ) { int i, j; float *po, *pi, *pa, *pm; po = Out; /* Filter first part using memory from past */ for (i = 0; i < LPC_FILTERORDER; i++) { pi = &Out[i - 1]; pa = &a[1]; pm = &mem[LPC_FILTERORDER - 1]; for (j = 1; 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 output vector */ for (i = LPC_FILTERORDER; i < len; i++) { pi = &Out[i - 1]; pa = &a[1]; for (j = 1; j < LPC_FILTERORDER + 1; j++) { *po -= (*pa++) * (*pi--); } po++; } /* Update state vector */ memcpy(mem, &Out[len - LPC_FILTERORDER], LPC_FILTERORDER * sizeof(float)); }