EMI Analyzer
Upload a KiCad board to see its copper, its stackup and a set of geometric EMI and EMC checks: where it radiates, what it conducts out through its cables, and where ESD and fast transients get in. An ESD discharge is simulated in ngspice and each cable gets a common-mode budget from an antenna model. Full-wave simulation with openEMS is experimental and switched off in this build.
New board
A .kicad_pcb, a zipped KiCad project, or a zip of your Gerber output. Gerbers must include the drill file and an IPC-D-356 netlist — they carry no net information on their own, so without one there is no way to tell which copper is which signal.
Board files are stored in DigitalOcean Spaces and processed by an EmbeddedCI worker — what that means.
Your boards
How the analysis works
Three stages run in this build, and all of them are quick. The fourth, full-wave simulation, is experimental and switched off.
- Ingest. A .kicad_pcb is parsed straight from its s-expression source, so nets, traces, vias, pads and the stackup arrive as they were drawn. Gerbers take a longer route: every copper layer is rasterised, its connected islands labelled, and the IPC-D-356 netlist coordinates dropped onto them to recover which island is which net. Both paths end at one normalised board model, and everything after this point reads only that.
- Geometric checks (seconds). Return paths and plane stitching, decoupling, length matching and impedance, and the layout details that make a board radiate. Then the other half of an EMC test: ESD protection at the connectors, shield and chassis grounding, reset lines that a transient can trip, and the power input and switching-regulator layout behind conducted emissions. Every check is in the table below. No solver is involved, which is why these run on any worker and finish while you wait.
- ESD simulation (on demand). An IEC 61000-4-2 contact discharge, simulated in ngspice on every line that leaves the board through an edge connector: the trace, the clamp — from its datasheet or a SPICE model you upload — its ground via, and the IC pin. Each line is compared with its clamp moved to the connector, and that difference is the number to act on.
- Full-wave solve (hours). openEMS, an EC-FDTD solver, over a region of interest you select. The worker meshes the geometry, excites the nets you nominate, and steps the fields through time on a rectilinear grid. Results come back as frequency-domain surface-current maps per layer, a near-field-to-far-field radiation pattern, and S-parameters. Whole-board solves are not offered: a 100 x 80 mm board meshed at 25 um is around 1.9 billion cells, which no amount of hardware makes practical.
The memory and runtime arithmetic behind a solve, and what the results can and cannot tell you, are on the limitations page. The published limits those results are read against are on the emission limits page.
What every board is checked for
19 checks run on every upload, in seconds, from the board geometry and stackup: what the board radiates and conducts out through its cables, and where ESD and fast transients get in. They say where to look. A solve on a selected region, or a near-field scan loaded onto the board, confirms what is actually radiating. Thresholds and which checks run can be set per board in an emi.rules.yaml placed next to the .kicad_pcb and uploaded with it in a zip.