Impulse invariance method for analog-to-digital filter conversion
[bz,az]
=
impinvar(b,a,fs)
[bz,az] =
impinvar(b,a,fs,tol)
[bz,az]
creates a digital
filter with numerator and denominator coefficients =
impinvar(b,a,fs)bz
and az
,
respectively, whose impulse response is equal to the impulse response
of the analog filter with coefficients b
and a
,
scaled by 1/fs
. If you leave out the argument fs
,
or specify fs
as the empty vector []
,
it takes the default value of 1 Hz.
[bz,az]
uses the tolerance
specified by =
impinvar(b,a,fs,tol)tol
to determine whether poles are
repeated. A larger tolerance increases the likelihood that impinvar
interprets
closely located poles as multiplicities (repeated ones). The default
is 0.001, or 0.1% of a pole's magnitude. Note that the accuracy of
the pole values is still limited to the accuracy obtainable by the roots
function.
Convert an analog lowpass filter to a digital filter using impinvar
with
a sampling frequency of 10 Hz:
[b,a] = butter(4,0.3,'s'); [bz,az] = impinvar(b,a,10);
Illustrate the relationship between analog and digital impulse responses [2].
Note
This example requires the |
The steps used in this example are:
Create an analog Butterworth filter
Use impinvar
with
a sampling frequency Fs
of 10 Hz to scale the coefficients
by 1/Fs
. This compensates for the gain that will
be introduced in Step 4 below.
Use Control System Toolbox impulse
function to plot the continuous-time
unit impulse response of an LTI system.
Plot the digital impulse response,
multiplying the numerator by a constant (Fs
) to
compensate for the 1/Fs
gain introduced in the
impulse response of the derived digital filter.
[b,a] = butter(4,0.3,'s'); [bz,az] = impinvar(b,a,10); sys = tf(b,a); impulse(sys); hold on; impz(10*bz,az,[],10);
Zooming the resulting plot shows that the analog and digital impulse responses are the same.
[1] Parks, T.W., and C.S. Burrus, Digital Filter Design, John Wiley & Sons, 1987, pp.206-209.
[2] Antoniou, Andreas, Digital Filters, McGraw Hill, Inc, 1993, pp.221-224.