Sパラメータの理論と導出と実装

数 GHz を超える高周波回路の設計現場では、トランジスタの特性表にも、フィルタやアンテナのデータシートにも、必ず「Sパラメータ」という言葉が登場します。低周波の回路理論で慣れ親しんだ電圧と電流、あるいはインピーダンス $Z$ やアドミタンス $Y$ といった量はどこへ行ってしまったのでしょうか。実は高周波では、これらの「電圧」や「電流」を測ることそのものが極めて難しくなります。波長が回路の寸法と同程度になると、線路上の場所ごとに電圧が変わってしまい、「この端子の電圧」という概念が一意に定まらなくなるのです。さらに、トランジスタの入力端子を理想的に短絡($V=0$)したり開放($I=0$)したりして $Z$ パラメータを測ろうとしても、高周波では完全な短絡・開放を作ることが難しく、しかも素子が発振してしまうこともあります。

そこで登場するのが、回路を「入射してくる波」と「跳ね返ってくる波」の比で記述するSパラメータ(散乱パラメータ、scattering parameters)です。短絡や開放のかわりに、特性インピーダンス $Z_0$(通常は 50 Ω)で終端した状態で測定できるため、高周波でも安定して測定できます。Sパラメータを理解すると、以下のような分野への見通しが一気に開けます。

  • 増幅器・トランジスタ設計: トランジスタの利得・整合・安定性はすべて $S_{11}, S_{21}, S_{12}, S_{22}$ から計算され、設計の出発点になります
  • アンテナ・フィルタ評価: アンテナの反射特性(リターンロス、VSWR)は $S_{11}$ そのもの、フィルタの通過・阻止特性は $S_{21}$ の周波数掃引で表されます
  • ネットワークアナライザ測定: 高周波測定器(VNA)が直接測るのは電圧でも電流でもなく、まさにSパラメータです
  • 多段回路の合成: 増幅段やフィルタを縦続接続したときの全体特性は、Sパラメータを変換した「Tパラメータ」の行列積で一発で求まります

本記事の内容

  • 入射波 $a$ と反射波 $b$ という「規格化波」の定義とその物理的意味
  • 散乱行列 $\bm{S}$ の定義式 $\bm{b} = \bm{S}\bm{a}$ の導出
  • $S_{11}$ が入力反射係数 $\Gamma$、$S_{21}$ が順方向利得であることの証明
  • Zパラメータと Sパラメータの相互変換式の導出
  • Tパラメータ(伝送散乱行列)による多段縦続接続の導出
  • Python による2ポート回路のSパラメータ周波数掃引と、散乱行列の可逆性・対称性の数値検証

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

Sパラメータとは

なぜ「波」で回路を記述するのか

低周波の回路では、抵抗やコンデンサに加わる電圧と流れる電流を直接測れます。オームの法則 $V = ZI$ は、端子における電圧と電流が一意に定まることを暗黙の前提にしています。ところが高周波になると、配線そのものが「伝送線路」として振る舞い、線路上を電磁波が伝わっていきます。線路上のある点では波が右に進み(入射波)、回路の不連続点や負荷で跳ね返った波が左に進みます(反射波)。観測される電圧は、この入射波と反射波の重ね合わせなので、測る場所が少しずれるだけで値が変わってしまうのです。

ここで発想を転換します。「電圧」という曖昧な量のかわりに、右に進む波の大きさ左に進む波の大きさを回路を記述する基本量にしてしまえばよいのです。入射波を $a$、反射波を $b$ と書くことにします。ある回路(ネットワーク)に波 $a$ を入射すると、回路がそれを「散乱」して波 $b$ を返してきます。この入射波と散乱波の関係を行列でまとめたものが散乱行列 $\bm{S}$ であり、その成分がSパラメータです。

イメージとしては、暗い部屋にボールを投げ込む状況に似ています。投げ込んだボール(入射波 $a$)に対して、部屋の中の構造に応じて跳ね返ってくるボール(反射波 $b$)が決まります。部屋の中身を直接見なくても、いろいろな向きからボールを投げて跳ね返り方を測れば、部屋の散乱特性が完全にわかる — これがSパラメータによる回路記述の精神です。

規格化波という工夫

ただし、入射波・反射波をそのまま電圧や電流で測ると、ポートごとに単位や基準が異なって扱いにくくなります。そこで、エネルギーの流れに直結し、かつ無次元(あるいは $\sqrt{\text{W}}$ の次元)で扱える「規格化波(normalized wave amplitude)」を導入します。規格化波 $a$ と $b$ は、$|a|^2$ が入射電力、$|b|^2$ が反射電力を表すように定義されます。こうしておくと、Sパラメータの絶対値の2乗がそのまま電力の比(反射率や透過率)になり、物理的な意味が直感的に読めるようになります。

