A battery-powered analog audio analyzer that splits a stereo input into two bands and drives an LED from each. The circuit runs entirely on op-amps and discrete parts (no microcontroller, no DSP) from a single 9 V cell.
I designed the two filter stages that set what the analyzer actually responds to: picking the
corner frequencies, solving the Sallen-Key equations for every resistor and capacitor, simulating
the result in KiCad, assembling the board, and then measuring the real hardware against the
prediction on a network analyzer. Both corners came in within 3.7 % of the hand calculation.
Full derivation and method in docs/report.pdf.
3.5 mm in ──▶ AC summing ──┬──▶ Sallen-Key ──▶ peak ──▶ comparator ──▶ PWM ──▶ LED2
(L + R) amp │ low-pass detector ▲ NMOS
│ │
│ triangle-wave osc
│
└──▶ Sallen-Key ──▶ peak ──────────────────▶ NMOS ──▶ LED1
high-pass detector
Power comes from one 9 V battery through a PMOS polarity-protection stage into a TLE2426 rail splitter, which synthesizes the mid-supply reference the op-amps need to swing both ways on a single cell. The eight op-amp stages are four LMC6482 duals (U2–U5).
Every block is separated by a header (J7–J14), so a stage can be unshunted and driven or probed on its own. That is how the filter measurements below were taken without the rest of the chain loading the result.
Both filters are second-order Sallen-Key sections with the op-amp wired as a unity-gain
buffer, so K = 1 and the corner frequency reduces to
f_c = 1 / (2π · √(R₁R₂C₁C₂))
The low-pass sits below the high-pass corner, so the two LEDs respond to genuinely different parts of the spectrum: bass energy on one, upper-mid on the other.
Simulated in KiCad, then measured on the assembled board with an Analog Discovery driving a 1 V sinusoid through a logarithmic sweep and its network analyzer recording the response.
| Filter | Theoretical f_c |
KiCad | Measured | Error vs theory |
|---|---|---|---|---|
| High-pass | 493.9 Hz | 479.73 Hz | 511.96 Hz | 3.66 % |
| Low-pass | 210.6 Hz | 211.84 Hz | 217.99 Hz | 3.51 % |
Both measured corners land within about 3.5 % of the hand calculation, and the measured curve tracks the simulation across the whole sweep rather than only at the corner. The residual error is what you would expect from 5 % passive tolerances, board parasitics, and the finite gain-bandwidth of the LMC6482. The design equations assume an ideal op-amp, and the measured corner sits above theory in both cases, which is the direction component tolerance and input capacitance push it.
The red annotations are build notes: the bypass capacitors C1–C4 and the input coupling caps C5/C6, plus C13, are left unpopulated on this build.
docs/filter-design-report.pdf my write-up: derivation, method, results, discussion
docs/schematic.pdf full schematic with build annotations
figures/ response plots and the schematic as images
images/board.jpg assembled board
images/board-original.jpg the same photo, uncut
KiCad (schematic capture and simulation) · Digilent Analog Discovery with WaveForms (waveform generator and network analyzer) · hand soldering, through-hole



