A system that only knows one trick
Stand at the bottom of a long playground swing and give it a push once every time it comes back. Push at exactly the swing's natural rhythm and it climbs higher and higher; push too fast or too slow and most of your effort is wasted. The swing responds to the frequency of your pushing, not to the shape of any single shove. A linear, time-invariant (LTI) system — a filter, an amplifier, a length of cable, a room full of echoes — behaves the same way. Feed it a pure sine wave and it answers with a sine wave at the exact same frequency, only resized and time-shifted. It never invents a new frequency. That single, almost boring fact is the deepest property an electrical engineer leans on.
Why does this happen? Because a sine wave (written as the complex exponential e^{j2πft}) is an eigenfunction of any LTI system: push it in, and the very same wave comes out, merely multiplied by a constant. That constant is complex — it carries a size and an angle — and it depends on the frequency f. We call it H(f), the frequency response. So the entire personality of an LTI system collapses into one complex-valued function of frequency. Tell me H(f) and I can predict the output for any input, no differential equations required.
INPUT spectrum FILTER's response OUTPUT spectrum
X(f) × H(f) = Y(f)
|X| |H| |Y| = |H||X|
### ‾‾‾\__ ##
#### \ ###
##### every freq \ keeps lows, ####
###### present \ kills highs ##
+---------- f +----------- f +----- ·
(highs gone)
Frequency f1: Y(f1) = H(f1) · X(f1) <- independent
Frequency f2: Y(f2) = H(f2) · X(f2) <- of each other
...
No frequency leaks into any other. Pure scaling per channel.Magnitude and phase: two plots, one story
Because H(f) is complex, it carries two pieces of news at every frequency. The magnitude |H(f)| says how much that sine wave is amplified or attenuated — a gain of 2 doubles its amplitude, a gain of 0.1 shrinks it to a tenth. The phase ∠H(f) says how far the output sine wave is nudged in time relative to the input — a lag of −90° at some frequency means that wave comes out a quarter-cycle late. We almost never plot them on the same axes. Instead we draw two stacked curves versus frequency: the magnitude response on top, the phase response below. Together they are the Bode plot.
Two scaling tricks make these plots readable across the enormous range of real electronics. First, frequency runs on a logarithmic axis, so each step is a decade (×10): 10 Hz, 100 Hz, 1 kHz, 10 kHz all sit equally spaced. Audio spans three decades, RF spans nine — a linear axis would be useless. Second, magnitude is drawn in decibels: |H| in dB = 20·log₁₀|H|. The factor of 20 is for amplitude ratios (power ratios use 10). This turns multiplication into addition, so cascading two filters just adds their dB curves, and the eye reads slopes instead of curves.
dB ratios worth memorising -------------------------- |H| = 1 -> 20·log10(1) = 0 dB (no change) |H| = 2 -> 20·log10(2) = +6 dB (double) |H| = 10 -> 20·log10(10) = +20 dB (×10) |H| = 0.707 -> 20·log10(.707) = -3 dB (the cutoff!) |H| = 0.5 -> 20·log10(.5) = -6 dB (half) |H| = 0.1 -> 20·log10(.1) = -20 dB (1/10) A slope of '-20 dB/decade' means: every ×10 in frequency, the output drops by a factor of 10.
Four shapes, four jobs: classifying filters
Once you read magnitude plots fluently, filters sort themselves by silhouette. A low-pass lets slow signals through and chokes off the fast ones — exactly what you want to smooth a noisy sensor reading or strip the carrier off a demodulated signal. A high-pass does the reverse, blocking DC and slow drift while passing crisp edges, the way an oscilloscope's AC-coupling input ignores a battery offset but shows you the ripple. A band-pass keeps a window of frequencies and rejects everything outside — a radio tuner picking one station out of the air. A band-stop (or notch) does the opposite, surgically removing one troublesome band, like a 50/60 Hz notch that kills mains hum in an ECG.
LOW-PASS HIGH-PASS
|H| |H|
‾‾‾‾\ /‾‾‾‾
\ /
\____ /____
+--------- f +--------- f
pass | stop stop | pass
BAND-PASS BAND-STOP (notch)
|H| |H|
/‾‾\ ‾‾\ /‾‾
/ \ \ /
__/ \__ \/
+--------- f +--------- f
keeps a window removes a windowWorked example: the RC low-pass, from parts to plot
Nothing makes H(f) concrete like the humblest filter in electronics: one resistor R feeding one capacitor C, with the output taken across the capacitor. At low frequencies the capacitor has all the time in the world to charge, so it tracks the input and the output equals the input — gain ≈ 1. At high frequencies the capacitor can barely begin charging before the input reverses, so it stays near 0 V — the signal is choked off. That is a low-pass filter, built from two parts and a wire.
To get H(f) we treat the circuit as a voltage divider using complex impedances. The capacitor's impedance is Z_C = 1/(j2πfC); the resistor's is just R. The divider gives H(f) = Z_C / (R + Z_C) = 1 / (1 + j2πfRC). Notice RC together set a single time constant τ = RC, and the cutoff lands exactly where the imaginary part equals 1, i.e. 2πf_c·RC = 1.
- Pick parts. Let R = 1.6 kΩ and C = 100 nF. Then τ = RC = 1.6×10³ × 100×10⁻⁹ = 1.6×10⁻⁴ s = 160 µs.
- Find the cutoff. f_c = 1 / (2πRC) = 1 / (2π × 1.6×10⁻⁴) ≈ 995 Hz — call it 1 kHz.
- Check the −3 dB point. At f = f_c, the term j2πfRC = j1, so H = 1/(1+j1), |H| = 1/√2 = 0.707 → exactly −3 dB. ✓
- Check the phase there. ∠H = −arctan(2πfRC) = −arctan(1) = −45° at the cutoff — the signature half-way phase lag of a 1st-order low-pass.
- Read the roll-off. A decade above f_c (10 kHz), |H| ≈ 1/10 → −20 dB. Each further decade drops another 20 dB. Slope = −20 dB/decade.
Vin o---[ R = 1.6k ]---+---o Vout
|
[ C ] 100nF
|
GND
H(f) = 1 / (1 + j·2pi·f·R·C), f_c = 1/(2pi·R·C) ~ 1 kHz
|H| in dB phase
0 ----____ 0 ---\__
-3 ‾·(f_c) -45 ·(f_c)
-20 ‾‾‾\__ -20dB/dec -90 ‾‾‾---
10 100 1k 10k 100k 10 100 1k 10k 100k
(Hz, log) (Hz, log)
freq |H| dB phase
100 Hz 0.995 -0.04 -5.7 deg
1 kHz 0.707 -3.0 -45 deg <- cutoff
10 kHz 0.0995 -20.0 -84 deg
100 kHz 0.010 -40.0 -89.4 degSame act, two costumes: filtering is convolution
We have been living in the frequency domain, where filtering is a clean multiply, Y(f) = H(f)·X(f). But the circuit itself lives in time, processing the signal sample by sample as it arrives. How does one multiplication in frequency translate back to time? Through the convolution theorem, the most useful bridge in all of signal processing: multiplication in frequency is convolution in time. The time-domain twin of H(f) is the impulse response h(t) — literally the wiggle the system spits out when you hit it with one infinitely sharp tap.
The link is beautifully tight: H(f) is the [[ee-fourier-transform|Fourier transform]] of h(t), and h(t) is the inverse transform of H(f). They are the same object in two languages. For our RC filter, hit it with an impulse and the capacitor charges instantly then bleeds out as h(t) = (1/RC)·e^{−t/RC} — a decaying tail of length set by τ. Convolving any input with that exponential tail is identical to multiplying its spectrum by 1/(1+j2πfRC). Two pictures, one filter.
TIME domain FREQUENCY domain
----------- ----------------
x(t) --[ * h(t) ]--> y(t) X(f) --[ × H(f) ]--> Y(f)
convolution multiplication
(hard) (easy)
h(t) <----- Fourier transform -----> H(f)
impulse response frequency response
(RC: a decaying e^{-t/RC} tail) (RC: 1/(1+j2pi f RC))
The two domains are bridged by the Fourier transform.
Pick whichever side makes your problem simple.Reading a Bode plot like a pro
Put it all together and a Bode plot becomes a story you can read at a glance. Scan the magnitude curve from left to right: a flat region is a passband, a downhill slope is a stopband approaching, and the slope itself (in dB/decade) tells you the order. Find the −3 dB points to mark the cutoffs and measure the bandwidth between them. Then glance at the phase curve to judge how much the filter will smear the timing of a fast signal — phase that swings hard near the cutoff warns of ringing and delay.
- Find the passband. The flat top of the magnitude curve — frequencies that pass with roughly full gain (0 dB).
- Mark the cutoff(s). Where the curve crosses −3 dB below the passband level. One crossing = low/high-pass; two = band-pass/stop.
- Read the bandwidth. The span of frequencies between cutoffs (or below the single cutoff of a low-pass).
- Read the roll-off slope. −20 dB/decade per order. Steeper = higher order = sharper but more phase distortion.
- Inspect the phase. Gentle phase = faithful timing; rapid phase swing near f_c = expect delay and ringing on sharp edges.