Two systems in a chain: flip Order and watch the output trace.
Does the order matter?
Two systems in a chain, wired one way round and then the other.
h1 = [1, 1], h2 = [1, -1]
Describe this picture
One plot of the output of two systems in a chain, wired “first h1, then h2” or “first h2, then h1”, chosen with the two “Order” buttons. The readout “Difference between orders” gives the largest gap between the two outputs.
Does the order matter?
Chain two guitar pedals together, an overdrive into a reverb, and you get one sound. Swap their order, reverb into overdrive, and you get a different sound, at least for most pairs of pedals. But two LTI systems (linear, time-invariant, exactly the kind convolution builds) are not like that. I can wire them in either order and the output never changes at all, and the last page’s own algebra is why.
Convolution is associative: . It’s also commutative: . Put those together and a cascade of two systems, output of the first fed into the second, can be replaced by one system with impulse response , and it doesn’t matter which of , you convolve first.
Take and and feed the chain . Convolving then first gives , and . Going the other way, (5.2’s own worked example), then Identical.
Go back to the chain at the top of the page and read Difference between orders. It stays at 0.00 no matter which way you set it: the output trace doesn’t move a single sample.
Two paths, or one
Now split, instead of chain. Run the same input through two systems in parallel, one path into , a separate path into , and add the two outputs together at the end, the way a “dry” signal and a reverb signal get mixed back together. Convolution distributes over addition, , so adding the two paths’ outputs gives exactly the same result as building one combined system with impulse response and running the input through that instead.
With the same and from before, : two paths added, or one system with , land on the same numbers either way.
Switch Route between “Two paths” and “One path” and read Difference between routes.
Two paths, or one
Add the outputs of two systems, or add their responses first and use one system.
Describe this picture
Two plots: the impulse responses , and their sum , and the output by the route chosen with the “Route” buttons, “Two paths” (two paths, added) or “One path” (one path, ). The readout “Difference between routes” gives the largest gap between them.
Notice it too stays at 0.00: whichever route you build, the output trace lands on the identical values, sample for sample.
Reading causality and stability off h
System-properties (4.2) tested causality and stability by trying inputs on a system and watching what came out. For an LTI system you don’t need to try anything: both properties are sitting right there in itself.
A system is causal when its output can’t depend on an input sample that hasn’t happened yet. For an LTI system that’s exactly the statement for every : a nonzero before would mean the system’s response has already started before the spike that’s supposed to cause it arrives.
A system is BIBO stable when every bounded input produces a bounded output. For an LTI system, add up the size of every sample of , ignoring sign, , and call that running total “the total of ‘s sizes.” If that total stays finite, however far out you add, the system is stable; if it keeps climbing without limit, it isn’t. Written with a summation sign, that total is .
Take for (a decaying echo settling toward zero). Its total of sizes is the geometric series , finite, so it’s stable. Take for instead (a growing feedback loop): that geometric series has ratio , so it diverges, and the system is unstable.
Step Impulse response through Echo, Smoother, Settling and Growing, and read Causal? and Stable?.
Reading causality and stability off h
Does h start before now? Does the total of its sizes stay finite?
Describe this picture
Two plots: the impulse response of the chosen system, and the running total of . Four “Impulse response” buttons choose “Echo”, “Smoother”, “Settling” or “Growing”. The readout “Causal?” says whether uses a sample before , and “Stable?” whether the total of its sizes stays finite.
Notice the Growing preset’s total never settles down, however far right you imagine looking, while the other three all reach a fixed number and stop climbing.
Does the response ever really stop?
Some impulse responses hit exactly zero after some point and stay there. Others only ever get smaller, forever, without ever landing on zero exactly. Both kinds show up constantly, and it’s worth having names for them.
An impulse response that’s exactly zero past some finite point is a finite impulse response, usually shortened to FIR. A three-sample moving average, , is one: it has exactly three nonzero samples and is zero everywhere else, so its total of sizes is automatically finite too, an FIR is always stable. An impulse response that goes on forever, even while shrinking toward zero, is an infinite impulse response, or IIR: the settling loop from the last instrument, , never actually reaches zero, no matter how far out you look.
Switch Response between “Finite (FIR)” and “Infinite (IIR)” and read Last nonzero sample.
Does the response ever really stop?
A three-sample average against the settling response from before.
Describe this picture
One plot of an impulse response from , with two “Response” buttons: “Finite (FIR)”, a three-sample average, and “Infinite (IIR)”, the settling response. The readout “Last nonzero sample” gives and “then exactly zero”, or says “never: it only keeps getting smaller”.
Notice the finite trace finds an exact last nonzero sample and stops there, while the infinite trace’s readout admits there isn’t one, it only keeps getting smaller.
What comes out when a spinning signal goes in?
Back in 3.4, a phasor was a point spinning around the origin at a constant rate. Measured once per sample, that rate is radians per sample, its across value tracing a cosine and its up value tracing a sine. Feed that spinning point into an LTI system, and something clean happens: it comes back out still spinning at exactly the same rate, only scaled in size and turned to a new starting angle. One fixed complex number does both jobs at once, and I’ll call it . A signal that a system hands back with nothing changed but its size and angle is called an eigenfunction of that system (from the German eigen, “its own”), and spinning points are eigenfunctions of every stable LTI system (for a growing like the one above, the sum that gives never settles, so there is no single number to scale by).
Here’s why. Convolving with gives . The sum doesn’t depend on at all, it’s one fixed complex number, so with . The input’s own spin rate, , survives untouched; only its size and angle change.
Take (a spike now, half a spike one sample later) and a phasor spinning a quarter turn per sample, . Directly, . That matches , a single complex number with magnitude and angle about (a little below the horizontal axis): the spinning point comes out its original size, turned back by , spinning at the exact same rate it went in at.
Not every system does this. A squarer, , is not LTI (4.2 already showed it fails linearity): squaring a phasor spinning at doubles its spin rate instead, , something no single scaling number could ever produce.
Switch System between Echo and Squarer and read What happened to it.
What comes out when a spinning signal goes in?
A point turning a quarter turn per sample, fed through an echo or a squarer.
Describe this picture
Two plots against sample number: the input, a point turning a quarter turn per sample, and the system’s output, each shown as its across (real) and up (imaginary) parts. Two “System” buttons choose “Echo” or “Squarer”, and the readout “What happened to it” says how the spin changed.
Notice the echo’s output always spins at the input’s own rate, just resized and turned, while the squarer’s output visibly spins twice as fast, a doubled rate that no single complex number could explain.
The maths behind it · eigenvalues
is literally an eigenvector equation, : for a stable LTI system, complex exponentials are its eigenvectors, and is its eigenvalue.
Where you’ll meet this
Reordering a cascade of guitar pedals or camera filters, or folding two parallel effects into one, both lean on the associativity and distributivity you just used. Reading stability straight off is exactly how a feedback design gets checked before it’s ever built, instead of by listening for it to run away. FIR and IIR are the two families every filter you’ll design later falls into. And the eigenfunction property, one fixed complex number turning a spinning input into a scaled, rotated version of itself, is the exact idea the frequency response builds on starting in Chapter 12.
Reference card
| Property | Statement | Notes |
|---|---|---|
| Associative | cascade order is free; combine into one | |
| Commutative | order of convolving the two responses doesn’t matter | |
| Distributive | parallel systems add their impulse responses | |
| Causal | for | output can’t depend on a sample that hasn’t arrived |
| BIBO stable | the total of ‘s sizes stays finite | |
| FIR / IIR | beyond some finite / never exactly zero | FIR is always stable |
| Eigenfunction property | , | seed of the frequency response |
That closes out the foundations, Chapters 1 through 5, every idea from here on builds on this set.