Skip to content

System properties

Test a system against six yes/no questions, from "does it need the past" to the pair that defines LTI.

Before thisWhat is a system? (4.1)

Before this4.1
Chapter 4 · Lesson 2 of 2

First, the picture

Which input samples does the output use? Drag Check instant and watch which ones light up, for Gain and then for Accumulator.

Does the output need the past?

Pick a system, then drag the check instant to see which input samples its output actually used.

Input
Output
System
n = 6
Memory test
Passes: only this instant used
Describe this picture

Two plots of samples: the input, with the samples the output used at the check instant highlighted, and the output. Two “System” buttons choose “Gain” or “Accumulator”. The “Check instant” slider picks the instant nn, and the readout “Memory test” says whether the output there needs only that instant or every earlier one too.

Does the output need the past?

Some systems only ever look at what’s happening right now. A volume knob on a guitar amp doesn’t care what note you played a second ago; it just multiplies whatever’s arriving this instant. A running bank balance is different: today’s total depends on every deposit you’ve ever made, not just today’s.

I call a system memoryless if its output at any instant depends only on the input at that same instant, and say it has memory otherwise. The test is simple: pick an instant, and ask which input samples the output there actually used. If it’s just that one sample, the system has no memory; if it’s a whole run of earlier samples too, it does.

In the picture at the top of the page, the gain lights up only the sample directly under the check instant, and Memory test agrees. The accumulator lights up every earlier sample as well, because the accumulator’s output is a running total of everything so far.

Does it need the future?

A live effects pedal has to answer the moment a sample arrives; it can’t wait around for a sample that hasn’t happened yet. An editor smoothing an already-recorded track has no such limit, since the whole file already exists on disk. I call a system causal if its output never depends on any future input, only the present and the past; a system that does need a not-yet-arrived sample is non-causal.

Set System to Real-time delay first, read Causality test, then switch to Centered average and read it again.

Does it need the future?

Same highlighted-inputs idea, now flagging any sample that sits later than the check instant, marked here.

Input
Output
System
Causality test
Passes: never needs a future sample
Describe this picture

Two plots of samples: the input, with the samples used by the output at one fixed check instant highlighted and any sample later than that instant flagged, and the output. Two “System” buttons choose “Real-time delay” or “Centered average”, and the readout “Causality test” says whether the output needs the future.

The real-time delay passes, since a delay only ever looks backward. The centered average fails, because averaging around “now” needs one sample that hasn’t arrived yet, exactly the sample flagged on the input plot. That’s why a real-time effect can delay, but it can never average around the present the way an offline editor can.

Can you undo it?

If I hand you the output of a system and nothing else, can you tell me exactly what input produced it? A gain-of-2 block says yes: divide the output by 2 and you’re back to the original, every time. A rectifier, which reports only a signal’s size and throws away its sign, says no: an input of +3+3 and an input of −3-3 both come out as 33, so seeing a 33 on the output never tells you which one you started with.

I call a system invertible if some rule can always turn its output back into the exact input that made it. If two different inputs can ever produce the same output, no such rule exists, and the system isn’t invertible.

Set System to Gain and read Invertibility test, then switch to Rectifier and read it again.

Can you undo it?

Run the system forward, then try to get the original input back from the output alone.

Input
Output
Recovered (attempted inverse)
System
Invertibility test
Passes: input recovered exactly
Describe this picture

Three plots of samples: the original input, the system’s output (all that is measurable afterwards), and the input recovered from that output. Two “System” buttons choose “Gain” or “Rectifier”, and the readout “Invertibility test” says whether the recovered input matches, or on how many samples its sign is wrong.

The gain recovers the input exactly. For the rectifier, the recovered trace gets every size right but loses every negative sign, so the test reports how many samples came back wrong, a direct count of the inputs this system can never distinguish.

Does it stay under control?

A car’s suspension absorbs a bump and settles back down; a microphone held too close to its own speaker howls louder and louder until something clips. Both start from a perfectly ordinary, bounded input, but only one of them keeps its output bounded too. I call a system stable, or more precisely BIBO stable (bounded input, bounded output), if every input that stays within some fixed limit forever produces an output that also stays within some fixed limit forever. It’s a promise about every bounded input, not just the one you happen to try.

