Impulse Invariant Transform


The impulse invariant transform (IIT) is a method of taking a continuous-time system H(s) and converting it to a discrete-time system. There are multiple ways of doing this, but the IIT does so with the constraint that the impulse response of the discrete-time system is a sampled version of the impulse response of the continuous-time system.

Here’s an illustration:

…gets converted to…

…with the characteristic that the discrete-time impulse response is a sampled version of the continuous-time:

Rational Systems

This doesn’t seem like a big deal—nor very accurate. The illustration above implies that we’re taking an IIR response from the continuous-time system and sampling as a discrete-time FIR.

However, the IIT actually does something better: if H(s) is rational (composed of a numerator and denominator):

H(s) = frac{N_c(s)}{D_c(s)}

…then the IIT lets us re-write this system as a discrete-time rational system:

H[z] = frac{N_d[z]}{D_d[z]}

…of course, with the property that h[n] = T_s times h(nT_s). T_s is the sampling period (typically, during transformation from continous-time to discrete-time, the continuous-time impulse response is scaled by the sample period).


Here’s an example:

H(s) = frac{s}{s^2 + 1}

First, we break it down into its partial fraction expansion:

H(s) = frac{s}{(s-j)(s+j)} = frac{a}{s-j} + frac{b}{s+j}

Solving (taking limits of s to +j and -j):

a = frac{1}{2}
b = frac{-1}{2}

Now, the IIT prescribes how to take single-pole transfer functions and convert them to the z-domain.

frac{a}{s-j} rArr frac{T_s a}{1-e^{+jT_s}z^{-1}}
frac{b}{s+j} rArr frac{T_s b}{1-e^{-jT_s}z^{-1}}

…which means that:

H[z] = frac{T_s}{2(1-e^{+jT_s}z^{-1})} - frac{T_s}{2(1-e^{-jT_s}z^{-1})}
H[z] = frac{T_s cos(jT_s) z^{-1}}{1 - cos(jT_s)z^{-1} + z^{-2}}


The impulse invariant transform is useful in modelling continuous-time sigma-delta, allowing one to analyze the mixed-mode continuous-time sigma-delta as a purely discrete-time system.

Most notably, in considering the stability of continuous-time sigma-delta ADC’s, the transformation is useful in allowing one to replace the continuous-time noise-shaping filter with a discrete-time equivalent. One could then perform a closed-loop analytic analysis on the system. This is the procedure advocated in Delta-Sigma Data Converters: Theory, Design, and Simulation. However, the book only prescribes a rule-of-thumb, and in general, one must simulate the sigma-delta rigorously to gain confidence of stability.

Arguably, this transformation was more useful in the past, when high-level mixed-mode simulators (Simulink) were not available. In that case, the only way to simulate the continous-time sigma-delta was to model at a discrete-time. Nowadays (in my experience) Simulink is fast enough that it’s easier to keep the mixed-mode nature of the system intact (i.e. not model it as a purely discrete-time system). However, I can imagine a case of either very long simulations or a regression analysis system where the cycle-accurate discrete-time model may become useful again.

Want to stay updated? Consider a subscription to this site via RSS or email.

This entry was posted in Analog Professional and tagged , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

One Comment

  1. Fatal error: Uncaught Error: Call to undefined function ereg() in /home/wagh/webapps/circuitdesign/wp-content/themes/thematic/library/extensions/comments-extensions.php:262 Stack trace: #0 /home/wagh/webapps/circuitdesign/wp-content/themes/thematic/library/extensions/discussion.php(30): thematic_commenter_link() #1 /home/wagh/webapps/circuitdesign/wp-includes/class-walker-comment.php(179): thematic_comments(Object(WP_Comment), Array, 1) #2 /home/wagh/webapps/circuitdesign/wp-includes/class-wp-walker.php(145): Walker_Comment->start_el('', Object(WP_Comment), 1, Array) #3 /home/wagh/webapps/circuitdesign/wp-includes/class-walker-comment.php(139): Walker->display_element(Object(WP_Comment), Array, '5', 0, Array, '') #4 /home/wagh/webapps/circuitdesign/wp-includes/class-wp-walker.php(387): Walker_Comment->display_element(Object(WP_Comment), Array, '5', 0, Array, '') #5 /home/wagh/webapps/circuitdesign/wp-includes/comment-template.php(2174): Walker->paged_walk(Array, '5', 0, 0, Array) #6 /home/wagh/webapps/circuitdesign/wp-con in /home/wagh/webapps/circuitdesign/wp-content/themes/thematic/library/extensions/comments-extensions.php on line 262