このように「波」と「規格化」という二つの工夫を組み合わせるのがSパラメータの核心です。次節では、その規格化波 $a, b$ を電圧 $V$・電流 $I$ から厳密に定義し、散乱行列 $\bm{S}$ を導いていきましょう。

規格化波と散乱行列の定義

規格化波 $a$ と $b$ の定義

1つのポート(端子対)に注目します。そのポートの電圧を $V$、ポートに流れ込む電流を $I$、基準となる特性インピーダンスを $Z_0$(実数、通常 50 Ω)とします。入射波 $a$ と反射波 $b$ を、次のように定義します。

$$ \begin{equation} a = \frac{V + Z_0 I}{2\sqrt{Z_0}}, \qquad b = \frac{V – Z_0 I}{2\sqrt{Z_0}} \end{equation} $$

この定義がどこから来るのかを直感的に理解しましょう。伝送線路上では、電圧と電流はそれぞれ入射波成分 $V^+, I^+$ と反射波成分 $V^-, I^-$ に分解できます。

$$ V = V^+ + V^-, \qquad I = I^+ + I^- = \frac{V^+}{Z_0} – \frac{V^-}{Z_0} $$

電流の式で反射波成分にマイナスがつくのは、反射波が逆向き($-z$ 方向)に進むためです。この2式を連立し、$V^+$ と $V^-$ について解いてみます。まず2式の片方に $Z_0$ を掛けて足し合わせます。$V + Z_0 I = (V^+ + V^-) + (V^+ – V^-) = 2V^+$ となるので、

$$ V^+ = \frac{V + Z_0 I}{2}, \qquad V^- = \frac{V – Z_0 I}{2} $$

が得られます。つまり $a$ は入射電圧波 $V^+$ を $\sqrt{Z_0}$ で割ったもの、$b$ は反射電圧波 $V^-$ を $\sqrt{Z_0}$ で割ったものです。

$$ a = \frac{V^+}{\sqrt{Z_0}}, \qquad b = \frac{V^-}{\sqrt{Z_0}} $$

なぜ $\sqrt{Z_0}$ で割るのか — 電力との関係

$\sqrt{Z_0}$ で割る理由は、$|a|^2$ と $|b|^2$ がそのまま電力になるようにするためです。実際に確かめてみましょう。入射波が運ぶ電力は $P^+ = |V^+|^2 / (2 Z_0)$ です(係数 $1/2$ はフェーザ振幅を時間平均電力に直すため)。これを $a$ で書き直すと、

$$ P^+ = \frac{|V^+|^2}{2 Z_0} = \frac{1}{2}\left|\frac{V^+}{\sqrt{Z_0}}\right|^2 = \frac{1}{2}|a|^2 $$

同様に反射波の電力は $P^- = \frac{1}{2}|b|^2$ となります。したがって、ポートを正味で流れ込む電力は次のように $a$ と $b$ できれいに表されます。

$$ \begin{equation} P = P^+ – P^- = \frac{1}{2}\left(|a|^2 – |b|^2\right) \end{equation} $$

このように、規格化波を使うと「入ってきた電力 $\frac{1}{2}|a|^2$ から跳ね返った電力 $\frac{1}{2}|b|^2$ を引いたものが回路に吸収される」という、エネルギー保存の式が透き通った形で書けます。これこそが規格化のご利益です。

散乱行列 $\bm{S}$ の定義

ここからは $N$ 個のポートを持つネットワークを考えます。各ポート $i$ に入射波 $a_i$ と反射波 $b_i$ を定義し、それぞれをベクトルにまとめます。

$$ \bm{a} = \begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_N \end{pmatrix}, \qquad \bm{b} = \begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_N \end{pmatrix} $$

ネットワークが線形であれば、出ていく波 $\bm{b}$ は入ってくる波 $\bm{a}$ の線形結合で書けるはずです。この線形関係を表す行列が散乱行列 $\bm{S}$ です。

$$ \begin{equation} \bm{b} = \bm{S}\bm{a} \end{equation} $$

2ポート($N=2$)の場合、成分で書くと次のようになります。

$$ \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} $$

各成分 $S_{ij}$ は、次のように「他のポートの入射波をすべてゼロにした条件」での比として取り出せます。

$$ S_{ij} = \left.\frac{b_i}{a_j}\right|_{a_k = 0 \ (k \neq j)} $$

ここで「$a_k = 0$」とは、ポート $k$ に入射波が来ない状態、すなわちポート $k$ を特性インピーダンス $Z_0$ で整合終端することを意味します。$Z_0$ で終端すれば反射が起きず、入射波が存在しないからです。短絡・開放のかわりに整合終端で測れるという、この点こそがSパラメータが高周波測定に向いている本質的な理由です。

