~noskcaj/ubuntu/saucy/sflphone/merge-1.2.3-2

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject-2.0.1/third_party/ilbc/anaFilter.c

  • Committer: Jackson Doak
  • Date: 2013-07-10 21:04:46 UTC
  • mfrom: (20.1.3 sid)
  • Revision ID: noskcaj@ubuntu.com-20130710210446-y8f587vza807icr9
Properly merged from upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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(
 
21
       float *In,  /* (i) Signal to be filtered */
 
22
       float *a,   /* (i) LP parameters */
 
23
       int len,/* (i) Length of signal */
 
24
       float *Out, /* (o) Filtered signal */
 
25
       float *mem  /* (i/o) Filter state */
 
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
   }