Skip to content

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.