Accuracy Dashboard
WDF engine output vs ngspice golden references — every circuit, real dB errors, known gaps included.
This page shows how closely the PedalKernel WDF engine reproduces its ngspice golden references, circuit by circuit. Every panel is generated from committed golden .npy files — the engine’s wave-digital-filter output measured against SPICE ground truth — by tools/dashboard/generate_dashboard.py
. For how the goldens themselves are produced (ngspice decks, the validation harness, and why goldens are never WDF-bootstrapped), see the Validation
chapter.
This is a mid-campaign snapshot, not a victory lap. Failing circuits are shown, not hidden, and the headline numbers include accuracy gaps we are still working through. Where the engine diverges from SPICE, you will see exactly where and by how much.
How to read the metrics. Each circuit is scored on a handful of dB error figures comparing WDF output against the ngspice golden:
- RMS — normalized RMS error (dB) across the whole signal.
- Peak — peak error (dB), the worst-case sample deviation.
- Spectral — spectral error (dB), how the magnitude spectra differ. Two figures are shown: Spec full (raw, across the entire data spectrum up to the oversampled Nyquist) and Spec audio (capped at the audio Nyquist marked below). Only Spec audio gates pass/fail — the engine’s anti-aliasing roll-off above the audio band is not counted against it, but Spec full is shown alongside so the gap is transparent.
- THD — THD error (dB), difference in total harmonic distortion (absent for some stimuli, shown as
—).
For all of these, lower is better. Large negative numbers (e.g. −200 dB) mean the WDF output is numerically identical to ngspice; positive numbers are real, audible divergence. The per-circuit panels below plot ngspice (cyan) against WDF (orange) in the time domain with a difference trace, plus an FFT magnitude overlay so spectral discrepancies are visible at a glance.
The dashed amber line on each FFT panel marks the audio Nyquist (half the base sample rate). Circuits run at an oversampled rate, and PedalKernel then anti-aliases — band-limiting the ultrasonic content before it downsamples back to the audio band — so WDF output deliberately rolls off above this line. The ngspice golden, by contrast, is a raw transient sampled at the oversampled rate: it keeps the full nonlinear harmonics and aliasing up to its own (much higher) Nyquist. So a large spectral-error figure driven by content to the right of the line is the anti-aliasing doing its job, not an accuracy defect — it is the single biggest reason the nonlinear circuits show high Spectral dB while sounding correct.
Current gaps
9 of 100 signals currently fail, clustered in 3 suites: compressor (2), extraction (3), pedals (4). Lower dB is better; large positive numbers below are real divergence from ngspice.
| Circuit | RMS (dB) | Peak (dB) | Spec full (dB) | Spec audio (dB) | THD (dB) | THD+N (dB) | Harm (dB) | E/O err (dB) | Notes |
|---|---|---|---|---|---|---|---|---|---|
| compressor/fet_leveler_level_sweep/level_sweep | 0.0 | 0.0 | 320.1 | 228.4 | 90.8 | — | — | — | |
| compressor/fet_leveler_tone_burst/tone_burst | 0.0 | 0.1 | 178.7 | 62.9 | 47.4 | — | — | — | |
| extraction/mfb_highpass_controlled/sweep | -0.0 | -0.0 | 40.1 | 40.1 | — | — | — | — | |
| extraction/sallen_key_highpass/sine | 13.4 | 13.2 | 11.3 | 11.3 | 83.9 | — | — | — | |
| extraction/sallen_key_highpass/sweep | 13.4 | 13.1 | 44.6 | 44.6 | — | — | — | — | |
| pedals/bigmuff_stage/clean | 70.2 | 50.7 | 129.0 | 113.2 | 94.5 | — | — | — | |
| pedals/bigmuff_stage/clipping | 90.2 | 70.7 | 129.0 | 113.2 | 69.0 | — | — | — | |
| pedals/fuzz_core/clean | 7.7 | 1.8 | 160.6 | 139.3 | 110.7 | — | — | — | |
| pedals/fuzz_core/saturated | 26.8 | 12.4 | 158.1 | 138.2 | 58.4 | — | — | — |
By suite
| Suite | Pass / total | Pass ratio |
|---|---|---|
| active | 14 / 14 | |
| canonical | 23 / 23 | |
| compressor | 0 / 2 | |
| eq | 10 / 10 | |
| extraction | 8 / 11 | |
| linear | 7 / 7 | |
| nonlinear | 10 / 10 | |
| opamp | 6 / 6 | |
| pedals | 4 / 8 | |
| reactive | 6 / 6 | |
| stress | 1 / 1 | |
| tape | 2 / 2 |
Drift history
| Run | Timestamp | Commit | Pass rate | Passed / total |
|---|---|---|---|---|
| #1 | 2026-06-15T00:00:00Z | 0028e6cee | 91.0% | 91 / 100 |
| #2 | 2026-06-16T00:57:10Z | bbe8581 | 91.0% | 91 / 100 |
| #3 | 2026-06-16T02:33:44Z | 71aa3bb | 91.0% | 91 / 100 |
Accuracy matrices by suite
Each suite gets its own compact matrix: rows are circuits/signals, columns are RMS, Peak, and Spectral (audio) dB error against ngspice. Within every matrix the colour means the same thing — green = closer to the reference, red = further from it — so red cells are exactly where the engine is currently weakest. Row labels in orange currently fail. Click any matrix to open full resolution.
active 14 / 14 pass

canonical 23 / 23 pass

compressor 0 / 2 pass

eq 10 / 10 pass

extraction 8 / 11 pass

linear 7 / 7 pass

nonlinear 10 / 10 pass

opamp 6 / 6 pass

pedals 4 / 8 pass

reactive 6 / 6 pass

stress 1 / 1 pass

tape 2 / 2 pass

Per-circuit detail
active 14 / 14 pass












canonical 23 / 23 pass





















compressor 0 / 2 pass
eq 10 / 10 pass








extraction 8 / 11 pass









linear 7 / 7 pass





nonlinear 10 / 10 pass








opamp 6 / 6 pass




pedals 4 / 8 pass






reactive 6 / 6 pass


