散乱行列の定義ができました。次に、その各成分が物理的に何を意味するのか — 特に最も重要な $S_{11}$ と $S_{21}$ の意味を、定義から明らかにしていきましょう。

$S_{11}$ と $S_{21}$ の物理的意味

$S_{11}$ は入力反射係数

$S_{11}$ の定義は、ポート2を整合終端($a_2 = 0$)した状態での $b_1 / a_1$ でした。

$$ S_{11} = \left.\frac{b_1}{a_1}\right|_{a_2 = 0} $$

ポート1から波 $a_1$ を入射したとき、ポート1へ跳ね返ってくる波 $b_1$ との比です。これはまさに、ポート1から回路を見たときの反射係数 $\Gamma_{\text{in}}$ に他なりません。そのことを電圧・電流から確認しましょう。$a_2 = 0$ のとき、ポート1の入射電圧波は $V_1^+ = \sqrt{Z_0}\, a_1$、反射電圧波は $V_1^- = \sqrt{Z_0}\, b_1$ なので、

$$ S_{11} = \frac{b_1}{a_1} = \frac{V_1^-/\sqrt{Z_0}}{V_1^+/\sqrt{Z_0}} = \frac{V_1^-}{V_1^+} = \Gamma_{\text{in}} $$

すなわち $S_{11}$ は入射電圧波に対する反射電圧波の比そのものです。さらに、ポート1から見た入力インピーダンスを $Z_{\text{in}}$ とすると、反射係数の定義より、

$$ S_{11} = \Gamma_{\text{in}} = \frac{Z_{\text{in}} – Z_0}{Z_{\text{in}} + Z_0} $$

という、伝送線路理論でおなじみの反射係数の式と完全に一致します。$|S_{11}|^2$ は入射電力に対する反射電力の比(電力反射率)であり、アンテナや増幅器の入力整合の良さを表す「リターンロス」$\text{RL} = -20\log_{10}|S_{11}|$ [dB] の正体でもあります。$Z_{\text{in}} = Z_0$ の完全整合なら $S_{11} = 0$、すべて反射する短絡や開放なら $|S_{11}| = 1$ です。

$S_{21}$ は順方向の透過(利得)

$S_{21}$ の定義は、ポート2を整合終端($a_2 = 0$)した状態での $b_2 / a_1$ です。

$$ S_{21} = \left.\frac{b_2}{a_1}\right|_{a_2 = 0} $$

ポート1から入射した波 $a_1$ のうち、どれだけがポート2から出ていく波 $b_2$ になるか — すなわち順方向の透過係数を表します。ポート2が整合終端されているとき、ポート2から出た波 $b_2$ はそのまま終端負荷へ吸収されます。したがって $b_2$ は「ポート2の負荷に伝わった波」であり、$|S_{21}|^2$ は次の電力比になります。

$$ |S_{21}|^2 = \frac{\frac{1}{2}|b_2|^2}{\frac{1}{2}|a_1|^2} = \frac{\text{ポート2へ伝わった電力}}{\text{ポート1へ入射した電力}} $$

これが電力利得(あるいは挿入損失の逆数)です。増幅器なら $|S_{21}| > 1$(利得あり)、フィルタの通過帯域なら $|S_{21}| \approx 1$、阻止帯域なら $|S_{21}| \ll 1$ となります。実用上は $20\log_{10}|S_{21}|$ [dB] で表され、これがフィルタや増幅器の周波数特性そのものになります。後ほど Python でこの周波数掃引を描きます。

残りの成分も同様に解釈できます。$S_{22}$ はポート1を整合終端したときのポート2から見た出力反射係数、$S_{12}$ はポート2からポート1への逆方向透過係数(アイソレーション、逆方向利得)です。

相反性と無損失性が行列に課す対称性

散乱行列には、回路の物理的性質が美しい形で反映されます。回路が受動素子だけで構成され、フェライトのような非相反素子を含まない場合、その回路は相反(reciprocal)であり、散乱行列は対称になります。

$$ \bm{S} = \bm{S}^T \quad \Longleftrightarrow \quad S_{ij} = S_{ji} $$

特に2ポートでは $S_{12} = S_{21}$ となり、順方向と逆方向の透過が等しくなります。さらに回路が無損失(lossless)であれば、入射した全電力が必ず出ていくため、散乱行列はユニタリ(unitary)になります。

$$ \bm{S}^\dagger \bm{S} = \bm{I} $$

