>
section 12 of 174 min read

12. S-Parameters: The Language of Microwaves

This section is conceptually critical. At low frequency we describe two-port circuits with ZZ, YY, or hh parameters, all of which require either short-circuit or open-circuit terminations. At microwave, those terminations are either impossible to realize accurately (a short at 10 GHz has uncontrolled inductance) or they cause oscillation in active devices (open the gate of a HEMT and it will oscillate). We need a parameter set that uses only terminated (typically 50 Ω) ports. Enter scattering parameters.

12.1 The two-port S-parameter definition

Consider a two-port network. Define incident wave a1a_1 entering port 1, reflected wave b1b_1 leaving port 1, and similarly a2a_2 and b2b_2 at port 2. All waves are normalized so a2|a|^2 is power flowing into the port and b2|b|^2 is power flowing out. Then

(b1b2)=(S11S12S21S22)(a1a2)\begin{pmatrix}b_1 \\ b_2\end{pmatrix} = \begin{pmatrix}S_{11} & S_{12} \\ S_{21} & S_{22}\end{pmatrix}\begin{pmatrix}a_1 \\ a_2\end{pmatrix}

The four parameters are:

  • S11=b1/a1a2=0S_{11} = b_1/a_1\,|_{a_2 = 0}: input reflection with output terminated. Input return loss.
  • S21=b2/a1a2=0S_{21} = b_2/a_1\,|_{a_2 = 0}: forward transmission. Gain or insertion loss.
  • S12=b1/a2a1=0S_{12} = b_1/a_2\,|_{a_1 = 0}: reverse transmission. Reverse isolation.
  • S22=b2/a2a1=0S_{22} = b_2/a_2\,|_{a_1 = 0}: output reflection with input terminated. Output return loss.

The "a=0a = 0" condition is achieved by terminating the port in a matched load (50 Ω). No open or short required.

12.2 Why S-parameters are stable at GHz

Two reasons.

First, realizability. Every cable and connector at GHz approximates 50 Ω closely. So presenting a 50 Ω termination is a calibrated, achievable condition. A short circuit at 10 GHz, by contrast, has uncontrolled lead inductance that varies wildly with mounting; an "open" has uncontrolled stray capacitance. Z- and Y-parameter measurements that depend on shorts and opens are uncontrollable.

Second, stability. Active two-ports (like a HEMT) often oscillate when their input or output is presented with an open or short. Z- and Y-parameter measurement requires exactly that, so the measurement itself can break the device. S-parameters use 50 Ω terminations, which are passive and damping; the device under test stays stable during measurement.

12.3 Useful identities

  • Reflection coefficient = S11S_{11} when port 2 is matched. So return loss in dB is 20log10S11-20\log_{10}|S_{11}|.
  • Insertion loss = 20log10S21-20\log_{10}|S_{21}| in dB (or gain = +20log10S21+20\log_{10}|S_{21}| for amplifiers).
  • Reciprocal networks (passive, no ferrites): S12=S21S_{12} = S_{21}.
  • Lossless networks: S2|S|^2 matrix is unitary, SHS=IS^{H}S = I.
  • Symmetric networks (input and output identical): S11=S22S_{11} = S_{22}.

12.4 Multi-port S-parameters

For an NN-port network, SS is N×NN \times N. A circulator has a 3-port matrix with S21=S32=S131S_{21} = S_{32} = S_{13} \approx 1 and other entries near 0. A magic-T has the 4-port matrix described in Section 10.5. S-parameters generalize cleanly to any number of ports.

12.5 De-embedding

You measure a chip on a fixture and want chip-only S-parameters. De-embedding is the math that subtracts out the fixture. Measure the fixture alone (with a "thru" or "open" or "short"), characterize its SS matrix, then compute the chip's matrix from the cascaded measurement. Standard calibration techniques for this include TRL (Thru-Reflect-Line) and SOLT (Short-Open-Load-Thru). VNA software does this automatically once calibration standards are measured.

12.6 Working with S-parameters in Python

scikit-rf is the open-source Python library every modern RF engineer uses. A taste:

python
import skrf as rf
import numpy as np
 
# Load a Touchstone S2P file (the standard format for 2-port S-parameters)
amplifier = rf.Network('lna_data.s2p')
 
# Frequency vector and S-parameter magnitudes
f_ghz = amplifier.f / 1e9
gain_db = 20 * np.log10(np.abs(amplifier.s[:, 1, 0]))  # |S21|
return_loss_db = -20 * np.log10(np.abs(amplifier.s[:, 0, 0]))  # -|S11|
 
# Find peak gain frequency
peak_idx = np.argmax(gain_db)
print(f"Peak gain {gain_db[peak_idx]:.2f} dB at {f_ghz[peak_idx]:.2f} GHz")
 
# Cascade two networks (e.g. amp followed by attenuator)
attenuator = rf.Network('att_10dB.s2p')
chain = amplifier ** attenuator  # ** is the cascade operator in skrf
chain.write_touchstone('chain_output')
 
# Plot Smith chart of input impedance
import matplotlib.pyplot as plt
amplifier.plot_s_smith(m=0, n=0)  # S11 on Smith chart
plt.show()

The .s2p Touchstone files are produced by every commercial VNA (Vector Network Analyzer). Format is simple text: a header with frequency units and reference impedance, then rows of frequency | S11mag S11phase | S21mag S21phase | S12mag S12phase | S22mag S22phase.

12.7 Two-port S-parameter network diagram

rendering diagram...

Each SijS_{ij} is a complex coefficient mapping incident wave at port jj into reflected wave at port ii.