Filters from RC alone roll off slowly (20 dB/decade per pole). To get sharper filters in pre-DSP days, you needed inductors, but inductors are bulky, lossy, and hard to integrate. Active filters use op-amps plus RC to synthesize any pole-zero pattern you want, without any inductors at all. They dominate from DC to about 10 MHz, with passive LC and distributed (transmission-line) filters taking over above that.
5.1 Filter approximations: who picks the pole positions
The denominator of the transfer function can be chosen freely; different choices trade off passband flatness, transition-band sharpness, and group-delay flatness. The classical approximations:
- Butterworth. Maximally flat in the passband. No ripple. Slowest rolloff for a given order. The "I don't have a strong reason to pick anything else" default.
- Chebyshev type I. Equiripple in the passband, monotonic stopband. Sharper rolloff than Butterworth at the cost of passband ripple.
- Chebyshev type II (inverse Chebyshev). Smooth passband, equiripple stopband. Useful when stopband attenuation must hit a specific number.
- Bessel. Maximally flat group delay (linear phase). Slowest rolloff of all. Used where time-domain shape matters: pulse-shaping, audio, oscilloscope analog front-ends.
- Elliptic (Cauer). Equiripple in both passband and stopband. Sharpest possible rolloff for a given order. Used where you absolutely must hit tight transition-band specs.
Each approximation is just a choice of where to put the poles in the s-plane (Chapter 3). Butterworth puts them on a circle. Chebyshev puts them on an ellipse. Bessel puts them along a curve that maximizes group-delay flatness.
5.2 First-order section
A single RC plus a non-inverting buffer or a non-inverting gain stage. Gives one pole, dB/decade rolloff above the cutoff . Useful as a building block but rarely used alone for serious filtering: a single pole rolls off too slowly to discriminate between adjacent frequency bands.
5.3 Sallen-Key second-order filter (the workhorse)
The most common topology for a single-op-amp, second-order active filter. Works for low-pass, high-pass, and (with a slight rearrangement) band-pass.
Low-pass version:
R_1 R_2
V_in ─[==]──●───[==]──●── V+
│ │ │\│
[C_1] [C_2] │ \●─── V_out
│ │ │ /
GND GND ──│-/
│/ ●──── (feedback to V- via gain
divider, or just a follower)Derivation. Label the node between and as . The op-amp is wired as a unity buffer, so . Two KCL equations:
- At :
- At :
Solve algebraically for matched and any :
Compare to the standard second-order form:
Match coefficients: and . By choosing the ratio you control the damping ratio (and hence ). For a Butterworth response, , so . Pick nF and nF, then size to set the cutoff: for kHz, kΩ.
For the high-pass version, swap the resistors and capacitors in the input path. For band-pass, use the multiple-feedback (MFB) topology described next.
A practical Sallen-Key is a 5-component second-order filter (one op-amp, two resistors, two caps, plus the gain-setting divider if not unity). To build a fourth-order Butterworth, cascade two Sallen-Key stages with the right values. To build an eighth-order, four stages.
5.4 Multiple-feedback (MFB) topology
An alternative second-order topology with the op-amp in inverting configuration. Better for high-Q band-pass and notch designs because the gain and Q are easier to set independently. Three resistors and two caps, slightly more parts than Sallen-Key but better behaviour at high gain.
5.5 All-pass (phase) filters
Magnitude is flat (unity at all frequencies) but phase varies with frequency. Used to compensate group-delay distortion in cascaded filters or to build phase-shift networks for modulators (e.g., the SSB phasing method, Chapter 7). Built from a single op-amp with one RC in the input path arranged so the magnitudes balance but the phases do not.
5.6 Notch filters
Reject a single narrow frequency. Built either from a twin-T RC network plus an op-amp, or as a state-variable filter (three op-amps, simultaneously providing low-pass, band-pass, and high-pass outputs whose subtraction yields a notch). The most common application: rejecting 50/60 Hz mains hum from biomedical signals.
5.7 Switched-capacitor filters
Replace each resistor in an active filter with a switched capacitor. The "resistance" of a switched cap, switched at frequency , is . So changing the clock frequency changes every effective proportionally, sliding the entire filter response up or down in frequency.
This is brilliant for ICs because precise integrated resistors are hard but precise integrated capacitor ratios are easy (matched caps to 0.1% or better). Switched-capacitor filters dominate inside CODECs, AGC loops, and tunable analog blocks. Watch for the MAX264, MF10, LMC8038 and similar parts. The downside: the switching introduces clock noise and aliasing artifacts that need a pre-anti-alias and post-reconstruction LPF.
5.8 SPICE example: Sallen-Key low-pass
* Sallen-Key 2nd-order Butterworth low-pass, fc = 1 kHz
Vin in 0 AC 1
R1 in n1 11k
R2 n1 n2 11k
C1 n1 out 20n
C2 n2 0 10n
XU1 n2 out out +15 -15 uA741
.subckt uA741 1 2 3 4 5
* (placeholder; in real practice include the SPICE model)
.ends
.AC dec 100 10 100k
.PROBE V(out)
.ENDSweep AC, plot the magnitude. The cutoff is at kHz. Above the response rolls off at 40 dB/decade.
5.9 Python: filter design with scipy
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# Design a 4th-order Butterworth low-pass at 1 kHz cutoff
fs = 100_000 # 100 kHz "sample rate" for plotting
fc = 1_000 # 1 kHz cutoff
order = 4
b, a = signal.butter(order, fc, btype='low', fs=fs, analog=False)
w, h = signal.freqz(b, a, worN=4096, fs=fs)
plt.semilogx(w, 20*np.log10(abs(h)))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude (dB)')
plt.title('4th-order Butterworth LP, fc = 1 kHz')
plt.grid(True, which='both')
plt.show()Switch 'butter' to 'cheby1' (with a ripple parameter), 'cheby2', 'bessel', or 'ellip' to compare approximations. Plot magnitude and group delay; the trade-offs become visceral.
For analog active filters: scipy gives you the s-domain coefficients, which you then map onto Sallen-Key or MFB stage values using standard formulas.
5.10 Op-amp at high frequency: the GBW limitation
One thing every active-filter designer has to internalize: you cannot make a 1 MHz cutoff Butterworth with a 1 MHz GBW op-amp. The op-amp's own rolloff dominates and the filter shape gets ruined. Rule of thumb: pick an op-amp with at least 100x the desired cutoff frequency in GBW. For a 1 MHz active filter, use a 100 MHz op-amp. For a 10 kHz audio filter, the TL072's 3 MHz GBW is plenty.