[FFmpeg-cvslog] lpc: Add a function for calculating reflection coefficients from autocorrelation coefficients

Justin Ruggles git at videolan.org
Tue Oct 30 15:16:38 CET 2012


ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Sat Oct 27 22:29:56 2012 +0300| [39ef66f5300c2a42acc29937f5417bc2efe09752] | committer: Martin Storsjö

lpc: Add a function for calculating reflection coefficients from autocorrelation coefficients

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=39ef66f5300c2a42acc29937f5417bc2efe09752
---

 libavcodec/lpc.h |   31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/libavcodec/lpc.h b/libavcodec/lpc.h
index cbee46f..0e54f0d 100644
--- a/libavcodec/lpc.h
+++ b/libavcodec/lpc.h
@@ -111,6 +111,37 @@ void ff_lpc_end(LPCContext *s);
 #endif
 
 /**
+ * Schur recursion.
+ * Produces reflection coefficients from autocorrelation data.
+ */
+static inline void compute_ref_coefs(const LPC_TYPE *autoc, int max_order,
+                                     LPC_TYPE *ref, LPC_TYPE *error)
+{
+    int i, j;
+    LPC_TYPE err;
+    LPC_TYPE gen0[MAX_LPC_ORDER], gen1[MAX_LPC_ORDER];
+
+    for (i = 0; i < max_order; i++)
+        gen0[i] = gen1[i] = autoc[i + 1];
+
+    err    = autoc[0];
+    ref[0] = -gen1[0] / err;
+    err   +=  gen1[0] * ref[0];
+    if (error)
+        error[0] = err;
+    for (i = 1; i < max_order; i++) {
+        for (j = 0; j < max_order - i; j++) {
+            gen1[j] = gen1[j + 1] + ref[i - 1] * gen0[j];
+            gen0[j] = gen1[j + 1] * ref[i - 1] + gen0[j];
+        }
+        ref[i] = -gen1[0] / err;
+        err   +=  gen1[0] * ref[i];
+        if (error)
+            error[i] = err;
+    }
+}
+
+/**
  * Levinson-Durbin recursion.
  * Produce LPC coefficients from autocorrelation data.
  */



More information about the ffmpeg-cvslog mailing list