comparison 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
comparison
equal deleted inserted replaced
1:9cadc470e3da 2:13be24d74cd2
1
2 /******************************************************************
3
4 iLBC Speech Coder ANSI-C Source Code
5
6 anaFilter.c
7
8 Copyright (C) The Internet Society (2004).
9 All Rights Reserved.
10
11 ******************************************************************/
12
13 #include <string.h>
14 #include "iLBC_define.h"
15
16 /*----------------------------------------------------------------*
17 * LP analysis filter.
18 *---------------------------------------------------------------*/
19
20 void anaFilter(float *In, /* (i) Signal to be filtered */
21 float *a, /* (i) LP parameters */
22 int len, /* (i) Length of signal */
23 float *Out, /* (o) Filtered signal */
24 float *mem /* (i/o) Filter state */
25 )
26 {
27 int i, j;
28 float *po, *pi, *pm, *pa;
29
30 po = Out;
31
32 /* Filter first part using memory from past */
33
34 for (i = 0; i < LPC_FILTERORDER; i++) {
35 pi = &In[i];
36 pm = &mem[LPC_FILTERORDER - 1];
37 pa = a;
38 *po = 0.0;
39
40
41
42
43
44 for (j = 0; j <= i; j++) {
45 *po += (*pa++) * (*pi--);
46 }
47 for (j = i + 1; j < LPC_FILTERORDER + 1; j++) {
48
49 *po += (*pa++) * (*pm--);
50 }
51 po++;
52 }
53
54 /* Filter last part where the state is entirely
55 in the input vector */
56
57 for (i = LPC_FILTERORDER; i < len; i++) {
58 pi = &In[i];
59 pa = a;
60 *po = 0.0;
61 for (j = 0; j < LPC_FILTERORDER + 1; j++) {
62 *po += (*pa++) * (*pi--);
63 }
64 po++;
65 }
66
67 /* Update state vector */
68
69 memcpy(mem, &In[len - LPC_FILTERORDER],
70 LPC_FILTERORDER * sizeof(float));
71 }

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.