The last page’s feedback loop, y[n]=x[n]+a y[n−1]y[n] = x[n] + a\,y[n-1], is the cleanest place to see this: feed it a step input that jumps to 1 and stays there. With feedback gain a=0.5a = 0.5, the output climbs 1, 1.5, 1.75, 1.875, …1,\ 1.5,\ 1.75,\ 1.875,\ \dots, closing in on 2 and never going past it. With a=2a = 2 instead, it climbs 1, 3, 7, 15, …1,\ 3,\ 7,\ 15,\ \dots, doubling and then some at every step, with no ceiling in sight.

Drag Feedback gain up from a low value, past 1, and watch Running peak.

Does it stay under control?

A fixed, bounded step input into the feedback loop from the last page; watch the running peak as the feedback gain changes.

Output
Running peak
0.5
Stability test
Passes: bounded, peak settles
Running peak
1.99
Describe this picture

Two plots for a fixed step input into the feedback loop: the output, and its running peak. The “Feedback gain” slider sets aa, and two readouts show “Stability test”, passing (“bounded, peak settles”) or failing (“unbounded, peak keeps climbing”), and “Running peak”.

Below a gain of 1 it climbs for a while and then flattens out; at or above 1, Stability test flips to failing, and the running peak keeps climbing for as long as you let it run.

Does scaling and adding pass through?

Double the input to a gain block and the output exactly doubles too. Double the input to a squarer, a block that outputs x[n]2x[n]^2, and the output doesn’t double, it quadruples. That gap is the whole test.

I call a system linear if it passes both halves of the same idea, together called superposition: scaling the input by any constant scales the output by that same constant (homogeneity), and feeding the sum of two inputs gives exactly the sum of their two separate outputs (additivity). Written together, for any constants a,ba, b and any inputs x1,x2x_1, x_2:

T{a x1+b x2}=a T{x1}+b T{x2}T\{a\,x_1 + b\,x_2\} = a\,T\{x_1\} + b\,T\{x_2\}

Set System to Gain and read Linearity test, then switch to Squarer.

Does scaling and adding pass through?

Compare "output of 2x₁ + 1x₂" against "2×output(x₁) + 1×output(x₂)".

output of the sumsum of the outputs
System
Linearity test
Passes: the two traces match exactly
Describe this picture

One plot comparing two traces for a combined input a x1+b x2a\,x_1 + b\,x_2: “output of the sum” and “sum of the outputs”. Two “System” buttons choose “Gain” or “Squarer”, and the readout “Linearity test” says whether the traces match, or by how much they differ.

For the gain, “output of the sum” and “sum of the outputs” sit exactly on top of each other. For the squarer the two traces visibly pull apart, and the gap between them, reported right there in the readout, is itself a counterexample to linearity.

Does a delay just delay the output?

An ordinary echo doesn’t care when you make the sound; delay a clap by a second and its echo just arrives a second later than it otherwise would, unchanged in every other way. Now picture a stranger system that doubles whatever lands on an even-numbered sample and leaves odd samples alone. Delay the same input into that system by one sample, and every sample that used to be doubled is now left alone instead, and vice versa: the rule itself depends on which instant counts as “now.”

I call a system time-invariant if delaying its input by any amount just delays its output by that same amount, with nothing else changing. The test is to compare two orders of operation on the same input: shift it, then run it through the system, against running it through the system first and shifting the result afterward. Any mismatch between those two is a counterexample.

T{x[n−n0]}=y[n−n0],for every n0T\{x[n-n_0]\} = y[n-n_0], \quad \text{for every } n_0

Drag Delay amount back and forth and read Echo test, then Doubler test at the same delay values.

Does a delay just delay the output?

One delay slider, two fixed systems: compare shifting the input first against shifting the output last.

Echo
shift then processprocess then shift
Echo test
Passes: shifting first or last gives the same result
Even-sample doubler
shift then processprocess then shift
Doubler test
Fails: they mismatch by up to 0.90
1 samples
Describe this picture

Two plots, one for an echo and one for an even-sample doubler, each comparing “shift then process” with “process then shift”. One “Delay amount” slider, in samples, drives both. The readouts “Echo test” and “Doubler test” each say whether the two traces coincide or mismatch.

