A free, open-source training kit for learning fixture de-embedding.
This library provides synthesized S-parameter files demonstrating de-embedding concepts, pitfalls, and best practices..
Part of the OpenSNPTools ecosystem.
- Signal integrity engineers learning de-embedding for the first time
- Students in RF/microwave or high-speed digital courses
- Practitioners who want hands-on examples without buying expensive test fixtures
| File | Description | Equivalent P370 Board |
|---|---|---|
dut_microstrip_6cm.s2p |
6cm bare microstrip (ground truth) | Board #1 |
dut_microstrip_3cm.s2p |
3cm bare microstrip | Board #1a |
2xthru_50ohm_6cm.s2p |
6cm 2x-THRU, 50Ξ© nominal | Board #2 |
2xthru_52ohm_6cm.s2p |
6cm 2x-THRU, 52.5Ξ© (105% Zβ) | Board #3 |
fixture_with_vias.s2p |
Fixture with via transitions | Board #4 |
beatty_50_25_50.s2p |
Beatty impedance standard | Board #5 |
| # | Pitfall | What Goes Wrong |
|---|---|---|
| 01 | Good Reference | Baseline: what "correct" looks like |
| 02 | Impedance Mismatch | Β±5% Zβ causes 1-2 dB ripple |
| 03 | Poor Return Loss | RL < IL violates 5 dB rule β noise amplification |
| 04 | Non-Causal | Phase error β "ghost limbs" in TDR |
| 05 | Mode Conversion | Differential asymmetry β Scd/Sdc artifacts |
| 06 | Port Ordering | (1,3)/(2,4) vs (1,2)/(3,4) confusion |
| 07 | Calibration Drift | Thermal drift β passivity violations |
| 08 | Bandwidth Truncation | Measuring to 28 GHz for 25 Gbps β ringing |
| 09 | Wrong Algorithm | Symmetric method on asymmetric fixture |
| 10 | Microprobing | De-embed GSG probes (alt to $15K ISS cal) |
| 11 | Measured Striplines | Real-world data for correlation. We hope to build up a dataset over time! |
# Clone the repo
git clone https://github.com/OpenSNPTools/openSNPKit370.git
cd openSNPKit370
# Install dependencies
pip install -r requirements.txt
# Run your first example
cd examples/01_good_reference
python example_01.pyopenSNPKit370/
βββ README.md
βββ LICENSE # BSD-3-Clause
βββ requirements.txt
βββ CHANGELOG.md
β
βββ kit/ # Virtual P370 S-parameter files
β βββ README.md
β βββ dut_microstrip_6cm.s2p
β βββ dut_microstrip_3cm.s2p
β βββ 2xthru_50ohm_6cm.s2p
β βββ 2xthru_52ohm_6cm.s2p
β βββ fixture_with_vias.s2p
β βββ beatty_50_25_50.s2p
β
βββ examples/ # Pitfall demonstrations
β βββ 01_good_reference/
β βββ 02_impedance_mismatch/
β βββ 03_poor_return_loss/
β βββ 04_noncausal/
β βββ 05_mode_conversion/
β βββ 06_port_ordering/
β βββ 07_calibration_drift/
β βββ 08_bandwidth_truncation/
β βββ 09_wrong_algorithm/
β βββ 10_microprobing/
β βββ 11_measured_striplines/
β
βββ synthesis/ # Scripts that generate the kit
β βββ generate_kit.py
β
βββ docs/
βββ pitfall_guide.md
βββ theory_review.md
βββ figures/
| Parameter | Value |
|---|---|
| Material | Rogers RO4350B-equivalent (Dk=3.48, Df=0.0037) |
| Frequency | 10 MHz β 67 GHz |
| Trace geometry | ~22 mil width on 10 mil dielectric β 50Ξ© |
| Copper | 1 oz (35 Β΅m) with surface roughness |
| Via model | Pi-network (L β 80 pH, C β 35 fF) --> TBD!! |
| Connector | 1.85mm end-launch model |
- β Frequency-dependent conductor loss (skin effect)
- β Dielectric loss (Djordjevic-Sarkar model)
- β Surface roughness (Huray model)
- β Via resonances and parasitics
- β Connector discontinuities
- β Measurement noise floor (~-60 dB)
Purpose: Establish what "correct" looks like
Expected results:
- IL: -0.5 dB @ 10 GHz, -1.5 dB @ 50 GHz
- RL: < -25 dB across band
- Self-deembed residual: < 0.05 dB
Purpose: Show ripple from Β±5% manufacturing tolerance
Setup: 50Ξ© 2x-THRU with 52.5Ξ© fixture
Symptom: 1-2 dB ripple, standing waves
Lesson: Match your 2x-THRU impedance to your fixture
Purpose: "Cannot see through a wall" failure
Setup: Fixture with RL = -8 dB, IL = -10 dB
Symptom: Noise amplification, passivity violations
Lesson: Maintain RL - IL β₯ 5 dB headroom
Purpose: Show "ghost limbs" from phase error
Setup: Add 15Β° phase error (simulates connector mismatch)
Symptom: Pre-cursor energy in TDR (t < 0)
Lesson: Verify causality before trusting magnitude
Purpose: Show Scd/Sdc artifacts from asymmetry
Setup: One trace 0.5mm longer in differential pair
Symptom: Scd, Sdc rise from -40 dB to -25 dB
Lesson: Balance your differential fixtures
Purpose: Convention confusion
Setup: Same fixture, different port numbering
Symptom: Sdd21 shows zero, signal in wrong S-param
Lesson: Document and verify port conventions
Purpose: Show thermal degradation
Setup: T=0 (fresh cal) vs T=60 min (drifted)
Symptom: Directivity drops 50β35 dB, RL degrades
Lesson: Re-calibrate, especially for sensitive measurements
Purpose: Show artifacts from insufficient frequency range
Setup: Measured to 28 GHz vs 40 GHz for 25 Gbps
Symptom: Time-domain ringing, causality issues
Lesson: Measure 10% beyond your target frequency
Purpose: Symmetric method on asymmetric fixture
Setup: Via fixture with different left/right lengths
Symptom: > 1 dB self-deembed residual
Lesson: Use NZC (non-zero-centered) for asymmetric fixtures
Purpose: De-embed as alternative to expensive ISS cal substrates
Setup: GSG probe-to-probe THRU + probe-DUT-probe
Result: Removes pad parasitics, reveals structure
Lesson: de-embedding could be an easier path than ISS
| Tool | Description |
|---|---|
| openSNPQual | S-parameter quality checker (passivity, reciprocity, causality) |
| openSNPlot | S-parameter visualization |
| scikit-rf | Python RF/microwave library |
| IEEE 370 Reference Code | Official MATLAB implementation |
Contributions welcome! See CONTRIBUTING.md for guidelines.
Ideas for contributions:
- Add measured S-parameters (anonymized) for comparison
- Improve synthesis models
- Add more pitfall examples
- Create interactive Jupyter notebooks
- Translate documentation
BSD 3-Clause License β see LICENSE.
Free to use, modify, and distribute. Attribution appreciated.
- IEEE 370-2020: "Electrical Characterization of Printed Circuit Board and Related Interconnects up to 50 GHz"
- IPC-2141A: "Design Guide for High-Speed Controlled Impedance Circuit Boards"
- Keysight App Note 5989-5765EN: "The ABCs of De-Embedding"
- scikit-rf documentation
Author: Giorgi Maghlakelidze
Email: giorgi.snp [at] pm.me
LinkedIn: linkedin.com/in/giorgim
Issues: GitHub Issues
Made with β€οΈ for the Signal Integrity Community