Parameter Conversion

The functions in this module convert between different representations of electrical n-port network parameters. Supported parameter types include s (scattering), t (scattering-transfer), u (inverse scattering-transfer), z (impedance), y (admittance), h (hybrid), g (inverse hybrid), a (ABCD), and b (inverse ABCD). While s, z and y parameters are defined for any number of ports (NxN matrices), t, u, h, g, a and b parameters are defined for two ports networks (2x2 matrices) only.

The s, t and u parameters are defined in relation to given reference impedances, z0. When converting between these types and the others, the reference impedances must be known. The z0 parameter can be a scalar, or a vector with length equal to the number of ports. It can be real or complex. If not specified, it defaults to 50 ohms.

All functions take an array-like input parameter, array. This parameter must have at least two dimensions, with the final two dimensions square and consistent with the parameter type. If the array has additional dimensions on the left, the matrix conversion functions operate on each matrix of the larger array and return a result in the same shape as the input.

In addition to the matrix conversions, the module provides functions that convert from each parameter type to a vector of input impedances giving the impedance looking into each port if the other ports are terminated in the reference impedances.

Two-Port Matrix Conversions

libvna.conv.atob(array)

Convert ABCD parameters to inverse ABCD parameters.

libvna.conv.atog(array)

Convert ABCD parameters to inverse hybrid parameters.

libvna.conv.atoh(array)

Convert ABCD parameters to hybrid parameters.

libvna.conv.atos(array, z0=50.0)

Convert ABCD parameters to scattering parameters.

libvna.conv.atot(array, z0=50.0)

Convert ABCD parameters to scattering-transfer parameters.

libvna.conv.atou(array, z0=50.0)

Convert ABCD parameters to inverse scattering-transfer parameters.

libvna.conv.atoy(array)

Convert ABCD parameters to admittance parameters.

libvna.conv.atoz(array)

Convert ABCD parameters to impedance parameters.

libvna.conv.btoa(array)

Convert inverse ABCD parameters to ABCD parameters.

libvna.conv.btog(array)

Convert inverse ABCD parameters to inverse hybrid parameters.

libvna.conv.btoh(array)

Convert inverse ABCD parameters to hybrid parameters.

libvna.conv.btos(array, z0=50.0)

Convert inverse ABCD parameters to scattering parameters.

libvna.conv.btot(array, z0=50.0)

Convert inverse ABCD parameters to scattering-transfer parameters.

libvna.conv.btou(array, z0=50.0)

Convert inverse ABCD parameters to inverse scattering-transfer parameters.

libvna.conv.btoy(array)

Convert inverse ABCD parameters to admittance parameters.

libvna.conv.btoz(array)

Convert inverse ABCD parameters to impedance parameters.

libvna.conv.gtoa(array)

Convert inverse hybrid parameters to ABCD parameters.

libvna.conv.gtob(array)

Convert inverse hybrid parameters to inverse ABCD parameters.

libvna.conv.gtoh(array)

Convert inverse hybrid parameters to hybrid parameters.

libvna.conv.gtos(array, z0=50.0)

Convert inverse hybrid parameters to scattering parameters.

libvna.conv.gtot(array, z0=50.0)

Convert inverse hybrid parameters to scattering-transfer parameters.

libvna.conv.gtou(array, z0=50.0)

Convert inverse hybrid parameters to inverse scattering-transfer parameters.

libvna.conv.gtoy(array)

Convert inverse hybrid parameters to inverse hybrid parameters.

libvna.conv.gtoz(array)

Convert inverse hybrid parameters to impedance parameters.

libvna.conv.htoa(array)

Convert hybrid parameters to ABCD parameters.

libvna.conv.htob(array)

Convert hybrid parameters to inverse ABCD parameters.

libvna.conv.htog(array)

Convert hybrid parameters to inverse hybrid parameters.

libvna.conv.htos(array, z0=50.0)

Convert hybrid parameters to scattering parameters.

libvna.conv.htot(array, z0=50.0)

Convert hybrid parameters to scattering-transfer parameters.

libvna.conv.htou(array, z0=50.0)

Convert hybrid parameters to inverse scattering-transfer parameters.

libvna.conv.htoy(array)

