This is machine translation

Translated by Microsoft
Mouse over text to see original. Click the button below to return to the English verison of the 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.



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 $0.2\pi$ rad/sample.

d = designfilt('lowpassiir','FilterOrder',6, ...

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');


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

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

More About

collapse all


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


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.


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

See Also

| | |

Introduced before R2006a

Was this topic helpful?