summaryrefslogtreecommitdiff
path: root/libm/double/levnsn.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-11-22 14:04:29 +0000
committerEric Andersen <andersen@codepoet.org>2001-11-22 14:04:29 +0000
commit7ce331c01ce6eb7b3f5c715a38a24359da9c6ee2 (patch)
tree3a7e8476e868ae15f4da1b7ce26b2db6f434468c /libm/double/levnsn.c
parentc117dd5fb183afb1a4790a6f6110d88704be6bf8 (diff)
Totally rework the math library, this time based on the MacOs X
math library (which is itself based on the math lib from FreeBSD). -Erik
Diffstat (limited to 'libm/double/levnsn.c')
-rw-r--r--libm/double/levnsn.c82
1 files changed, 0 insertions, 82 deletions
diff --git a/libm/double/levnsn.c b/libm/double/levnsn.c
deleted file mode 100644
index 3fda5d6bd..000000000
--- a/libm/double/levnsn.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Levnsn.c */
-/* Levinson-Durbin LPC
- *
- * | R0 R1 R2 ... RN-1 | | A1 | | -R1 |
- * | R1 R0 R1 ... RN-2 | | A2 | | -R2 |
- * | R2 R1 R0 ... RN-3 | | A3 | = | -R3 |
- * | ... | | ...| | ... |
- * | RN-1 RN-2... R0 | | AN | | -RN |
- *
- * Ref: John Makhoul, "Linear Prediction, A Tutorial Review"
- * Proc. IEEE Vol. 63, PP 561-580 April, 1975.
- *
- * R is the input autocorrelation function. R0 is the zero lag
- * term. A is the output array of predictor coefficients. Note
- * that a filter impulse response has a coefficient of 1.0 preceding
- * A1. E is an array of mean square error for each prediction order
- * 1 to N. REFL is an output array of the reflection coefficients.
- */
-
-#define abs(x) ( (x) < 0 ? -(x) : (x) )
-
-int levnsn( n, r, a, e, refl )
-int n;
-double r[], a[], e[], refl[];
-{
-int k, km1, i, kmi, j;
-double ai, akk, err, err1, r0, t, akmi;
-double *pa, *pr;
-
-for( i=0; i<n; i++ )
- {
- a[i] = 0.0;
- e[i] = 0.0;
- refl[i] = 0.0;
- }
-r0 = r[0];
-e[0] = r0;
-err = r0;
-
-akk = -r[1]/err;
-err = (1.0 - akk*akk) * err;
-e[1] = err;
-a[1] = akk;
-refl[1] = akk;
-
-if( err < 1.0e-2 )
- return 0;
-
-for( k=2; k<n; k++ )
- {
- t = 0.0;
- pa = &a[1];
- pr = &r[k-1];
- for( j=1; j<k; j++ )
- t += *pa++ * *pr--;
- akk = -( r[k] + t )/err;
- refl[k] = akk;
- km1 = k/2;
- for( j=1; j<=km1; j++ )
- {
- kmi = k-j;
- ai = a[j];
- akmi = a[kmi];
- a[j] = ai + akk*akmi;
- if( i == kmi )
- goto nxtk;
- a[kmi] = akmi + akk*ai;
- }
-nxtk:
- a[k] = akk;
- err1 = (1.0 - akk*akk)*err;
- e[k] = err1;
- if( err1 < 0 )
- err1 = -err1;
-/* err1 = abs(err1);*/
-/* if( (err1 < 1.0e-2) || (err1 >= err) )*/
- if( err1 < 1.0e-2 )
- return 0;
- err = err1;
- }
- return 0;
-}