The formula
The convolution integral:
y(t) = (x ∗ h)(t) = ∫ x(τ) · h(t − τ) dτ (τ runs over all time)
Reading: flip h, slide it to position t, multiply it against the input point by point, and add up the overlap — the output right now is a weighted sum of the input's entire history.
For a causal system driven from t = 0:
y(t) = ∫₀ᵗ x(τ) · h(t − τ) dτ
Reading: only the past contributes, and the most recent past is weighted by the front of the impulse response.
The discrete version, which is what your DAQ code actually runs:
y[n] = Σₖ x[k] · h[n − k]
Reading: same flip-and-slide with sums instead of integrals; an N-sample record convolved with an M-tap filter produces N + M − 1 samples.
The convolution theorem:
F{x ∗ h} = X(f) · H(f) (Fourier)
L{x ∗ h} = X(s) · H(s) (Laplace)
Reading: convolution in the time domain is plain multiplication in the frequency domain — this one line is why transfer functions exist and why Bode plots work.
Where you meet it
- On the DAQ rack. Every moving-average smoother you apply to strain-gauge data is a convolution with a rectangle. A 3-point average of
[1, 2, 3, 4]is the convolution with[⅓, ⅓, ⅓]: the full output is[⅓, 1, 2, 3, 7⁄3, 4⁄3], and only the middle two samples —2and3, the true averages of(1, 2, 3)and(2, 3, 4)— come from the kernel fully overlapping the record. The other four are the kernel running off the ends, and they are not data. - At the scope or spectrum analyzer. What the instrument shows you is never the true signal. The displayed spectrum is the real spectrum convolved with the resolution-bandwidth filter shape; the displayed pulse edge is the real edge convolved with the front-end impulse response. If your rise time is close to the scope's, you are measuring the scope.
- On the shock and vibe stand. The response of a structure to an arbitrary force history is the force convolved with the structure's impulse response — Duhamel's integral, the backbone of shock response spectrum work. You characterize once with a hammer tap, then predict the response to any transient.
- At the review board. When someone stacks tolerances by root-sum-square, convolution is doing the work: the distribution of a sum of independent errors is the convolution of their distributions. Convolve two Gaussians of σ = 1 and σ = 2 and you get a Gaussian with variance 1² + 2² = 5. The RSS rule is the convolution theorem wearing a suit.
How it works
The reason convolution shows up everywhere is superposition. A linear time-invariant system is completely described by one function: its response h(t) to a unit impulse. Any input can be chopped into a train of scaled impulses, each launching its own copy of h(t), and the output is all those copies added up. That sum is the convolution integral. Know h(t) and you know everything the system will ever do — to any input.
Behavior worth having in your head:
- It never shortens: widths add. Durations add exactly (
N + M − 1samples), and for Gaussians the variances add. Cascade two filters and the composite impulse response is their convolution — never narrower than either one. Whether the output is smoother depends on the kernel: a nonnegative averaging kernel smooths, but a differentiator or high-pass kernel like[1, −1]is every bit as much a convolution, and it roughens the record and amplifies high-frequency noise. - It commutes.
x ∗ h = h ∗ x, and it is associative and distributive. Filter order in a linear chain does not change the math (it can change the overflow and noise behavior of fixed-point hardware, which is a different meeting). - Areas multiply. The integral of a convolution equals the product of the integrals. A filter with taps summing to 1 preserves DC; that is why moving-average taps are
1/Meach. - The convolution theorem is a speed trick, not just theory. Direct convolution of two million-point records costs about 10¹² multiplies. Transform, multiply, transform back costs on the order of 10⁸ operations. That four-orders-of-magnitude gap is why FFT convolution exists and why real-time filtering is possible at all.
The mistakes people actually make:
- FFT convolution without zero-padding. Multiplying two N-point FFTs gives circular convolution — the tail that should extend past the end wraps around and corrupts the front of the record. Pad both sequences to at least
N + M − 1before transforming. In a quick test with a 50-point and a 30-point sequence, skipping the pad shifted the first output sample by more than the sample's true value. This is the single most common DSP bug in test-department code. - Convolving with the kernel un-flipped. Convolution reverses one function; correlation does not. With a symmetric kernel (moving average, Gaussian) the error is invisible — until the day you switch to an asymmetric kernel or a measured impulse response and every result is time-reversed.
- Applying it where it does not belong. Convolution describes linear, time-invariant systems only. A saturating amplifier, a rattling joint, a thermally drifting sensor — none of them has an impulse response in this sense, and convolving with one measured on a good day predicts nothing.
- Trusting the edges. On finite records the kernel hangs off both ends. Whatever your software does there — zero-fill, mirror, wrap — those samples are an assumption, not a measurement. Cut them or flag them.
Sanity numbers, verified numerically: convolve a unit step with the RC low-pass impulse response h(t) = (1/RC)·e^(−t/RC) and you get 1 − e^(−t/RC) — 63.2 % of final value at t = RC, 90 % at t ≈ 2.30·RC. If your convolution code does not reproduce that, fix the code before the test.
History
The integral is older than its name by about a century and a half. Laplace used the operation in a probability memoir published in 1781, and Sylvestre Lacroix put the now-familiar form ∫ f(u)·g(x − u) du in print in his calculus treatise of 1797–1800 [1][2]. Fourier's 1822 Théorie analytique de la chaleur — the book that gave us the transform — leaned on the operation repeatedly [1][2].
The engineer's version of the story runs through Jean-Marie Duhamel, a French mathematician working on heat flow in solids with time-varying boundary temperatures. In an 1833 memoir, expanded into his 1834 doctoral theses, he built the solution for an arbitrary input by superposing responses to elementary ones — the principle that still carries his name and that structural dynamicists use every time they run a shock response spectrum [3][4][5].
The operation collected names for decades: Vito Volterra called it composition around 1910–1913 [1][2]; Gustav Doetsch attached the German Faltung — "folding" — in 1923, a name that points straight at the flip in the formula [2][6]. The English word arrived only in 1934, when Aurel Wintner translated Faltung as "convolution"; the name settled into general use over the following two decades [1][2][6]. The operation defined linear-system engineering long before anyone agreed on what to call it.
Related tools
- /tools/rc-filter — the impulse response
(1/RC)·e^(−t/RC)you convolve against - /tools/vibration-natural-freq — the spring–mass system whose impulse response feeds Duhamel's integral
- /tools/series-rlc-impedance — the frequency-domain side of the convolution theorem
- /tools/q-factor-bandwidth — how sharp a filter's
H(f)gets before itsh(t)rings
Sources
- https://en.wikipedia.org/wiki/Convolution
- https://www.embs.org/pulse/articles/history-convolution-operation/
- https://mathshistory.st-andrews.ac.uk/Biographies/Duhamel/
- https://www.encyclopedia.com/science/dictionaries-thesauruses-pictures-and-press-releases/duhamel-jean-marie-constant
- https://en.wikipedia.org/wiki/Duhamel%27s_integral
- https://link.springer.com/article/10.1007/s13540-024-00321-0