aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/codecs/lpc10/preemp.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/codecs/lpc10/preemp.c')
-rw-r--r--trunk/codecs/lpc10/preemp.c144
1 files changed, 144 insertions, 0 deletions
diff --git a/trunk/codecs/lpc10/preemp.c b/trunk/codecs/lpc10/preemp.c
new file mode 100644
index 000000000..645428c3c
--- /dev/null
+++ b/trunk/codecs/lpc10/preemp.c
@@ -0,0 +1,144 @@
+/*
+
+$Log$
+Revision 1.15 2004/06/26 03:50:14 markster
+Merge source cleanups (bug #1911)
+
+Revision 1.14 2003/02/12 13:59:15 matteo
+mer feb 12 14:56:57 CET 2003
+
+Revision 1.1.1.1 2003/02/12 13:59:15 matteo
+mer feb 12 14:56:57 CET 2003
+
+Revision 1.2 2000/01/05 08:20:39 markster
+Some OSS fixes and a few lpc changes to make it actually work
+
+ * Revision 1.1 1996/08/19 22:30:58 jaf
+ * Initial revision
+ *
+
+*/
+
+/* -- translated by f2c (version 19951025).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+#ifdef P_R_O_T_O_T_Y_P_E_S
+extern int preemp_(real *inbuf, real *pebuf, integer *nsamp, real *coef, real *z__);
+#endif
+
+/* ******************************************************************* */
+
+/* PREEMP Version 55 */
+
+/* $Log$
+ * Revision 1.15 2004/06/26 03:50:14 markster
+ * Merge source cleanups (bug #1911)
+ *
+ * Revision 1.14 2003/02/12 13:59:15 matteo
+ * mer feb 12 14:56:57 CET 2003
+ *
+ * Revision 1.1.1.1 2003/02/12 13:59:15 matteo
+ * mer feb 12 14:56:57 CET 2003
+ *
+ * Revision 1.2 2000/01/05 08:20:39 markster
+ * Some OSS fixes and a few lpc changes to make it actually work
+ *
+ * Revision 1.1 1996/08/19 22:30:58 jaf
+ * Initial revision
+ * */
+/* Revision 1.3 1996/03/14 23:16:29 jaf */
+/* Just added a few comments about which array indices of the arguments */
+/* are used, and mentioning that this subroutine has no local state. */
+
+/* Revision 1.2 1996/03/11 23:23:34 jaf */
+/* Added a bunch of comments to an otherwise simple subroutine. */
+
+/* Revision 1.1 1996/02/07 14:48:48 jaf */
+/* Initial revision */
+
+
+/* ******************************************************************* */
+
+/* Preemphasize speech with a single-zero filter. */
+/* (When coef = .9375, preemphasis is as in LPC43.) */
+
+/* Inputs: */
+/* NSAMP - Number of samples to filter */
+/* INBUF - Input speech buffer */
+/* Indices 1 through NSAMP are read. */
+/* COEF - Preemphasis coefficient */
+/* Input/Output: */
+/* Z - Filter state */
+/* Output: */
+/* PEBUF - Preemphasized speech buffer (can be equal to INBUF) */
+/* Indices 1 through NSAMP are modified. */
+
+/* This subroutine has no local state. */
+
+/* Subroutine */ int preemp_(real *inbuf, real *pebuf, integer *nsamp, real *
+ coef, real *z__)
+{
+ /* System generated locals */
+ integer i__1;
+
+ /* Local variables */
+ real temp;
+ integer i__;
+
+/* Arguments */
+/* Local variables */
+
+/* None of these need to have their values saved from one */
+/* invocation to the next. */
+
+/* Logically, this subroutine computes the output sequence */
+/* pebuf(1:nsamp) defined by: */
+
+/* pebuf(i) = inbuf(i) - coef * inbuf(i-1) */
+
+/* where inbuf(0) is defined by the value of z given as input to */
+/* this subroutine. */
+
+/* What is this filter's frequency response and phase response? */
+
+/* Why is this filter applied to the speech? */
+
+/* Could it be more efficient to apply multiple filters */
+/* simultaneously, by combining them into one equivalent filter? */
+
+/* Are there ever cases when "factoring" one high-order filter into
+*/
+/* multiple smaller-order filter actually reduces the number of */
+/* arithmetic operations needed to perform them? */
+/* When I first read this subroutine, I didn't understand why the */
+/* variable temp was used. It seemed that the statements in the do
+*/
+/* loop could be replaced with the following: */
+
+/* pebuf(i) = inbuf(i) - coef * z */
+/* z = inbuf(i) */
+
+/* The reason for temp is so that even if pebuf and inbuf are the */
+/* same arrays in memory (i.e., they are aliased), then this */
+/* subroutine will still work correctly. I didn't realize this */
+/* until seeing the comment after PEBUF above that says "(can be */
+/* equal to INBUF)". */
+ /* Parameter adjustments */
+ --pebuf;
+ --inbuf;
+
+ /* Function Body */
+ i__1 = *nsamp;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ temp = inbuf[i__] - *coef * *z__;
+ *z__ = inbuf[i__];
+ pebuf[i__] = temp;
+/* L10: */
+ }
+ return 0;
+} /* preemp_ */
+