Compute linear model using Steiglitz-McBride iteration

`[b,a] = stmcb(h,nb,na)`

[b,a] = stmcb(y,x,nb,na)

[b,a] = stmcb(h,nb,na,niter)

[b,a] = stmcb(y,x,nb,na,niter)

[b,a] = stmcb(h,nb,na,niter,ai)

[b,a] = stmcb(y,x,nb,na,niter,ai)

Steiglitz-McBride iteration is an algorithm for finding an IIR filter with a prescribed time-domain impulse response. It has applications in both filter design and system identification (parametric modeling).

`[b,a] = stmcb(h,nb,na)`

finds
the coefficients `b`

and `a`

of
the system *b*(*z*)/*a*(*z*)
with approximate impulse response `h`

, exactly `nb`

zeros,
and exactly `na`

poles.

`[b,a] = stmcb(y,x,nb,na)`

finds
the system coefficients `b`

and `a`

of
the system that, given `x`

as input, has `y`

as
output. `x`

and `y`

must be the
same length.

`[b,a] = stmcb(h,nb,na,niter)`

and

`[b,a] = stmcb(y,x,nb,na,niter)`

use `niter`

iterations.
The default for `niter`

is 5.

`[b,a] = stmcb(h,nb,na,niter,ai)`

and

`[b,a] = stmcb(y,x,nb,na,niter,ai)`

use
the vector `ai`

as the initial estimate of the denominator
coefficients. If `ai`

is not specified, `stmcb`

uses
the output argument from `[b,ai] = `

`prony`

`(h,0,na)`

as the
vector `ai`

.

`stmcb`

returns the IIR filter coefficients
in length `nb+1`

and `na+1`

row
vectors `b`

and `a`

. The filter
coefficients are ordered in descending powers of *z*.

$$H(z)=\frac{B(z)}{A(z)}=\frac{b(1)+b(2){z}^{-1}+\cdots +b(nb+1){z}^{-nb}}{a(1)+a(2){z}^{-1}+\cdots +a(na+1){z}^{-na}}$$

If `x`

and `y`

have different
lengths, `stmcb`

produces this error message:

Input signal X and output signal Y must have the same length.

`stmcb`

attempts to minimize the squared error
between the impulse response *h* of *b*(*z*)*/a*(*z*)
and the input signal *x*.

$$\underset{a,b}{\mathrm{min}}{\displaystyle \sum _{i=0}^{\infty}|x(i)-h(i){|}^{2}}$$

`stmcb`

iterates using two steps:

It prefilters

`h`

and`x`

using 1/*a*(*z*).It solves a system of linear equations for

`b`

and`a`

using \.

`stmcb`

repeats this process `niter`

times.
No checking is done to see if the `b`

and `a`

coefficients
have converged in fewer than `niter`

iterations.

[1] Steiglitz, K., and L. E. McBride. “A
Technique for the Identification of Linear Systems.” *IEEE ^{®} Transactions
on Automatic Control*. Vol. AC-10, 1965, pp. 461–464.

[2] Ljung, Lennart. *System Identification:
Theory for the User*. 2nd Edition. Upper Saddle River,
NJ: Prentice Hall, 1999, p. 354.