Convert hybrid parameters to admittance parameters.

libvna.conv.htoz(array)

Convert hybrid parameters to impedance parameters.

libvna.conv.stoa(array, z0=50.0)

Convert scattering parameters to ABCD parameters.

libvna.conv.stob(array, z0=50.0)

Convert scattering parameters to inverse ABCD parameters.

libvna.conv.stog(array, z0=50.0)

Convert scattering parameters to inverse hybrid parameters.

libvna.conv.stoh(array, z0=50.0)

Convert scattering parameters to hybrid parameters.

libvna.conv.stot(array)

Convert hybrid parameters to scattering-transfer parameters.

libvna.conv.stou(array)

Convert hybrid parameters to inverse scattering-transfer parameters.

libvna.conv.ttoa(array, z0=50.0)

Convert scattering-transfer parameters to ABCD parameters.

libvna.conv.ttob(array, z0=50.0)

Convert scattering-transfer parameters to inverse ABCD parameters.

libvna.conv.ttog(array, z0=50.0)

Convert scattering-transfer parameters to inverse hybrid parameters.

libvna.conv.ttoh(array, z0=50.0)

Convert scattering-transfer parameters to hybrid parameters.

libvna.conv.ttos(array)

Convert scattering-transfer parameters to scattering parameters.

libvna.conv.ttou(array)

Convert scattering-transfer parameters to inverse scattering-transfer parameters.

libvna.conv.ttoy(array, z0=50.0)

Convert scattering-transfer parameters to admittance parameters.

libvna.conv.ttoz(array, z0=50.0)

Convert scattering-transfer parameters to impedance parameters.

libvna.conv.utoa(array, z0=50.0)

Convert inverse scattering-transfer parameters to ABCD parameters.

libvna.conv.utob(array, z0=50.0)

Convert inverse scattering-transfer parameters to inverse ABCD parameters.

libvna.conv.utog(array, z0=50.0)

Convert inverse scattering-transfer parameters to inverse hybrid parameters.

libvna.conv.utoh(array, z0=50.0)

Convert inverse scattering-transfer parameters to hybrid parameters.

libvna.conv.utos(array)

Convert inverse scattering-transfer parameters to scattering parameters.

libvna.conv.utot(array)

Convert inverse scattering-transfer parameters to scattering-transfer parameters.

libvna.conv.utoy(array, z0=50.0)

Convert inverse scattering-transfer parameters to admittance parameters.

libvna.conv.utoz(array, z0=50.0)

Convert inverse scattering-transfer parameters to impedance parameters.

libvna.conv.ytoa(array)

Convert admittance parameters to ABCD parameters.

libvna.conv.ytob(array)

Convert admittance parameters to inverse ABCD parameters.

libvna.conv.ytog(array)

Convert admittance parameters to inverse hybrid parameters.

libvna.conv.ytoh(array)

Convert admittance parameters to hybrid parameters.

libvna.conv.ytot(array, z0=50.0)

Convert admittance parameters to scattering-transfer parameters.

libvna.conv.ytou(array, z0=50.0)

Convert admittance parameters to inverse scattering-transfer parameters.

libvna.conv.ztoa(array)

Convert impedance parameters to ABCD parameters.

libvna.conv.ztob(array)

Convert impedance parameters to inverse ABCD parameters.

libvna.conv.ztog(array)

Convert impedance parameters to inverse hybrid parameters..

libvna.conv.ztoh(array)

Convert impedance parameters to hybrid parameters..

libvna.conv.ztot(array, z0=50.0)

Convert impedance parameters to scattering-transfer parameters.

libvna.conv.ztou(array, z0=50.0)

Convert impedance parameters to inverse scattering-transfer parameters.

N-Port Matrix Conversions

libvna.conv.stoy(array, z0=50.0)

Convert scattering parameters to admittance parameters.

libvna.conv.stoz(array, z0=50.0)

Convert scattering parameters to impedance parameters.

libvna.conv.ytos(array, z0=50.0)

Convert admittance parameters to scattering parameters.

libvna.conv.ytoz(array)

Convert admittance parameters to impedance parameters.

libvna.conv.ztos(array, z0=50.0)