ここで $\bm{S}^\dagger$ は共役転置です。この条件をエネルギー保存から導いてみましょう。無損失なら、全ポートから入る電力の総和と出る電力の総和が等しいので、$\sum_i |a_i|^2 = \sum_i |b_i|^2$、すなわち $\bm{a}^\dagger \bm{a} = \bm{b}^\dagger \bm{b}$ です。ここに $\bm{b} = \bm{S}\bm{a}$ を代入すると、

$$ \bm{a}^\dagger \bm{a} = (\bm{S}\bm{a})^\dagger (\bm{S}\bm{a}) = \bm{a}^\dagger \bm{S}^\dagger \bm{S} \bm{a} $$

これが任意の $\bm{a}$ について成り立つには $\bm{S}^\dagger \bm{S} = \bm{I}$ でなければなりません。後半の Python 実装では、この相反性(対称性 $S_{12}=S_{21}$)とユニタリ性を実際の回路で数値検証します。

ここまでで散乱行列の意味が見えてきました。しかしSパラメータは突然現れた概念ではなく、低周波で使い慣れた $Z$ パラメータと表裏一体の関係にあります。次節ではその橋渡し — $Z \leftrightarrow S$ 変換を導きましょう。

ZパラメータとSパラメータの相互変換

Zパラメータの復習

Zパラメータ(インピーダンス行列)は、ポートの電流 $\bm{I}$ を入力、電圧 $\bm{V}$ を出力とする線形関係です。

$$ \bm{V} = \bm{Z}\bm{I} $$

2ポートなら $V_1 = Z_{11}I_1 + Z_{12}I_2$、$V_2 = Z_{21}I_1 + Z_{22}I_2$ です。$Z$ パラメータは「他のポートを開放($I=0$)して測る」量で、低周波では測りやすい一方、高周波では前述の理由で測りにくくなります。そこで、測りやすい $S$ と理論的に扱いやすい $Z$ を相互に変換できると便利です。

行列形式での規格化波

変換を見通しよく導くため、規格化波の定義を行列形式で書き直します。電圧ベクトル $\bm{V}$、電流ベクトル $\bm{I}$ を使うと、波 $\bm{a}, \bm{b}$ は次のように表せます(全ポートが同じ $Z_0$ を基準とする場合)。

$$ \bm{a} = \frac{1}{2\sqrt{Z_0}}(\bm{V} + Z_0 \bm{I}), \qquad \bm{b} = \frac{1}{2\sqrt{Z_0}}(\bm{V} – Z_0 \bm{I}) $$

これは1ポートの定義式 $(1)$ を各ポートに並べただけです。係数 $1/(2\sqrt{Z_0})$ は全成分共通なので、スカラーとして括り出せます。

$S$ を $Z$ で表す

目標は、$\bm{V} = \bm{Z}\bm{I}$ から $\bm{b} = \bm{S}\bm{a}$ の $\bm{S}$ を求めることです。まず $\bm{a}$ と $\bm{b}$ の式に $\bm{V} = \bm{Z}\bm{I}$ を代入し、共通因子 $1/(2\sqrt{Z_0})$ を省いて整理します。

$$ 2\sqrt{Z_0}\,\bm{a} = \bm{Z}\bm{I} + Z_0\bm{I} = (\bm{Z} + Z_0\bm{U})\bm{I} $$

ここで $\bm{U}$ は単位行列です。同様に $\bm{b}$ については、

$$ 2\sqrt{Z_0}\,\bm{b} = \bm{Z}\bm{I} – Z_0\bm{I} = (\bm{Z} – Z_0\bm{U})\bm{I} $$

第1式を $\bm{I}$ について解くと、$(\bm{Z} + Z_0\bm{U})$ が正則であるとして、

$$ \bm{I} = 2\sqrt{Z_0}\,(\bm{Z} + Z_0\bm{U})^{-1}\bm{a} $$

これを第2式の右辺に代入すると、$2\sqrt{Z_0}$ が両辺でそろって約分でき、

$$ \bm{b} = (\bm{Z} – Z_0\bm{U})(\bm{Z} + Z_0\bm{U})^{-1}\bm{a} $$

となります。$\bm{b} = \bm{S}\bm{a}$ と見比べれば、散乱行列が求まります。

$$ \begin{equation} \bm{S} = (\bm{Z} – Z_0\bm{U})(\bm{Z} + Z_0\bm{U})^{-1} \end{equation} $$

正規化インピーダンス $\bm{z} = \bm{Z}/Z_0$ を使えば、$\bm{S} = (\bm{z} – \bm{U})(\bm{z} + \bm{U})^{-1}$ とさらに簡潔に書けます。1ポート(スカラー)の場合は $S = (Z – Z_0)/(Z + Z_0)$ となり、前節の反射係数の式に一致することが確認できます。