For the echo, “shift then process” and “process then shift” coincide at every delay you try. The doubler fails as soon as a shift changes whether a given sample lands on an even or odd index, and the readout reports exactly how far the two traces mismatch.

A system that’s both linear and time-invariant gets its own short name: LTI. That pairing is what lets the next page measure a system’s reply to a single spike, once, and from that one measurement predict its reply to absolutely any input.

Worked example

The squarer fails both halves of linearity. Take x1[0]=2x_1[0]=2 and x2[0]=3x_2[0]=3. Feeding the sum gives y(x1+x2)=(2+3)2=25y(x_1+x_2) = (2+3)^2 = 25, but summing the separate outputs gives y(x1)+y(x2)=4+9=13≠25y(x_1)+y(x_2) = 4+9 = 13 \ne 25: additivity fails. With a=2a=2 and x[0]=3x[0]=3, scaling first gives y(2x)=62=36y(2x) = 6^2 = 36, but scaling the output gives 2 y(x)=2(9)=18≠362\,y(x) = 2(9) = 18 \ne 36: homogeneity fails too.

The even-sample-doubler fails time invariance. Let T{x}[n]=2x[n]T\{x\}[n] = 2x[n] when nn is even, and x[n]x[n] unchanged otherwise, with input x[n]=δ[n−1]x[n]=\delta[n-1], a single spike at n=1n=1. Shift first, then process: delaying by 1 gives a spike at n=2n=2, an even index, so TT doubles it to 22. Process first, then shift: TT leaves the spike at n=1n=1 (odd) unchanged at 11, then the delay moves it to n=2n=2, still worth 11. The two orders disagree, 2≠12 \ne 1, a counterexample.

BIBO check on the feedback loop. y[n]=x[n]+0.5 y[n−1]y[n] = x[n] + 0.5\,y[n-1], fed a step input (x[n]=1x[n]=1 for n≥0n\ge0): y[0]=1y[0]=1, y[1]=1.5y[1]=1.5, y[2]=1.75y[2]=1.75, y[3]=1.875y[3]=1.875, converging toward 2, bounded. With feedback gain 2 instead, y[n]=2n+1−1y[n]=2^{n+1}-1, giving 1,3,7,15,…1, 3, 7, 15, \dots, unbounded.

Where you’ll meet this

Any audio effect you trust to run in real time, a live amp simulator or an in-ear noise canceller, has to be causal, since it can’t wait for samples that haven’t arrived. A compression step that throws information away, the way a rectifier throws away sign, can’t be undone back to the original exactly. And every feedback circuit, from a guitar pedal’s delay repeats to the howl of a microphone near its speaker, lives or dies by whether its feedback gain keeps it BIBO stable.

The maths behind it · linear maps

Superposition, T{a x1+b x2}=a T{x1}+b T{x2}T\{a\,x_1+b\,x_2\}=a\,T\{x_1\}+b\,T\{x_2\}, is exactly the definition of a linear map in linear algebra. Testing it here is the identical check used there for matrices.

Reference card

PropertyTestNotes
Memorydoes y[n]y[n] depend only on x[n]x[n]?memoryless if yes
Causalitydoes y[n]y[n] depend on any x[k]x[k], k>nk>n?causal if no
Invertibilitydoes some rule recover xx from yy for every input?fails if two inputs give one output
BIBO stability∣x[n]∣≤Bx\lvert x[n]\rvert\le B_x for all nn ⇒\Rightarrow ∣y[n]∣≤By\lvert y[n]\rvert\le B_y for all nnbounded input, bounded output
LinearityT{a x1+b x2}=a T{x1}+b T{x2}T\{a\,x_1+b\,x_2\}=a\,T\{x_1\}+b\,T\{x_2\}, for all a,b,x1,x2a,b,x_1,x_2additivity + homogeneity
Time invarianceT{x[n−n0]}=y[n−n0]T\{x[n-n_0]\}=y[n-n_0], for every n0n_0
LTIlinear and time-invariantnext page’s subject

End of lesson 4.2

Where to go next.

Phasorium
LibraryEvery lesson, in order

Parts

About Phasorium
Look