skrf.calibration.calibration.determine_line(thru_m, line_m, line_approx=None)[source]

Determine S21 of a matched line.

Given raw measurements of a thru and a matched line with unknown s21, this will calculate the response of the line. This works for lossy lines, and attenuators. The line_approx is an approximation to line, this used to choose the correct root sign. If left as None, it will be estimated from raw measurements, which requires your error networks to be well matched (S_ij >>S_ii).

This is possible because two measurements can be combined to create a relationship of similar matrices, as shown below. Equating the eigenvalues between these measurements allows one to solve for S21 of the line.

\[ \begin{align}\begin{aligned}\begin{split}M_t = X \cdot A_t \cdot Y \\ M_l = X \cdot A_l \cdot Y\\\end{split}\\\begin{split}M_t \cdot M_{l}^{-1} = X \cdot A_t \cdot A_{l}^{-1} \cdot X^{-1}\\\end{split}\\\begin{split}eig(M_t \cdot M_{l}^{-1}) = eig( A_t \cdot A_{l}^{-1})\\\end{split}\end{aligned}\end{align} \]

which can be solved to yield S21 of the line


This relies on the 8-term error model, which requires that switch terms are accounted for. specifically, thru and line have their switch terms unterminated.

  • thru_m (Network) – raw measurement of a flush thru

  • line_m (Network) – raw measurement of a matched transmissive standard

  • line_approx (Network) – approximate network the ideal line response. if None, then the response is approximated by line_approx = line/thru. This makes the assumption that the error networks have much larger transmission than reflection