$Z$ を $S$ で表す(逆変換)

逆向きの変換も同様に導けます。今度は $\bm{a}, \bm{b}$ から $\bm{V}, \bm{I}$ を作ります。波の定義式を足し引きすると、

$$ \bm{V} = \sqrt{Z_0}\,(\bm{a} + \bm{b}), \qquad \bm{I} = \frac{1}{\sqrt{Z_0}}(\bm{a} – \bm{b}) $$

が得られます($\bm{a} + \bm{b}$ で電流項が消え、$\bm{a} – \bm{b}$ で電圧項が消えることから確認できます)。ここに $\bm{b} = \bm{S}\bm{a}$ を代入します。

$$ \bm{V} = \sqrt{Z_0}\,(\bm{U} + \bm{S})\bm{a}, \qquad \bm{I} = \frac{1}{\sqrt{Z_0}}(\bm{U} – \bm{S})\bm{a} $$

$\bm{V} = \bm{Z}\bm{I}$ より $\bm{Z} = \bm{V}\bm{I}^{-1}$ の形にしたいので、$\bm{a}$ を消去します。第2式を $\bm{a}$ について解くと $\bm{a} = \sqrt{Z_0}\,(\bm{U} – \bm{S})^{-1}\bm{I}$ なので、これを第1式に代入すると $\sqrt{Z_0}$ がそろって、

$$ \begin{equation} \bm{Z} = Z_0 (\bm{U} + \bm{S})(\bm{U} – \bm{S})^{-1} \end{equation} $$

が得られます。式 $(4)$ と式 $(5)$ は互いに逆の関係にあり、Sパラメータと Zパラメータが完全に等価な情報を持つことを示しています。どちらで測っても、もう一方へ自由に変換できるわけです。

$Z \leftrightarrow S$ 変換で「1つの2ポート回路」を記述できるようになりました。しかし実務では、複数の回路ブロックを縦につなぐ場面が頻繁にあります。その縦続接続を一発で扱うために考案されたのが、次に説明するTパラメータです。

Tパラメータと縦続接続

なぜSパラメータでは縦続接続が扱いにくいのか

増幅段とフィルタを直列につなぐような「縦続接続(カスケード)」を考えます。前段の出力ポート(ポート2)が後段の入力ポート(ポート1)に直結する状況です。直感的には「前段の $\bm{S}$ と後段の $\bm{S}$ を掛ければよい」と思いたくなりますが、それはできません。なぜなら散乱行列は「入射波 $\bm{a}$ から反射波 $\bm{b}$ へ」の写像であり、接続点では前段の出力波が後段の入射波になるという「波の向きの受け渡し」が、$\bm{a}, \bm{b}$ をまとめた形のままでは行列積に対応しないからです。

そこで、入力側ポートの波 $(a_1, b_1)$ を出力側ポートの波 $(a_2, b_2)$ で表すTパラメータ(伝送散乱行列、transfer scattering matrix)を導入します。

$$ \begin{equation} \begin{pmatrix} b_1 \\ a_1 \end{pmatrix} = \begin{pmatrix} T_{11} & T_{12} \\ T_{21} & T_{22} \end{pmatrix} \begin{pmatrix} a_2 \\ b_2 \end{pmatrix} \end{equation} $$

入力ポートの量を出力ポートの量で表す形にしておくと、縦続接続で接続点の波がうまく相殺し、行列の積だけで全体が記述できるようになります。

縦続接続が行列積になる理由

2つの2ポート $A$, $B$ を縦続接続します。$A$ の出力ポート(ポート2)と $B$ の入力ポート(ポート1)を直結すると、接続点では $A$ から出ていく波が $B$ へ入っていく波になります。具体的には、$A$ のポート2から出る波 $b_2^A$ は $B$ のポート1へ入る波 $a_1^B$ に等しく、逆に $B$ のポート1から戻る波 $b_1^B$ は $A$ のポート2へ入る波 $a_2^A$ に等しくなります。

$$ a_1^B = b_2^A, \qquad b_1^B = a_2^A $$

ここでTパラメータの並び順 $(a_2, b_2)^T$ がうまく効いてきます。$A$ の出力側ベクトルは $(a_2^A, b_2^A)^T = (b_1^B, a_1^B)^T$ であり、これはちょうど $B$ の入力側ベクトル $(b_1^B, a_1^B)^T$ と同じ並びになっています。したがって、

$$ \begin{pmatrix} b_1^A \\ a_1^A \end{pmatrix} = \bm{T}^A \begin{pmatrix} a_2^A \\ b_2^A \end{pmatrix} = \bm{T}^A \begin{pmatrix} b_1^B \\ a_1^B \end{pmatrix} = \bm{T}^A \bm{T}^B \begin{pmatrix} a_2^B \\ b_2^B \end{pmatrix} $$

