TEM and GTEM cells

TEMCell combines geometry, verification, the e0y field factor, emission correlation, and immunity testing. The current production focus is on single-port GTEM cells.

Geometry and reference data

Geometry is part of the measurement history. Height and longitudinal position are related through the model defined for the particular cell. Measurements and reference data must refer to this geometry.

Two preparatory paths are available for later measurements:

Verification

Measures a plane at multiple probe positions. It evaluates field uniformity, TEM-mode dominance, required forward power, and AM headroom.

e0y

Measures the normalized field factor at one position. Emission evaluation may alternatively use the analytical e0y from the GTEM geometry.

Emission evaluation explicitly records the selected e0y source. When several suitable sources exist, one must be selected deliberately.

Multiple uniform areas and verification planes

A configuration can provide several named planes under uniform_areas. tem-verification.py and tem-immunity.py register every definition in the TEMCell history. The singular uniform_area key remains as a backward-compatible default:

UNIFORM_AREAS = {
    "ua_h1p0": {
        "name": "ua_h1p0",
        "h": 1.0,
        "width": 0.5,
        "height": 0.5,
        "center": (0.0, 0.5),
    },
    "ua_h1p5": {
        "name": "ua_h1p5",
        "h": 1.5,
        "width": 1.5,
        "height": 1.0,
        "center": (0.0, 0.75),
    },
}

cdict = {
    "uniform_areas": UNIFORM_AREAS,
    # backward-compatible default
    "uniform_area": UNIFORM_AREAS["ua_h1p5"],
}

One Measure_Verification call still measures exactly one area. measure_parameters[i]["uniform_area"] selects its name, while descriptions[i] names the associated dataset. Consecutive verification runs extend the same history pickle and store geometry, points, raw data, and evaluation separately for each description. The area definition itself contains no measurement values.

A later immunity run loads this history and presents the available verification datasets for selection. When eut_h or eut_z is configured, datasets are ordered by height difference from the EUT position. Height interpolation may be offered between two adjacent planes when both datasets contain the required common frequencies.

Automatic interpolation is intended only for technically compatible area families. Areas with different centers, lateral dimensions, or point coverage must not be combined merely because their heights bracket the target. The current immunity selection does not make an automatic decision from the lateral EUT position; such datasets require deliberate selection.

Virtual verification and e0y

python script/tem-verification.py \
    script/conf/tem-gtem-verification-virtual/conf.py
python script/tem-e0y.py \
    script/conf/tem-gtem-e0y-virtual/conf.py

Both workflows support preflight, autosave, and resume. The hardware templates additionally contain a HARDWARE_TEST.md with a staged commissioning procedure.

Logical graph mode and external switching

Measure_e0y, Measure_Verification, and Measure_Immunity receive the logical measurement-graph mode through the mode parameter. The regular GTEM scripts set it explicitly to "GTEM"; "TERM" represents the safe termination or diagnostic path. A local configuration may override the value in measure_parameters:

"measure_parameters": [{
    "dotfile": "immunity.dot",
    "mode": "GTEM",
    # further measurement parameters
}]

The measurement application does not know relay numbers or switch wiring. Those details belong to the measurement graph and its referenced instrument driver. A switch is declared as a context controller on its DOT node, while conditions select only logical paths:

sw [ini="sw_gtem.ini" context_controller="mode"]
gtem -> pmbwd [condition="MODE == 'GTEM'"]
term -> pmbwd [condition="MODE == 'TERM'"]

RF is switched off before every context transition. The controller plans the expected complete hardware state, applies a required mode change, and then reads the state back. A frequency-only change must not set the mode again. It therefore cannot silently override a safe TERM position selected externally in the meantime.

The state is checked before another context transition, before RFOn, and during instrument read operations. This is not an asynchronous background watchdog; checks occur at these safe program boundaries. If the observed state differs from the expected state or the read-back response is incomplete, mpylab switches RF off and pauses the measurement. The operator may abort or explicitly reapply the planned state. mpylab never switches back to GTEM automatically after such a mismatch.

Emission

The emission workflow measures disturbance voltages for the required EUT orientations and correlates them to an equivalent free-field electric-field strength. Its field factor may originate from an e0y measurement, a verification dataset, or the analytical GTEM formula.

A virtual workflow based on an e0y measurement is:

python script/tem-e0y.py \
    script/conf/tem-gtem-e0y-virtual/conf.py
python script/tem-emission.py \
    script/conf/tem-gtem-emission-virtual/conf.py

Alternatively, tem-gtem-emission-virtual-from-verification/conf.py demonstrates the use of a preceding verification. A configured limit enables selection of frequencies that require remeasurement with the detector associated with the limit. When no suitable limit is available, the measurement remains valid; only the detector-specific remeasurement is omitted.

Immunity

The immunity workflow uses reference powers and AM-headroom results obtained during verification:

python script/tem-immunity.py \
    script/conf/tem-gtem-immunity-virtual/conf.py

AM-headroom decisions

For 80 percent AM, verification approaches 1.8 times the carrier field and reduces the generator by 5.10545 dB. Corrected forward power is the normative measurement; a field-strength ratio is explicitly a non-normative proxy. Both methods propagate the uncertainty of the measured ratio, including shared SCUQ components, before converting it to dB.

Both methods use the nominal interval 3.10545...7.1 dB by default. The upper boundary follows IEC 61000-4-3:2020 and is deliberately also used as an engineering interpretation for IEC 61000-4-20:2022, whose older wording does not consistently resolve reductions above 5.1 dB. The withdrawn IEC 61000-4-3:2006 interpretation sheet supports the technical reasoning but is not presented as a current normative reference.

am_headroom_maximum_drop_db configures the TEMCell upper boundary and defaults to 7.1 (the low-level evaluator parameter is maximum_drop_db). Measurement uncertainty is propagated and reported but does not change either boundary by default. am_headroom_allow_upper_uncertainty=True can accept overlap only at the upper boundary; the nominal lower boundary is never relaxed. am_headroom_coverage_factor sets the coverage factor for this option. Shared calibration contributions can cancel in the high-to-reduced ratio, while independent type-A scatter remains.

Before exposure, the workflow checks geometry, frequency coverage, available field strengths, amplifier protection, and EUT monitoring. Manual operator intervention remains available when additional automatic EUT monitoring is configured. The common EUT event and assessment contract keeps disturbance, observations, and performance criterion separate. Configuration and custom monitor implementations are covered by the EUT monitoring guide.

Reports

tem-report.py creates a modular HTML/PDF report with separate figures and tables from the complete pickle history. Several TOML files can add or override report metadata in layers. tem-verification-report.py remains available for a focused verification report.