# poly2rc

Convert prediction filter polynomial to reflection coefficients

## Syntax

``k = poly2rc(a)``
``[k,r0] = poly2rc(a,eFinal)``

## Description

````k = poly2rc(a)` returns a vector `k` of lattice-structure reflection coefficients from a vector `a` of prediction filter coefficients.```
````[k,r0] = poly2rc(a,eFinal)` also returns the zero-lag autocorrelation, `r0`, based on the final prediction error `eFinal`.```

example

## Examples

collapse all

Given a prediction filter polynomial, `a`, and a final prediction error, `efinal`, determine the reflection coefficients of the corresponding lattice structure and the zero-lag autocorrelation.

```a = [1.0000 0.6149 0.9899 0.0000 0.0031 -0.0082]; efinal = 0.2; [k,r0] = poly2rc(a,efinal)```
```k = 5×1 0.3090 0.9801 0.0031 0.0081 -0.0082 ```
```r0 = 5.6032 ```

## Input Arguments

collapse all

Prediction filter coefficients, specified as a vector.

Note

The value of `a` has the following restrictions:

• `a(1)` cannot be 0.

• If `a(1)` is not equal to `1`, the `poly2rc` function normalizes the prediction filter polynomial by `a(1)`.

Data Types: `single` | `double`
Complex Number Support: Yes

Final prediction error power, specified as a scalar.

Data Types: `single` | `double`
Complex Number Support: Yes

## Output Arguments

collapse all

List of reflection coefficients, returned as a column vector of length p, where p+1 is the number of elements of `a`.

Zero-lag autocorrelation, returned as a scalar.

## Limitations

If `abs(k(i)) == 1` for any `i`, finding the reflection coefficients is an ill-conditioned problem. `poly2rc` returns some `NaN`s and provides a warning message in those cases.

## Tips

A simple and quick way to verify if all the roots of `a` lie inside the unit circle is to check if all the elements of `k` have magnitude less than 1.

```stable = all(abs(poly2rc(a))<1) ```

## Algorithms

The `poly2rc` function implements the following recursive relationship:

`$\begin{array}{c}k\left(n\right)={a}_{n}\left(n\right)\\ {a}_{n-1}\left(m\right)=\frac{{a}_{n}\left(m\right)-k\left(n\right){a}_{n}\left(n-m\right)}{1-k{\left(n\right)}^{2}},\text{ }m=1,2,\cdots ,n-1\end{array}$`

This relationship is based on Levinson’s recursion [1]. To implement it, `poly2rc` loops through `a` in reverse order after discarding its first element. For each loop iteration `i`, the function:

1. Sets `k(i)` equal to `a(i)`

2. Applies the second relationship above to elements 1 through `i` of the vector `a`.

```a = (a-k(i)*fliplr(a))/(1-k(i)^2); ```

## References

[1] Kay, Steven M. Modern Spectral Estimation. Englewood Cliffs, NJ: Prentice-Hall, 1988.

## Version History

Introduced before R2006a