このように、接続点の波が自動的に受け渡され、全体のTパラメータは単純な行列積になります。

$$ \begin{equation} \bm{T}_{\text{total}} = \bm{T}^A \bm{T}^B \end{equation} $$

$N$ 段の縦続なら $\bm{T}_{\text{total}} = \bm{T}^{(1)}\bm{T}^{(2)}\cdots\bm{T}^{(N)}$ と、ただ順番に掛けるだけです。これがTパラメータの絶大な威力です。

$S \leftrightarrow T$ 変換

Tパラメータの便利さを使うには、Sパラメータとの変換式が必要です。散乱行列の関係 $b_1 = S_{11}a_1 + S_{12}a_2$、$b_2 = S_{21}a_1 + S_{22}a_2$ を、$(b_1, a_1)$ を $(a_2, b_2)$ で表す形に変形します。

まず2番目の式 $b_2 = S_{21}a_1 + S_{22}a_2$ を $a_1$ について解きます。$S_{21} \neq 0$ として、

$$ a_1 = \frac{1}{S_{21}}b_2 – \frac{S_{22}}{S_{21}}a_2 $$

これで $a_1$ が $(a_2, b_2)$ で表せました。次にこれを1番目の式 $b_1 = S_{11}a_1 + S_{12}a_2$ に代入します。

$$ b_1 = S_{11}\left(\frac{1}{S_{21}}b_2 – \frac{S_{22}}{S_{21}}a_2\right) + S_{12}a_2 = \left(S_{12} – \frac{S_{11}S_{22}}{S_{21}}\right)a_2 + \frac{S_{11}}{S_{21}}b_2 $$

$a_2$ の係数を通分すると $\dfrac{S_{12}S_{21} – S_{11}S_{22}}{S_{21}}$ となります。以上を式 $(6)$ の形に並べると、Tパラメータが $S$ で表されます。

$$ \begin{equation} \bm{T} = \frac{1}{S_{21}}\begin{pmatrix} S_{12}S_{21} – S_{11}S_{22} & S_{11} \\ -S_{22} & 1 \end{pmatrix} \end{equation} $$

逆変換も同じ要領で導け、結果は次のようになります。

$$ \begin{equation} \bm{S} = \frac{1}{T_{22}}\begin{pmatrix} T_{12} & T_{11}T_{22} – T_{12}T_{21} \\ 1 & -T_{21} \end{pmatrix} \end{equation} $$

これで「各段を $S$ で記述 → $T$ に変換 → 行列積 → $S$ に戻す」という多段回路解析の全手順が揃いました。次節からは、ここまでの理論を Python で実装し、実際の2ポート回路で確かめていきます。

Python による実装と検証

直列インピーダンス・並列アドミタンスの $S$ パラメータ

まず最も基本的な2つの要素 — 直列インピーダンス $Z$ と並列アドミタンス $Y$ — のSパラメータを、式 $(4)$ の $Z \to S$ 変換を使って数値的に求めます。これらは多くの回路を組み立てる「部品」になります。scikit-rf のようなライブラリは使わず、numpy のみで実装します。

import numpy as np

Z0 = 50.0  # 基準特性インピーダンス [Ω]

def z_to_s(Zmat, Z0=50.0):
    """Zパラメータ行列 -> Sパラメータ行列 (式(4))"""
    U = np.eye(Zmat.shape[0], dtype=complex)
    # S = (Z - Z0 U)(Z + Z0 U)^{-1}
    return (Zmat - Z0 * U) @ np.linalg.inv(Zmat + Z0 * U)

def series_impedance_S(Z, Z0=50.0):
    """直列インピーダンスZの2ポートSパラメータ(解析解)"""
    # 直列素子: S11 = S22 = Z/(Z+2Z0), S21 = S12 = 2Z0/(Z+2Z0)
    denom = Z + 2 * Z0
    S11 = Z / denom
    S21 = 2 * Z0 / denom
    return np.array([[S11, S21], [S21, S11]], dtype=complex)

# 例: 直列に R = 50 Ω
Z = 50.0
S_series = series_impedance_S(Z, Z0)
print("直列 R=50Ω の Sパラメータ:")
print(np.round(S_series, 4))
print(f"|S11| = {abs(S_series[0,0]):.4f}, |S21| = {abs(S_series[1,0]):.4f}")