Convert impedance parameters to scattering parameters.

libvna.conv.ztoy(array)

Convert impedance parameters to admittance parameters.

Two-Port Matrix to Input Impedance

libvna.conv.atozi(array, z0=50.0)

Convert ABCD parameters to impedances into each port.

libvna.conv.btozi(array, z0=50.0)

Convert inverse ABCD parameters to impedances into each port.

libvna.conv.gtozi(array, z0=50.0)

Convert inverse hybrid parameters to impedances into each port.

libvna.conv.htozi(array, z0=50.0)

Convert hybrid parameters to impedances into each port.

libvna.conv.ttozi(array, z0=50.0)

Convert scattering-transfer parameters to impedances into each port.

libvna.conv.utozi(array, z0=50.0)

Convert inverse scattering-transfer parameters to impedances into each port.

N-Port Matrix to Input Impedance

libvna.conv.stozi(array, z0=50.0)

Convert scattering parameters to impedances into each port.

libvna.conv.ytozi(array, z0=50.0)

Convert admittance parameters to impedances into each port.

libvna.conv.ztozi(array, z0=50.0)

Convert impedance parameters to impedances into each port.

Mathematical Model

Let:

  • \(a_1\) and \(a_2\) be the incident voltages [1] into ports 1 and 2,

  • \(b_1\) and \(b_2\) be the reflected voltages out of ports 1 and 2,

  • \(v_1\) and \(v_2\) be the voltages at ports 1 and 2,

  • \(i_1\) and \(i_2\) be the currents into ports 1 and 2, and

  • \(Z_1\) and \(Z_2\) be the system impedances the device sees looking out of its ports

The relationships between the above for port 1 are:

\[\begin{split}\begin{aligned} a_1 &= \frac{1}{2} K_1 (v_1 + Z_1 i_1) \\ b_1 &= \frac{1}{2} K_1 (v_1 - Z_1^* i_1) \end{aligned} \quad \begin{aligned} v_1 &= \frac{Z_1^* a_1 + Z_1 b_1}{K_1 \, \Re(Z_1)} \\ i_1 &= \frac{a_1 - b_1}{K_1 \, \Re(Z_1)} \\ \end{aligned}\end{split}\]

and for port 2:

\[\begin{split}\begin{aligned} a_2 &= \frac{1}{2} K_2 (v_2 + Z_2 i_2) \\ b_2 &= \frac{1}{2} K_2 (v_2 - Z_2^* i_2) \end{aligned} \quad \begin{aligned} v_2 &= \frac{Z_2^* a_2 + Z_2 b_2}{K_2 \, \Re(Z_2)} \\ i_2 &= \frac{a_2 - b_2}{K_2 \, \Re(Z_2)} \end{aligned}\end{split}\]

where \(K_1\) and \(K_2\) are unit scaling constants:

\[\begin{split}\begin{aligned} K_1 &= \frac{1}{\sqrt{\left|\Re(Z_1)\right|}} \\ K_2 &= \frac{1}{\sqrt{\left|\Re(Z_2)\right|}} \end{aligned}\end{split}\]

and \(*\) is the conjugate operator. The same pattern applies for additional ports.

We can now show the definitions of each network parameter representation. The s (scattering) parameters are defined as:

\[\begin{split}\begin{bmatrix} b_1 \\ b_2 \end{bmatrix} = \begin{bmatrix} s_{11} & s_{12} \\ s_{21} & s_{22} \end{bmatrix} \begin{bmatrix} a_1 \\ a_2 \end{bmatrix}\end{split}\]

The t (scattering-transfer) parameters are defined as:

\[\begin{split}\begin{bmatrix} b_1 \\ a_1 \end{bmatrix} = \begin{bmatrix} t_{11} & t_{12} \\ t_{21} & t_{22} \end{bmatrix} \begin{bmatrix} a_2 \\ b_2 \end{bmatrix}\end{split}\]

The t parameters for a cascade of two-port networks is the left-to-right matrix product of the t parameters of each successive stage.

The u (inverse scattering-transfer) parameters are defined as:

