# Documentation

### This is machine translation

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

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

# stmcb

Compute linear model using Steiglitz-McBride iteration

## Syntax

```[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) ```

## Description

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\left(z\right)=\frac{B\left(z\right)}{A\left(z\right)}=\frac{b\left(1\right)+b\left(2\right){z}^{-1}+\cdots +b\left(nb+1\right){z}^{-nb}}{a\left(1\right)+a\left(2\right){z}^{-1}+\cdots +a\left(na+1\right){z}^{-na}}$`

## Examples

collapse all

Approximate the impulse response of an IIR filter with a system of lower order.

Specify a 6th-order Butterworth filter with normalized 3-dB frequency rad/sample.

```d = designfilt('lowpassiir','FilterOrder',6, ... 'HalfPowerFrequency',0.2,'DesignMethod','butter');```

Use the Steiglitz-McBride iteration to approximate the filter with a 4th-order system.

```h = impz(d); [bb,aa] = stmcb(h,4,4);```

Plot the frequency responses of the two systems.

```hfvt = fvtool(d,bb,aa,'Analysis','freq'); legend(hfvt,'Butterworth','Steiglitz-McBride')```

## Diagnostics

If `x` and `y` have different lengths, `stmcb` produces this error message:

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

## Algorithms

`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}}\sum _{i=0}^{\infty }|x\left(i\right)-h\left(i\right){|}^{2}$`

`stmcb` iterates using two steps:

1. It prefilters `h` and `x` using 1/a(z).

2. 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.

## References

[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.