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));
+}

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