The impulse response of a linear time-invariant (LTI) system is the output produced when the input is a unit impulse (Dirac delta for continuous-time, Kronecker delta for discrete-time) and the system starts at rest. Because LTI systems are fully characterized by their impulse response, the output to any arbitrary input can be computed as the convolution of that input with the impulse response.
In practice
In discrete-time DSP on embedded targets, the impulse response is directly observable: feed a single sample of value 1 followed by all zeros into a filter, and record the output sequence. For an FIR filter, the coefficients *are* the impulse response, so there is a direct one-to-one correspondence. For an IIR filter, the impulse response is theoretically infinite and decays (ideally) toward zero, which is why IIR filters are more memory-efficient but require careful stability analysis.
Embedded DSP workflows often start with an impulse response measured or simulated in a tool like MATLAB, then translate it into filter coefficients for deployment on a microcontroller or DSP core. The blog post "Modeling a Continuous-Time System with Matlab" illustrates how continuous-time system models are discretized before implementation. "Impulse Response Approximation" covers strategies for truncating or approximating long impulse responses to fit the memory and compute budgets of constrained hardware.
Convolution-based processing can be expensive on MCUs without hardware multiply-accumulate (MAC) units. On Cortex-M4/M7 cores with the DSP extension, the SIMD MAC instructions make FIR convolution practical at audio rates; on smaller cores such as Cortex-M0 or 8-bit AVR/PIC parts, long FIR filters may be replaced by IIR approximations precisely because IIR filters achieve a given frequency response with far fewer coefficients and operations per sample.
Knowing the impulse response also enables system identification: inject a known signal (or a near-impulsive transient), capture the output, and characterize an unknown physical system -- a sensor, actuator, or channel. This measured impulse response can then be used to design a matching or compensating filter, as discussed in "FIR Filter to Match Any Magnitude and Phase Response".
Learn this in DSP Foundations
Discussed on DSPRelated
Frequently asked
Why does knowing the impulse response completely characterize an LTI system?
For an LTI system, any input can be decomposed into a weighted, time-shifted sum of impulses. Because the system is linear, the output is the same weighted, time-shifted sum of impulse responses. Because it is time-invariant, each shifted impulse produces the same shape of response, only shifted in time. The output therefore equals the
convolution of the input with the impulse response -- no other information about the system is needed.
What is the difference between an impulse response and a step response?
The step response is the output when the input is a unit step (0 for t<0, 1 for t>=0). Because a step is the running sum (discrete integral) of an impulse, the step response is the running sum of the impulse response. The two representations carry equivalent information; engineers often prefer the step response when tuning control loops because rise time, overshoot, and settling time are visually apparent.
How do FIR and IIR filters differ in terms of their impulse responses?
An
FIR (finite impulse response) filter has an impulse response that is exactly zero after a finite number of samples -- equal to the filter order. An
IIR (infinite impulse response) filter has feedback, so its impulse response continues indefinitely, decaying toward zero for a stable filter. In practice this means FIR filters have guaranteed stability and
linear phase options, while IIR filters can approximate a desired
frequency response with many fewer coefficients and lower per-sample computation. 'The First-Order IIR Filter -- More than Meets the Eye' examines this trade-off in detail.
How is an impulse response measured on real hardware?
Apply the closest practical approximation to an impulse -- a single maximum-amplitude sample followed by zeros in discrete-time, or a narrow pulse in continuous-time -- and record the output. In practice, noise limits accuracy, so longer pseudo-random test sequences (MLS or swept sine) are often used instead; the impulse response is then extracted by
cross-correlation or
deconvolution. The 'Instant
CIC' post demonstrates how CIC filter behavior can be understood analytically from the impulse response without hardware measurement.
Why might a long impulse response be problematic on an embedded target, and how is it typically handled?
A direct
FIR implementation requires one multiply-accumulate per coefficient per output sample, so a 1000-tap filter at 48 kHz demands 48 million MACs per second -- feasible on a Cortex-M4 with DSP extensions but prohibitive on a Cortex-M0 or 8-bit MCU. Common approaches include replacing the FIR with an
IIR approximation (far fewer coefficients for the same frequency selectivity), truncating or windowing the impulse response to reduce tap count, or using fast-
convolution via
FFT when block latency is acceptable. 'Impulse Response Approximation' covers several of these techniques.
Differentiators vs similar concepts
Impulse response is sometimes conflated with
frequency response, but they are complementary representations of the same system: the frequency response is the
Fourier transform of the impulse response. Knowing one is equivalent to knowing the other for LTI systems, but each is more convenient in different contexts -- the frequency response is easier to interpret for filter design, while the impulse response is more direct for
convolution and time-domain simulation. The impulse response should also be distinguished from the step response (output to a unit step input), which is the cumulative sum of the impulse response and is more commonly used in control-system analysis.