12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
-
- /******************************************************************
-
- iLBC Speech Coder ANSI-C Source Code
-
- anaFilter.c
-
- Copyright (c) 2001,
- Global IP Sound AB.
- All rights reserved.
-
- ******************************************************************/
-
- #include <string.h>
- #include "iLBC_define.h"
- #include "anaFilter.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 entierly
- 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));
- }
-
-
|