\[\begin{split}\begin{bmatrix} a_2 \\ b_2 \end{bmatrix} = \begin{bmatrix} u_{11} & u_{12} \\ u_{21} & u_{22} \end{bmatrix} \begin{bmatrix} b_1 \\ a_1 \end{bmatrix}\end{split}\]

The u parameters for a cascade of two-port networks is the right-to-left matrix product of the u parameters of each successive stage.

The z (impedance) parameters are defined as:

\[\begin{split}\begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = \begin{bmatrix} z_{11} & z_{12} \\ z_{21} & z_{22} \end{bmatrix} \begin{bmatrix} i_1 \\ i_2 \end{bmatrix}\end{split}\]

The y (admittance) parameters are defined as:

\[\begin{split}\begin{bmatrix} i_1 \\ i_2 \end{bmatrix} = \begin{bmatrix} y_{11} & y_{12} \\ y_{21} & y_{22} \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix}\end{split}\]

The h (hybrid) parameters are defined as:

\[\begin{split}\begin{bmatrix} v_1 \\ i_2 \end{bmatrix} = \begin{bmatrix} h_{11} & h_{12} \\ h_{21} & h_{22} \end{bmatrix} \begin{bmatrix} i_1 \\ v_2 \end{bmatrix}\end{split}\]

The g (inverse hybrid) parameters are defined as:

\[\begin{split}\begin{bmatrix} i_1 \\ v_2 \end{bmatrix} = \begin{bmatrix} g_{11} & g_{12} \\ g_{21} & g_{22} \end{bmatrix} \begin{bmatrix} v_1 \\ i_2 \end{bmatrix}\end{split}\]

The a (ABCD) parameters are defined as:

\[\begin{split}\begin{bmatrix} v_1 \\ i_1 \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} \begin{bmatrix} v_2 \\ -i_2 \end{bmatrix}\end{split}\]

The a parameters for a cascade of two-port networks is the left-to-right matrix product of the a parameters for each successive stage. Don’t confuse the a matrix with the \(a_1\) and \(a_2\) variables above.

The b (inverse ABCD) parameters are defined as:

\[\begin{split}\begin{bmatrix} v_2 \\ -i_2 \end{bmatrix} = \begin{bmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{bmatrix} \begin{bmatrix} v_1 \\ i_1 \end{bmatrix}\end{split}\]

The b parameters for a cascade of two-port networks is the right-to-left matrix product of the b parameters for each successive stage. Don’t confuse the b matrix with the \(b_1\) and \(b_2\) variables above.

Footnotes

Examples

Use the conversion functions to analyze the 75 ohm to 50 ohm impedance matching L-pad.

import libvna.conv as vc
from math import sqrt

# System Impedances
Z1 = 75
Z2 = 50

# Resistor values for the impedance-matching L-pad
R1 = sqrt(Z1) * sqrt(Z1 - Z2)
R2 = sqrt(Z1) * Z2 / sqrt(Z1 - Z2)

# Z-parameters of the L-pad
Z = [[R1+R2, R2],
     [R2,    R2]]

# Convert from Z to S parameters
S = vc.ztos(Z, [Z1, Z2])
print("S =\n"
      f"  {S[0, 0].real:8.5f}{S[0, 0].imag:+8.5f}j"
      f"  {S[0, 1].real:8.5f}{S[0, 1].imag:+8.5f}j\n"
      f"  {S[1, 0].real:8.5f}{S[1, 0].imag:+8.5f}j"
      f"  {S[1, 1].real:8.5f}{S[1, 1].imag:+8.5f}j")

# Convert from S parameters to input impedances at each port
Zi = vc.stozi(S, [Z1, Z2])
print("Zi =\n"
      f"  {Zi[0].real:8.5f}{Zi[0].imag:+8.5f}j"
      f"  {Zi[1].real:8.5f}{Zi[1].imag:+8.5f}j")

Result:

S =
  -0.00000+0.00000j   0.51764+0.00000j
   0.51764+0.00000j   0.00000+0.00000j
Zi =
  75.00000+0.00000j  50.00000+0.00000j

From the S-parameters, we can see that L-pad attenuates the signal in both directions by 0.51764 (5.719 dB) and has no reflection. When we convert to input impedances, we can see that the L-pad has the expected impedances at each port.