ケーブルのような対称(始端と終端を逆にしても特性が変わらない)回路では S11 = S22, S21 = S12 ですから、 S11 と S21 を計算すればよいのですが、
S11 = (Zin1 - Zs) / (Zin + Zs) S21 = 2 * V2 / E1ですから、既に説明した伝送線路の入力インピーダンスと 伝送特性の計算で間に合います。
ネットワークアナライザを使うときの 最も重要な注意点は反射波と透過波の解釈が TDRや分布定数理論のそれとはまったく違うことです。
TDRや分布定数理論に於ける反射波は 伝搬する電磁波の反射そのものですが、 ネットワークアナライザのS11は 電源から試料に入射した反射波だけでなく、 それが試料終端に進んで、そこで反射した電磁波や、 それがまた試料始端で反射して試料終端で反射し、再度試料始端に戻るという、 無限の入射波と反射波の合計です。 回路的にはネットワークアナライザは 無限の時間が経過したあとの交流理論の世界、 TDRは有限時間の過渡現象理論の世界になります。
同様にS21も無限の時間が経過した後の、 透過波と反射波の合計ですから、 ネットワークアナライザのS パラメータでは 透過波と反射波が分離できません。 この点の誤解はインタネットや宣伝試料、実務書に至るまで、 実に広く存在していますので、 手痛い失敗をしないように注意してください。
こういった誤解を解くためにも、 シミュレーションは有効な手段となります。
以下、システムインピーダンス 50 Ωのネットワークアナライザに 3C-2V程度の同軸ケーブルを接続したときの シミュレーションプログラム例です。
ネットワークアナライザの場合も測定機の校正面と試料端接続部分の
また、実務では S11とS21からケーブルの二次定数を求めるプログラムを書いたり することも多いです。
/usr/bin/awk ' BEGIN { _Z0 = 75.0 # 特性インピーダンス (Ω) _a = 1.373e-6 # 減衰定数 = _a * sqrt(f) + _b * f _b = 8.385e-12 _v = 1/sqrt(2.3) # 速度係数 (ポリエチレン絶縁) _R = 0.0914 # 直流抵抗 (Ω/m) _C = 69e-12 # キャパシタンス (F/m) l = 5 # 試料長 (m) PI = atan2(0, -1) Vr = _v rs = 50 # ネットワークアナライザのシステムインピーダンス (Ω) z0 = _Z0 # 試料の特性インピーダンス (Ω) for (i = 1; i <= 100; i += 0.5) { f = i * 1e6 # 周波数 (Hz) F[i] = f w = 2 * PI * f a = _a * sqrt(f) + _b * f b = w / (2.99792458e8 * Vr) + a S11(rs, z0, a, b, l) AbsS11[i] = Abs(x, y) ArgS11[i] = Arg(x, y) S12(rs, z0, a, b, l) AbsS21[i] = Abs(x, y) ArgS21[i] = Arg(x, y) } N = i exit 0 } END { data = ".1 .45 .6 .90:.6 .95 .6 .90:.1 .45 .1 .40:.6 .95 .1 .40" split(data, v, ":") data = "abs(S11):arg(S11):Abs(S21):Arg(S21)" split(data, yl, ":") for (i = 1; i <= 4; i++) { print "v", v[i] print "x freq. MHz" print "y", yl[i] for (j = 1; j < N; j++) { if (i == 1) print F[j], AbsS11[j] else if (i == 2) print F[j], ArgS11[j] else if (i == 3) print F[j], AbsS21[j] else if (i == 4) print F[j], ArgS21[j] } } exit 0 } # S11 = (Zt - Zs) / (Zt + Zs) # Zs = z0 = 50 + j*0 function S11(rs, z0, x1, y1, l, x2, y2) { Zin(z0, x1, y1, l, rs, 0) x2 = x; y2 = y Div(x2 - rs, y2, x2 + rs, y2) } # S21 = 2 * V2 / E1 function S12(rs, z0, x1, y1, l, x2, y2, x3, y3) { V2(rs, 0, rs, 0, z0, x1, y1, l) x *= 2; y *= 2 } function coef(z0, xs, ys, xt, yt, z2) { z2 = z0 * z0 Mul(xs, ys, xt, yt) x /= z2; y /= z2 x += 1 Div(z0 * x, z0 * y, xs + xt, ys + yt) } # V1 = ケーブル送端電圧 # γ = x1 * j*y1 function V1(rs, z0, x1, y1, l, x2, y2) { Zin(z0, x1, y1, l, rs, 0) x2 = x; y2 = y Div(x2, y2, x2 + rs, y2) } # V2 = ケーブル受端電圧 # V2 = 1/2 * 1/(cosh(γ*l) + z0/(Zs+Zt)*(1+(Zs*Zt/z0^2))*sinh(γ*l)) # Zs = xs + j*ys, Zt = xt + j*yt function V2(xs, ys, xt, yt, z0, x1, y1, l, a, x2, y2, x3, y3) { Cosh(x1 * l, y1 * l) x2 = x; y2 = y Sinh(x1 * l, y1 * l) x3 = x; y3 = y coef(z0, xs, ys, xt, yt) Mul(x, y, x3, y3) Add(x, y, x2, y2) Div(1, 0, x, y) Mul(x, y, xt, yt) Div(x, y, xs + xt, ys + yt) } # Zin = (Zt/Z0 + tanh(γ*l) / (1 + (Zt/Z0)*tanh(γ*l)) * Z0 # γ = x1 * j*y1, Zt = x2 + j*y2 function Zin(z0, x1, y1, l, x2, y2, x3, y3, x4, y4) { Tanh(x1 * l, y1 * l) x3 = x y3 = y Mul(x, y, x2 / z0, y2 / z0) x4 = x + 1 y4 = y Add(x3, y3, x2 / z0, y2 / z0) Div(x, y, x4, y4) x *= z0 y *= z0 } # Zsc = Z0 * tanh((α + j * β) * l) function Zsc(z0, x1, y1, l) { Tanh(x1 * l, y1 * l) x *= z0 y *= z0 } # Zoc = Z0 * coth((α + j * β) * l) function Zoc(z0, x1, y1, l, w) { Tanh(x1 * l, y1 * l) Div(1, 0, x, y) x *= z0 y *= z0 error(z0, x1, y1, l, w) #print " ", y } # complex functions function Add(x1, y1, x2, y2) { x = x1 + x2 y = y1 + y2 } function Sub(x1, y1, x2, y2) { x = x1 - x2 y = y1 - y2 } function Mul(x1, y1, x2, y2) { x = x1 * x2 - y1 * y2 y = x1 * y2 + y1 * x2 } function Div(x1, y1, x2, y2, r2) { r2 = x2 * x2 + y2 * y2 x = (x1 * x2 + y1 * y2) / r2 y = (y1 * x2 - x1 * y2) / r2 } function Exp(x1, y1, a) { a = exp(x1) x = a * cos(y1) y = a * sin(y1) } function Log(x1, y1) { x = 0.5 * log(x1 * x1 + y1 * y1) y = atan2(y1, x1) } function Sqrt(x1, y1, r, w) { x = 0.5 * log(x1 * x1 + y1 * y1) * 0.5 y = atan2(y1, x1) * 0.5 a = exp(x) x = a * cos(y) y = a * sin(y) } function Pow(x1, y1, x2, y2, x3, y3) { Log(x1, y1) x3 = x y3 = y Mul(x3, y3, x2, y2) Exp(x, y) } function Sin(x1, y1, e, f) { e = exp(y1) f = 1 / e x = 0.5 * cos(x1) * (e - f) y = 0.5 * sin(x1) * (e + f) } function Cos(x1, y1, e, f) { e = exp(y1) f = 1 / e x = 0.5 * cos(x1) * (f + e) y = 0.5 * sin(x1) * (f - e) } function Tan(x1, y1, e, f, d) { e = exp(2 * y1) f = 1 / e d = cos(2 * x1) + 0.5 * (e + f) x = sin(2 * x1) / d y = 0.5 * (e - f) / d } function Sinh(x1, y1, e, f) { e = exp(x1) f = 1 / e x = 0.5 * (e - f) * cos(y1) y = 0.5 * (e + f) * sin(y1) } function Cosh(x1, y1, e, f) { e = exp(x1) f = 1 / e x = 0.5 * (e + f) * cos(y1) y = 0.5 * (e - f) * sin(y1) } function Tanh(x1, y1, e, f, d) { e = exp(2 * x1) f = 1 / e d = 0.5 * (e + f) + cos(2 * y1) if (d == 0) { e = exp(x1) f = 1 / e x = 0 y = (e + f) * sin(y1) } else { x = 0.5 * (e - f) / d y = sin(2 * y1) / d } } function Atanh(x1, y1) { Div(1 + x1, y1, 1 - x1, -y1) Log(x, y) x *= 0.5 y *= 0.5 } function Abs(x, y) { return sqrt(x * x + y * y) } function Arg(x, y) { return atan2(y, x) } '
平林浩一, 2016-05