This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materials including this page, select Japan from the country navigator on the bottom of this page.


Levinson-Durbin recursion


a = levinson(r)
a = levinson(r,n)
[a,e] = levinson(r,n)
[a,e,k] = levinson(r,n)


The Levinson-Durbin recursion is an algorithm for finding an all-pole IIR filter with a prescribed deterministic autocorrelation sequence. It has applications in filter design, coding, and spectral estimation. The filter that levinson produces is minimum phase.

a = levinson(r) finds the coefficients of a length(r)-1 order autoregressive linear process which has r as its autocorrelation sequence. r is a real or complex deterministic autocorrelation sequence. If r is a matrix, levinson finds the coefficients for each column of r and returns them in the rows of a. n=length(r)-1 is the default order of the denominator polynomial A(z); that is, a = [1 a(2) ... a(n+1)]. The filter coefficients are ordered in descending powers of z–1.


a = levinson(r,n) returns the coefficients for an autoregressive model of order n.

[a,e] = levinson(r,n) returns the prediction error, e, of order n.

[a,e,k] = levinson(r,n) returns the reflection coefficients k as a column vector of length n.


k is computed internally while computing the a coefficients, so returning k simultaneously is more efficient than converting a to k with tf2latc.


collapse all

Estimate the coefficients of an autoregressive process given by

a = [1 0.1 -0.8];

Generate a realization of the process by filtering white noise of variance 0.4.

v = 0.4;
w = sqrt(v)*randn(15000,1);
x = filter(1,a,w);

Estimate the correlation function. Discard the correlation values at negative lags. Use the Levinson-Durbin recursion to estimate the model coefficients.

[r,lg] = xcorr(x,'biased');
r(lg<0) = [];

ar = levinson(r,numel(a)-1)
ar = 

    1.0000    0.0957   -0.8026


levinson solves the symmetric Toeplitz system of linear equations

[r(1)r(2)*r(n)*r(2)r(1)r(n1)*r(n)r(2)r(1)] [a(2)a(3)a(n+1)]=[r(2)r(3)r(n+1)]

where r = [r(1) ... r(n + 1)] is the input autocorrelation vector, and r(i)* denotes the complex conjugate of r(i). The input r is typically a vector of autocorrelation coefficients where lag 0 is the first element, r(1).


If r is not a valid autocorrelation sequence, the levinson function might return NaNs even if the solution exists.

The algorithm requires O(n2) flops and is thus much more efficient than the MATLAB® backslash command for large n. However, the levinson function uses \ for low orders to provide the fastest possible execution.


[1] Ljung, Lennart. System Identification: Theory for the User. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

Extended Capabilities

See Also

| | | |

Introduced before R2006a

Was this topic helpful?