Accelerating the pace of engineering and science

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

expand all

Steiglitz-McBride Approximation of a Filter

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.


expand all

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.