# lpc

Linear prediction filter coefficients

## Syntax

`[a,g] = lpc(x,p)`

## Description

`lpc` determines the coefficients of a forward linear predictor by minimizing the prediction error in the least squares sense. It has applications in filter design and speech coding.

`[a,g] = lpc(x,p)` finds the coefficients of a `p`th-order linear predictor (FIR filter) that predicts the current value of the real-valued time series `x` based on past samples.

$\stackrel{^}{x}\left(n\right)=-a\left(2\right)x\left(n-1\right)-a\left(3\right)x\left(n-2\right)-\cdots -a\left(p+1\right)x\left(n-p\right)$

`p` is the order of the prediction filter polynomial, `a` = `[1 a(2) ... a(p+1)]`. If `p` is unspecified, `lpc` uses as a default `p` = `length(x)-1`. If `x` is a matrix containing a separate signal in each column, `lpc` returns a model estimate for each column in the rows of matrix `a` and a column vector of prediction error variances `g`. The length of `p` must be less than or equal to the length of `x`.

## Examples

collapse all

### Estimate a Series Using a Forward Predictor

Estimate a data series using a third-order forward predictor. Compare the estimate to the original signal.

First, create the signal data as the output of an autoregressive process driven by normalized white Gaussian noise. Use the last 4096 samples of the AR process output to avoid startup transients.

```noise = randn(50000,1); x = filter(1,[1 1/2 1/3 1/4],noise); x = x(45904:50000); ```

Compute the predictor coefficients, estimated signal, prediction error, and autocorrelation sequence of the prediction error.

```a = lpc(x,3); est_x = filter([0 -a(2:end)],1,x); e = x-est_x; [acs,lags] = xcorr(e,'coeff'); ```

Compare the predicted signal to the original signal.

```plot(1:97,x(4001:4097),1:97,est_x(4001:4097),'--'), grid title 'Original Signal vs. LPC Estimate' xlabel 'Sample number', ylabel 'Amplitude' legend('Original signal','LPC estimate') ```

Plot the autocorrelation of the prediction error.

```plot(lags,acs), grid title 'Autocorrelation of the Prediction Error' xlabel 'Lags', ylabel 'Normalized value' ```

The prediction error is approximately white Gaussian noise, as expected for a third-order AR input process.

collapse all

### Prediction Error

The prediction error, e(n), can be viewed as the output of the prediction error filter A(z) shown below, where H(z) is the optimal linear predictor, x(n) is the input signal, and $\stackrel{^}{x}\left(n\right)$ is the predicted signal.

### Algorithms

`lpc` uses the autocorrelation method of autoregressive (AR) modeling to find the filter coefficients. The generated filter might not model the process exactly even if the data sequence is truly an AR process of the correct order. This is because the autocorrelation method implicitly windows the data, that is, it assumes that signal samples beyond the length of `x` are 0.

`lpc` computes the least squares solution to

$Xa=b$

where

$\begin{array}{ccc}X=\left[\begin{array}{cccc}x\left(1\right)& 0& \cdots & 0\\ x\left(2\right)& x\left(1\right)& \ddots & ⋮\\ ⋮& x\left(2\right)& \ddots & 0\\ x\left(m\right)& ⋮& \ddots & x\left(1\right)\\ 0& x\left(m\right)& \ddots & x\left(2\right)\\ ⋮& \ddots & \ddots & ⋮\\ 0& \cdots & 0& x\left(m\right)\end{array}\right],& a=\left[\begin{array}{c}1\\ a\left(2\right)\\ ⋮\\ a\left(p+1\right)\end{array}\right],& b=\left[\begin{array}{c}1\\ 0\\ ⋮\\ 0\end{array}\right]\end{array}$

and `m` is the length of `x`. Solving the least squares problem via the normal equations

${X}^{H}Xa={X}^{H}b$

$\left[\begin{array}{cccc}r\left(1\right)& r{\left(2\right)}^{\ast }& \cdots & r{\left(p\right)}^{\ast }\\ r\left(2\right)& r\left(1\right)& \ddots & ⋮\\ ⋮& \ddots & \ddots & r{\left(2\right)}^{\ast }\\ r\left(p\right)& \cdots & r\left(2\right)& r\left(1\right)\end{array}\right]\left[\begin{array}{c}a\left(2\right)\\ a\left(3\right)\\ ⋮\\ a\left(p+1\right)\end{array}\right]=\left[\begin{array}{c}-r\left(2\right)\\ -r\left(3\right)\\ ⋮\\ -r\left(p+1\right)\end{array}\right]$

where r` = [`r(1) r(2) ... r(p+1)`]` is an autocorrelation estimate for `x` computed using `xcorr`. The Yule-Walker equations are solved in O(p2) flops by the Levinson-Durbin algorithm (see `levinson`).

## References

[1] Jackson, L. B. Digital Filters and Signal Processing. 2nd Edition. Boston: Kluwer Academic Publishers, 1989, pp. 255–257.