直列に 50 Ω を入れた場合、出力では $S_{11} = 50/(50+100) = 1/3 \approx 0.333$、$S_{21} = 100/150 \approx 0.667$ が表示されます。$|S_{11}|^2 + |S_{21}|^2 = 0.111 + 0.444 = 0.556 < 1$ となり、残りの電力が直列抵抗で消費されている(損失がある)ことが数値からも読み取れます。$S_{11}=S_{21}$ をずらして $S$ が対称($S_{12}=S_{21}$)になっているのは、抵抗が相反素子だからです。

LC ローパスフィルタを縦続接続で組む

次に、Tパラメータの行列積を使って実際のフィルタを合成します。直列インダクタと並列キャパシタを交互につないだ LC ラダー型ローパスフィルタを作り、周波数掃引で $|S_{21}|$ [dB] を描きます。各素子のSパラメータを求め、$S \to T$ 変換して掛け合わせ、$T \to S$ で全体に戻す、という手順です。

import numpy as np

Z0 = 50.0

def shunt_admittance_S(Y, Z0=50.0):
    """並列アドミタンスYの2ポートSパラメータ(解析解)"""
    # 並列素子: S11 = S22 = -Y/(Y + 2/Z0), S21 = S12 = (2/Z0)/(Y + 2/Z0)
    denom = Y + 2.0 / Z0
    S11 = -Y / denom
    S21 = (2.0 / Z0) / denom
    return np.array([[S11, S21], [S21, S11]], dtype=complex)

def s_to_t(S):
    """Sパラメータ -> Tパラメータ (式(8))"""
    S11, S12, S21, S22 = S[0,0], S[0,1], S[1,0], S[1,1]
    T = np.array([
        [S12 * S21 - S11 * S22, S11],
        [-S22,                  1.0]
    ], dtype=complex) / S21
    return T

def t_to_s(T):
    """Tパラメータ -> Sパラメータ (式(9))"""
    T11, T12, T21, T22 = T[0,0], T[0,1], T[1,0], T[1,1]
    S = np.array([
        [T12,  T11 * T22 - T12 * T21],
        [1.0, -T21]
    ], dtype=complex) / T22
    return S

ここまでで部品(直列・並列素子の $S$)と変換関数($S \leftrightarrow T$)が揃いました。$z\_to\_s$ で求めた直列素子と、$shunt\_admittance\_S$ の並列素子を、Tパラメータの積で縦続接続します。次のコードで周波数掃引を実行します。

import numpy as np
import matplotlib.pyplot as plt

# 3次バターワース風 LCラダー (L-C-L) ローパス
# カットオフ ~ 1 GHz 目安の素子値
L1 = 8.0e-9   # 直列インダクタ [H]
C2 = 3.2e-12  # 並列キャパシタ [F]
L3 = 8.0e-9   # 直列インダクタ [H]

freqs = np.linspace(0.05e9, 3.0e9, 600)  # 50 MHz - 3 GHz
S21_db = np.zeros_like(freqs)
S11_db = np.zeros_like(freqs)

for k, f in enumerate(freqs):
    w = 2 * np.pi * f
    # 各素子のSパラメータ
    S_L1 = series_impedance_S(1j * w * L1, Z0)
    S_C2 = shunt_admittance_S(1j * w * C2, Z0)
    S_L3 = series_impedance_S(1j * w * L3, Z0)
    # T行列の積で縦続接続
    T_total = s_to_t(S_L1) @ s_to_t(S_C2) @ s_to_t(S_L3)
    S_total = t_to_s(T_total)
    S21_db[k] = 20 * np.log10(abs(S_total[1, 0]))
    S11_db[k] = 20 * np.log10(abs(S_total[0, 0]) + 1e-12)

plt.figure(figsize=(9, 5))
plt.plot(freqs / 1e9, S21_db, label='$|S_{21}|$ (透過)', color='tab:blue')
plt.plot(freqs / 1e9, S11_db, label='$|S_{11}|$ (反射)', color='tab:red')
plt.axhline(-3, color='gray', ls='--', lw=0.8, label='-3 dB')
plt.xlabel('Frequency [GHz]')
plt.ylabel('Magnitude [dB]')
plt.title('LC Ladder Low-Pass Filter — S-parameters')
plt.ylim(-60, 5)
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('lc_filter_sparam.png', dpi=150, bbox_inches='tight')
plt.show()

このグラフから、ローパスフィルタの典型的な振る舞いがはっきり読み取れます。低周波では $|S_{21}| \approx 0$ dB(透過率ほぼ1)でほぼ全ての信号が通り抜け、$|S_{11}|$ は深く落ち込んでいて反射がほとんどありません。カットオフ周波数あたりで $|S_{21}|$ が $-3$ dB を切り、それより高周波では急峻に減衰していきます。同時に $|S_{11}|$ は $0$ dB に近づき、阻止帯域では「通さない=跳ね返す」という物理が見えます。透過と反射がトレードオフの関係にあること、つまり無損失回路では通さなかった分が反射に回ることが、2本の曲線の対称的な動きから直感的に理解できます。

