skrf.calibration.deembedding.IEEEP370_MM_ZC_2xThru
- class skrf.calibration.deembedding.IEEEP370_MM_ZC_2xThru(dummy_2xthru, dummy_fix_dut_fix, name=None, z0=50, port_order='second', bandwidth_limit=0, pullback1=0, pullback2=0, side1=True, side2=True, NRP_enable=True, leadin=1, verbose=False, *args, **kwargs)[source]
Creates error boxes from a 4-port from 2x-Thru and FIX-DUT-FIX networks.
Based on [I3E370].
A deembedding object is created with 2x-Thru (FIX-FIX) and FIX-DUT-FIX measurements, which are split into left (FIX-1_2) and right (FIX-3_4) fixtures with IEEEP370 Zc2xThru method.
When
Deembedding.deembed()
is applied, the s-parameters of FIX-1_2 and FIX-3_4 are deembedded from FIX_DUT_FIX network.This method is applicable only when there is 2xThru and FIX_DUT_FIX networks.
The possible difference of impedance between 2x-Thru and FIX-DUT-FIX is corrected.
The algorithm computes the length of the fixtures by halving the delay of 2x-Thru in time domain transmission. The propagation constant gamma is also determined from the 2xThru. It then peels the FIX-DUT-FIX time domain impedance profile iteratively in cycles of determining start impedance and deembedding a single time sample long transmission line.
Note
The port_order =’first’, means front-to-back also known as odd/even, while `port_order`=’second’ means left-to-right also known as sequential. `port_order`=’third’ means yet another numbering method. Next figure show example of port numbering with 4-port networks.
The scikit-rf cascade ** 2N-port operator use second scheme. This is very convenient to write compact deembedding and other expressions.
numbering diagram:
port_order = 'first' +---------+ -|0 1|- -|2 3|- +---------+ port_order = 'second' +---------+ -|0 2|- -|1 3|- +---------+ port_order = 'third' +---------+ -|0 3|- -|1 2|- +---------+
use Network.renumber to change port ordering.
Example
>>> import skrf as rf >>> from skrf.calibration import IEEEP370_MM_ZC_2xThru
Create network objects for 2xThru and FIX-DUT-FIX
>>> s2xthru = rf.Network('2xthru.s4p') >>> fdf = rf.Network('f-dut-f.s4p')
Create de-embedding object
>>> dm = IEEEP370_MM_ZC_2xThru(dummy_2xthru = s2xthru, dummy_fix_dut_fix = fdf, bandwidth_limit = 10e9, pullback1 = 0, pullback2 = 0, leadin = 0, name = 'zc2xthru')
Apply deembedding to get the DUT
>>> dut = dm.deembed(fdf)
Note
numbering diagram:
FIX-1_2 DUT FIX-3_4 +----+ +----+ +----+ -|1 3|---|1 3|---|3 1|- -|2 4|---|2 4|---|4 2|- +----+ +----+ +----+
Warning
There is one difference compared to the original matlab implementation [I3E370]:
FIX-2 is flipped (see diagram above)
References
[I3E370]https://opensource.ieee.org/elec-char/ieee-370/-/blob/master/TG1/IEEEP370mmZc2xthru.m commit 49ddd78cf68ad5a7c0aaa57a73415075b5178aa6
Methods
receiver filter in COM defined by eq 93A-20 As defined in 802.3-2022 - IEEE Standard for Ethernet annex 93A |
|
Advanced reflective DC point extrapolation. |
|
Enforce the Nyquist Rate Point. |
|
IEEEP370_MM_ZC_2xThru De-embedding Initializer |
|
Extrapolate a network to DC using interpolation for all S-parameters. |
|
enforces symmetric upon the first 10 points and interpolates the DC point. |
|
Perform the de-embedding calculation |
|
Extrapolate the network to DC using IEEE370 NZC algorithm. |
|
Compute step response to get the time-domain impedance from S-parameters. |
|
Make a time-domain step response from an impulse response. |
|
Compute the S-parameters of a transmission line. |
|
Peel N points of the network on both side and return the corresponding error boxes. |
|
Shift the whole network of N samples in time-domain. |
|
Shift one port of the network of N samples in time-domain. |
|
Perform the fixtures extraction. |
|
Create a perfect thru |