Note: This page has been translated by MathWorks. Click here to see

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

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.