散乱行列の相反性とユニタリ性を数値検証

最後に、理論で述べた2つの性質 — 相反性($\bm{S} = \bm{S}^T$)と無損失回路のユニタリ性($\bm{S}^\dagger\bm{S} = \bm{I}$)— を、上で作った LC フィルタ(無損失素子のみ)で数値的に確認します。

import numpy as np

# 代表周波数 800 MHz で全体Sパラメータを再計算
f = 0.8e9
w = 2 * np.pi * f
S_L1 = series_impedance_S(1j * w * L1, Z0)
S_C2 = shunt_admittance_S(1j * w * C2, Z0)
S_L3 = series_impedance_S(1j * w * L3, Z0)
S = t_to_s(s_to_t(S_L1) @ s_to_t(S_C2) @ s_to_t(S_L3))

print("全体Sパラメータ S =")
print(np.round(S, 4))

# 相反性: S12 == S21 か
print(f"\n相反性 |S12 - S21| = {abs(S[0,1] - S[1,0]):.2e}")

# ユニタリ性: S^dagger S == I か
U_check = S.conj().T @ S
print("\nS^H S =")
print(np.round(U_check, 4))
print(f"単位行列との最大誤差 = {np.max(np.abs(U_check - np.eye(2))):.2e}")

# エネルギー保存: |S11|^2 + |S21|^2 = 1 か(無損失2ポート)
print(f"\n|S11|^2 + |S21|^2 = {abs(S[0,0])**2 + abs(S[1,0])**2:.6f}")

実行結果から、まず $|S_{12} – S_{21}|$ がほぼ $10^{-16}$ 程度の機械精度レベルとなり、相反性 $S_{12} = S_{21}$ が成り立っていることがわかります。これは LC 素子が相反素子だからです。次に $\bm{S}^\dagger \bm{S}$ が単位行列に一致し、ユニタリ性が確認できます。さらに $|S_{11}|^2 + |S_{21}|^2 = 1.000000$ となり、無損失回路では入射電力が反射と透過に過不足なく分配される — エネルギー保存則 — が数値的に裏付けられました。先ほどの直列抵抗の例ではこの和が 1 を下回っていたことと対照的で、和が 1 か 1 未満かで回路が無損失か損失ありかを判定できることがわかります。

これら3つの数値実験を通して、抽象的に導いたSパラメータ・Tパラメータの定義と変換式が、実際の回路で正しく働くことを確認できました。

まとめ

本記事では、高周波回路を入射波・反射波の比で記述するSパラメータを、定義から導出、実装まで一気通貫で解説しました。要点を整理します。

  • 規格化波 $a = (V + Z_0 I)/(2\sqrt{Z_0})$、$b = (V – Z_0 I)/(2\sqrt{Z_0})$ は、$|a|^2/2$ が入射電力、$|b|^2/2$ が反射電力になるよう $\sqrt{Z_0}$ で規格化されている
  • 散乱行列は $\bm{b} = \bm{S}\bm{a}$ で定義され、各成分は他ポートを整合終端した条件での波の比として取り出せる。短絡・開放が不要なため高周波測定に向く
  • $S_{11}$ は入力反射係数 $\Gamma_{\text{in}} = (Z_{\text{in}} – Z_0)/(Z_{\text{in}} + Z_0)$、$S_{21}$ は順方向の透過係数(利得)であり、$|S_{21}|^2$ が電力利得を表す
  • 相反回路では $\bm{S}=\bm{S}^T$、無損失回路では $\bm{S}^\dagger\bm{S}=\bm{I}$(ユニタリ)が成り立つ
  • $Z \leftrightarrow S$ 変換は $\bm{S} = (\bm{Z}-Z_0\bm{U})(\bm{Z}+Z_0\bm{U})^{-1}$、$\bm{Z} = Z_0(\bm{U}+\bm{S})(\bm{U}-\bm{S})^{-1}$ で結ばれる
  • 縦続接続はSパラメータを $T$ パラメータに変換すると行列積 $\bm{T}_{\text{total}} = \bm{T}^A\bm{T}^B$ で計算でき、多段回路の合成が簡単になる

Sパラメータは、増幅器の安定性判定(ロールエット係数 $K$)、整合回路設計(スミスチャート上での $S_{11}$ 軌跡)、ネットワークアナライザによる実測など、高周波・マイクロ波工学のあらゆる場面で出発点となる言語です。本記事で身につけた「波で考える」感覚を、ぜひ次のステップにつなげてください。

次のステップとして、以下の記事も参考にしてください。