Impedance Tolerance Analysis¶
The standalone Impedance Calculator includes a "Manufacturing tolerance" section that runs a Monte Carlo sweep on the solved Z₀ to estimate the ±3σ band, worst-case envelope, and yield against the user's target impedance.
What it does¶
Once a nominal Z₀ has been solved on any of the supported topologies (microstrip, covered, embedded, stripline, GCPW), expanding the Manufacturing tolerance panel and clicking Run tolerance analysis draws ~500 perturbed parameter sets and re-evaluates Z₀ for each. The panel displays:
- Headline stats: nominal Z₀, sample mean, ±3σ band, worst-case min/max, yield within target ± bracket, samples evaluated
- A 32-bin Z₀ histogram
- Top-3 sensitivity bars showing the signed Δ Z₀ at +1σ for each parameter (width, height, thickness, Dk, Df, gap, cover thickness, cover Dk)
- A clamp-warning when more than 1 % of samples hit a physical floor (for example ε_r < 1.5 or geometry < 1 µm)
Default tolerances¶
The defaults follow IPC-6012 Class 2 controlled-impedance practice with a material-family-aware Dk override:
| Parameter | 3σ default | Source |
|---|---|---|
| Trace width (w) | ±0.5 mil | IPC-6012 Class 2 etch tolerance |
| Dielectric h | ±10 % | IPC-6012 / fab vendor consensus |
| Copper t | ±10 % | IPC-6012 |
| Dk (Rogers/MEGTRON/Tachyon/Astra) | ±2 % | Datasheet ranges |
| Dk (FR4 family / Isola / N4000) | ±5 % | Datasheet ranges |
| Dk (unknown material) | ±5 % + flag | Conservative fallback |
| Df | ±10 % | Datasheet ranges (typical) |
| GCPW gap | ±0.5 mil | Etch tolerance, same as width |
| Cover thickness | ±10 % | Solder-mask print tolerance |
| Cover Dk | ±5 % | Solder-mask datasheet ranges |
When a material name does not match either family pattern, the panel
shows a (defaults conservative) chip next to the assumed-tolerance
caption to make the fallback explicit.
Advanced overrides¶
Click Advanced ▾ to open a per-parameter form. Each row exposes
the 3σ value, the distribution (Normal or Uniform), and there is a
sample-count selector (250/500/1000/2000) plus a yield-bracket selector
(±5 % or ±10 %). Reset to defaults re-derives the spec from the
material family of the currently-selected dielectric.
Determinism & performance¶
The Monte Carlo runner uses a seeded mulberry32 PRNG keyed off the
{operating-point, tolerance-spec} pair, so identical inputs always
produce identical histograms. The runner imposes a 1.5 s wall-clock
budget per run and stops early at the next sample boundary if it
overruns; the returned result includes a stoppedEarly flag and the
panel shows a quiet "stopped early" caption when that happens.
Feature flag¶
The section is gated on VITE_FF_IMPEDANCE_TOLERANCE, which defaults
to on. Set the flag to false in the repo-root .env to hide the
section completely (no DOM, no console errors).
Architecture¶
| Layer | File |
|---|---|
| Pure runner | frontend/src/services/impedance/toleranceAnalysisService.ts |
| Defaults table | frontend/src/services/impedance/toleranceDefaults.ts |
| Operating-point | frontend/src/services/impedance/toleranceOperatingPoint.ts |
| Hook | frontend/src/hooks/impedance/useImpedanceTolerance.ts |
| Panel UI | frontend/src/components/Calculators/Impedance/ToleranceAnalysisPanel.tsx |
| Advanced form | frontend/src/components/Calculators/Impedance/ToleranceAdvancedForm.tsx |
| Mount point | frontend/src/components/Calculators/ImpedanceCalculator.tsx |
The runner has zero React imports — it can be reused later from the multi-layer stackup designer or the link-budget calculator without pulling in component-tree dependencies.