[Back to MATH SWAG index] [Back to Main SWAG index] [Original]
> Could someone post a program to calculate the linear prediction
> coefficients for a discrete sequence using the
> levinson-durbin algorithnm?
{ Input: Array R - Samples of an autocorrelation function, Rx(k)
MM - Dimension of the predictor.
Output: Array a - Predictor coefficients.
Alfa - error variance.
}
CONST
MaxDim = 128; { max size of the predictor }
TYPE
AMatrix = ARRAY [0..MaxDim] OF REAL;
PROCEDURE LevinsonDurbin( R : AMatrix; {Autocorrelation martix}
MM : INTEGER; {Predictor order}
VAR a : AMatrix; {Predictor coefficients}
VAR Alfa : REAL; {Error variance}
VAR { for LevinsonDurbin}
m : INTEGER;
b : ARRAY [0..Max_dim] OF REAL;
km, Alfam, t : REAL;
BEGIN {LevinsonDurbin}
a[0] := 1; { initialise }
Alfam := R[0];
FOR m := 1 TO MM DO BEGIN
t := R[m];
FOR k := 1 TO m-1 DO
t := t + R[m-k]*a[k];
km := -t/Alfam;
FOR k := 1 TO m-1 DO
b[k] := a[m-k];
FOR k := 1 TO m-1 DO
a[k] := a[k] + km*b[k];
a[m] := km;
Alfam := Alfam*(1 - a[m]*a[m]);
END; { FOR m... }
Alfa := Alfam;
END; { LevinsonDurbin }
[Back to MATH SWAG index] [Back to Main SWAG index] [Original]