スミスチャートの基礎 — 反射係数とインピーダンスの可視化

アンテナ設計やRF回路の現場で、「インピーダンスが50 $\Omega$ に合っていない」と言われたら、あなたならどうやって整合を取るでしょうか。数値を紙に書いて計算するのも一つの手ですが、伝送線路の長さやスタブの位置を試行錯誤するにはあまりに煩雑です。

スミスチャート(Smith Chart) は、複素インピーダンスの世界を一枚の円の中にマッピングする道具です。1939年にPhilip Smithが考案したこのチャートを使えば、複素数の計算をグラフ上の「移動」に置き換えることができます。

スミスチャートを理解すると、以下のような実践的な場面で強力な武器になります。

  • アンテナのインピーダンス整合: 給電線とアンテナの不整合による反射を最小化する設計
  • RFフィルタや増幅器の設計: 入出力インピーダンスの整合回路をグラフ上で直感的に設計
  • 高周波計測の解釈: ネットワークアナライザの測定結果(Sパラメータ)はスミスチャート上に表示される

本記事の内容

  • 正規化インピーダンスと反射係数 $\Gamma$ の関係
  • スミスチャートの幾何学(等抵抗円・等リアクタンス円)の導出
  • アドミタンスチャートとの関係
  • インピーダンス整合の設計例(Lスタブ)
  • Pythonでのスミスチャート描画と整合軌跡のプロット

前提知識

この記事を読む前に、以下の知識があると理解がスムーズです。

  • 複素数の基礎(実部・虚部、極形式)
  • 伝送線路の基本概念(特性インピーダンス、反射)

正規化インピーダンスと反射係数

特性インピーダンスによる正規化

高周波回路では、伝送線路の特性インピーダンス $Z_0$(多くの場合 50 $\Omega$ や 75 $\Omega$)を基準として、すべてのインピーダンスを正規化して扱います。正規化することで、異なる特性インピーダンスの系を統一的に扱えるようになります。

負荷インピーダンス $Z_L = R + jX$ を特性インピーダンス $Z_0$ で割ったものを正規化インピーダンスと呼びます。

$$ z = \frac{Z_L}{Z_0} = r + jx $$

ここで $r = R/Z_0$ は正規化抵抗、$x = X/Z_0$ は正規化リアクタンスです。たとえば $Z_0 = 50\,\Omega$ の系で $Z_L = 100 + j50\,\Omega$ のとき、$z = 2 + j1$ となります。抵抗成分 $r$ は常に 0 以上ですが、リアクタンス成分 $x$ は正(誘導性)にも負(容量性)にもなり得ます。

反射係数の定義

伝送線路上で負荷に向かって進む電圧波が負荷で一部反射されるとき、入射波に対する反射波の比を電圧反射係数 $\Gamma$ と定義します。

$$ \Gamma = \frac{V^-}{V^+} = \frac{Z_L – Z_0}{Z_L + Z_0} $$

この式を正規化インピーダンス $z$ で書き換えると、分子分母を $Z_0$ で割って次のようになります。

$$ \Gamma = \frac{z – 1}{z + 1} $$

$\Gamma$ は一般に複素数 $\Gamma = \Gamma_r + j\Gamma_i$ であり、大きさ $|\Gamma|$ は 0(完全整合)から 1(全反射)までの値を取ります。たとえば負荷が特性インピーダンスと等しい $z = 1$ のとき $\Gamma = 0$ で反射なし、負荷が短絡 $z = 0$ のとき $\Gamma = -1$ で全反射です。

反射係数からインピーダンスへの逆変換

$\Gamma$ から $z$ を求める逆変換も重要です。上の式を $z$ について解きましょう。

$\Gamma(z + 1) = z – 1$ を展開すると $\Gamma z + \Gamma = z – 1$ となります。

$z$ の項をまとめると $z(\Gamma – 1) = -1 – \Gamma$ なので、両辺を $(\Gamma – 1)$ で割ると次が得られます。

$$ z = \frac{1 + \Gamma}{1 – \Gamma} $$

この双方向の変換 $z \leftrightarrow \Gamma$ がスミスチャートの数学的基礎です。スミスチャートは $\Gamma$ 平面(横軸 $\Gamma_r$、縦軸 $\Gamma_i$)上に、$z$ の等高線(等抵抗線・等リアクタンス線)を描いたものにほかなりません。

z平面の直交格子がΓ平面の単位円内に写る概念図

左は正規化インピーダンス $z = r + jx$ が住む世界で、$r \geq 0$ の右半平面が無限に広がっています。変換 $\Gamma = (z-1)/(z+1)$ はこの無限に広い右半平面を、右のように半径1の円板の中へ丸ごと折りたたみます。整合点 $z=1$ は円の中心($\Gamma=0$)へ、無限遠の開放点は右端 $(1,0)$ へと移り、$z$ の直交格子が右図のような曲がった格子(スミスチャート)に化けるのです。

では、この等高線が具体的にどのような図形になるかを見ていきましょう。

等抵抗円の導出

$\Gamma$ 平面上で $r = \text{const}$ の軌跡を求める

スミスチャートの骨格を理解するために、正規化抵抗 $r$ が一定のときに反射係数 $\Gamma$ がどんな軌跡を描くかを導出します。

まず、$z = r + jx$ と $\Gamma = \Gamma_r + j\Gamma_i$ の関係から出発します。

$$ z = r + jx = \frac{1 + \Gamma_r + j\Gamma_i}{1 – \Gamma_r – j\Gamma_i} $$

右辺の分母を有理化するために、分母の共役複素数 $(1 – \Gamma_r + j\Gamma_i)$ を分子・分母にかけます。

$$ r + jx = \frac{(1 + \Gamma_r + j\Gamma_i)(1 – \Gamma_r + j\Gamma_i)}{(1 – \Gamma_r)^2 + \Gamma_i^2} $$

分子を展開しましょう。実部と虚部をそれぞれ計算します。

実部: $(1 + \Gamma_r)(1 – \Gamma_r) + j\Gamma_i \cdot (- j\Gamma_i)$ の実部寄与を集めると、

$$ (1 + \Gamma_r)(1 – \Gamma_r) – \Gamma_i^2 = 1 – \Gamma_r^2 – \Gamma_i^2 $$

ここで $(1+\Gamma_r)(1-\Gamma_r)=1-\Gamma_r^2$ を使いました。

虚部: クロス項を集めると、

$$ j\Gamma_i(1 – \Gamma_r) + j\Gamma_i(1 + \Gamma_r) = 2j\Gamma_i $$

したがって、分母を $D = (1 – \Gamma_r)^2 + \Gamma_i^2$ とおくと次のようになります。

$$ r = \frac{1 – \Gamma_r^2 – \Gamma_i^2}{D}, \quad x = \frac{2\Gamma_i}{D} $$

等抵抗条件の幾何学

$r$ が一定の条件 $r = \frac{1 – \Gamma_r^2 – \Gamma_i^2}{(1-\Gamma_r)^2 + \Gamma_i^2}$ を変形して、$\Gamma$ 平面上の図形を特定します。

分母を払って展開すると、

$$ r\left[(1-\Gamma_r)^2 + \Gamma_i^2\right] = 1 – \Gamma_r^2 – \Gamma_i^2 $$

左辺を展開します。

$$ r(1 – 2\Gamma_r + \Gamma_r^2 + \Gamma_i^2) = 1 – \Gamma_r^2 – \Gamma_i^2 $$

$$ r – 2r\Gamma_r + r\Gamma_r^2 + r\Gamma_i^2 = 1 – \Gamma_r^2 – \Gamma_i^2 $$

$\Gamma_r^2$ と $\Gamma_i^2$ の項をまとめるために、右辺を左辺に移項します。

$$ (r+1)\Gamma_r^2 – 2r\Gamma_r + (r+1)\Gamma_i^2 = 1 – r $$

両辺を $(r+1)$ で割ります($r \geq 0$ なので $r+1 > 0$ で常に割れます)。

$$ \Gamma_r^2 – \frac{2r}{r+1}\Gamma_r + \Gamma_i^2 = \frac{1-r}{r+1} $$

$\Gamma_r$ について平方完成を行います。$\Gamma_r^2 – \frac{2r}{r+1}\Gamma_r$ に $\left(\frac{r}{r+1}\right)^2$ を加減すると、

$$ \left(\Gamma_r – \frac{r}{r+1}\right)^2 + \Gamma_i^2 = \frac{1-r}{r+1} + \frac{r^2}{(r+1)^2} $$

右辺を通分して整理すると、

$$ \frac{(1-r)(r+1) + r^2}{(r+1)^2} = \frac{r+1 – r^2 – r + r^2}{(r+1)^2} = \frac{1}{(r+1)^2} $$

最終的に、等抵抗線は次の円の方程式になります。

$$ \left(\Gamma_r – \frac{r}{r+1}\right)^2 + \Gamma_i^2 = \left(\frac{1}{r+1}\right)^2 $$

これは $\Gamma$ 平面上で中心 $\left(\frac{r}{r+1},\, 0\right)$、半径 $\frac{1}{r+1}$ の円です。

いくつかの特徴的な値を確認しましょう。

  • $r = 0$(純リアクタンス): 中心 $(0, 0)$、半径 1 — 単位円そのもの
  • $r = 1$(整合点を通る円): 中心 $(0.5, 0)$、半径 0.5
  • $r \to \infty$(開放): 中心 $(1, 0)$、半径 0 — 点 $(1, 0)$ に縮退

すべての等抵抗円は実軸 $\Gamma_i = 0$ 上の点 $(1, 0)$ を通り、$r$ が大きくなるにつれて右に寄って小さくなります。この美しい入れ子構造がスミスチャートの特徴です。

等抵抗円の入れ子構造(中心r/(r+1)、半径1/(r+1))

各 $r$ の等抵抗円を色分けして描いたものです。$r=0$ の円は単位円そのもの(半径1)で、$r$ が増えると中心が右へ寄りながら半径が縮み、$r=5$ ではほとんど右端に張り付いた小さな円になります。凡例の中心・半径の数値は導出した式 $(r/(r+1),\,0)$、$1/(r+1)$ とぴったり一致しており、すべての円が右端 $(1,0)$ の一点(開放点)で交わっていることが読み取れます。

次に、もう一つの座標軸である等リアクタンス線がどのような形になるかを見ていきましょう。

等リアクタンス円の導出

$\Gamma$ 平面上で $x = \text{const}$ の軌跡を求める

等抵抗円の導出と同様に、正規化リアクタンス $x$ が一定の軌跡を求めます。先ほど得た関係式から出発します。

$$ x = \frac{2\Gamma_i}{(1-\Gamma_r)^2 + \Gamma_i^2} $$

分母を払います。

$$ x\left[(1-\Gamma_r)^2 + \Gamma_i^2\right] = 2\Gamma_i $$

展開すると、

$$ x(1 – 2\Gamma_r + \Gamma_r^2 + \Gamma_i^2) = 2\Gamma_i $$

$$ x – 2x\Gamma_r + x\Gamma_r^2 + x\Gamma_i^2 – 2\Gamma_i = 0 $$

$x$ で割ります($x \neq 0$ の場合を考えます。$x = 0$ は実軸そのもの)。

$$ \Gamma_r^2 – 2\Gamma_r + 1 + \Gamma_i^2 – \frac{2}{x}\Gamma_i = 0 $$

ここで $\Gamma_r^2 – 2\Gamma_r + 1 = (\Gamma_r – 1)^2$ であることを使い、$\Gamma_i$ について平方完成します。

$$ (\Gamma_r – 1)^2 + \Gamma_i^2 – \frac{2}{x}\Gamma_i = 0 $$

$\Gamma_i^2 – \frac{2}{x}\Gamma_i$ に $\frac{1}{x^2}$ を加減して平方完成すると、

$$ (\Gamma_r – 1)^2 + \left(\Gamma_i – \frac{1}{x}\right)^2 = \frac{1}{x^2} $$

これは $\Gamma$ 平面上で中心 $\left(1,\, \frac{1}{x}\right)$、半径 $\frac{1}{|x|}$ の円です。

特徴的な値を確認します。

  • $x = +1$: 中心 $(1, 1)$、半径 1 — 上半面の大きな円弧
  • $x = -1$: 中心 $(1, -1)$、半径 1 — 下半面の大きな円弧
  • $x \to \pm\infty$: 中心 $(1, 0)$、半径 0 — 開放点に縮退
  • $x = 0$: 実軸 $\Gamma_i = 0$(円の半径が無限大の極限、直線)

すべての等リアクタンス円は点 $(1, 0)$ を通り、$x > 0$(誘導性)の円弧は上半面、$x < 0$(容量性)の円弧は下半面に位置します。

等リアクタンス円弧(上半面=誘導性、下半面=容量性)

等リアクタンス円はすべて中心が縦線 $\Gamma_r = 1$ 上に並び、単位円で切り取られると円弧になります。実線($x>0$、誘導性)は上半面、破線($x<0$、容量性)は下半面に対称に現れ、$|x|$ が大きいほど半径 $1/|x|$ が小さくなって右端に集まっていきます。等抵抗円と同じく、すべての円弧が開放点 $(1,0)$ を共有している点が見て取れます。

スミスチャートの全体像

等抵抗円と等リアクタンス円を単位円 $|\Gamma| \leq 1$ 内に描き重ねると、おなじみのスミスチャートが完成します。パッシブ回路($r \geq 0$)ではすべてのインピーダンスが単位円内に収まります。

チャートの特別な点をまとめておきましょう。

$z$ $\Gamma$ 位置
整合 $1 + j0$ $0$ 中心
短絡 $0$ $-1$ 左端
開放 $\infty$ $+1$ 右端

上半面は誘導性($x > 0$)、下半面は容量性($x < 0$)の領域です。実軸上はリアクタンスがゼロの純抵抗を表します。

スミスチャートの特別な点(整合・短絡・開放)と誘導性・容量性領域

チャートの3つの特別な点を確認しておきましょう。中心(緑)は整合 $z=1,\ \Gamma=0$、左端(赤)は短絡 $z=0,\ \Gamma=-1$、右端(水色)は開放 $z=\infty,\ \Gamma=+1$ です。上半面(薄オレンジ)が誘導性、下半面(薄青)が容量性で、実軸上はリアクタンスゼロの純抵抗を表します。この3点と上下の領域さえ頭に入れば、チャート上の任意の点がどんなインピーダンスかを大まかに読めるようになります。

等抵抗円と等リアクタンス円はスミスチャートの「座標格子」であり、ちょうど直交座標系における水平線と垂直線に対応します。$\Gamma$ 平面という「歪んだ鏡」を通して見た、インピーダンスの地図なのです。

インピーダンスの表現ができたところで、次はアドミタンス(インピーダンスの逆数)をスミスチャート上でどう扱うかを見ていきましょう。

アドミタンスチャート

アドミタンスとスミスチャートの関係

並列回路を扱うときは、インピーダンス $z$ よりもアドミタンス $y = 1/z = g + jb$($g$: コンダクタンス、$b$: サセプタンス)のほうが便利です。並列接続はアドミタンスの加算で表せるためです。

正規化アドミタンス $y = 1/z$ に対する反射係数を求めてみましょう。

$$ \Gamma_y = \frac{z – 1}{z + 1} = \frac{1/y – 1}{1/y + 1} = \frac{1 – y}{1 + y} = -\frac{y – 1}{y + 1} $$

つまり、アドミタンスに対する反射係数は、インピーダンスに対する反射係数の符号を反転($\Gamma_y = -\Gamma_z$)したものです。$\Gamma$ 平面上では、原点を中心に180度回転する操作に対応します。

したがって、インピーダンスのスミスチャートを180度回転させたものがアドミタンスチャートになります。実用上は、インピーダンスチャートの点を原点対称に移すだけで、対応するアドミタンス値が読み取れます。

アドミタンスは180度回転、等コンダクタンス円

左図は、負荷 $z=2+j1.6$(赤)とそのアドミタンス $y=1/z=0.30-j0.24$(水色)が、同じチャート上で原点をはさんで正反対の位置(180度回転)にあることを示しています。右図は等抵抗円を180度回した等コンダクタンス円で、並列素子を追加するとこの円に沿って点が動きます。$g=1$ の円(緑)が並列整合の目標ラインになり、次のL型整合ではこの円へ乗せることが鍵になります。

YZ チャート(複合チャート)

直列素子と並列素子が混在する回路を設計する場合、インピーダンスチャートとアドミタンスチャートを重ね描きしたYZチャートが便利です。直列素子の追加はインピーダンスチャート上の移動、並列素子の追加はアドミタンスチャート上の移動として表現できるため、回路を進むごとにチャートを切り替える必要がなくなります。

それでは、ここまでの理論を使って実際のインピーダンス整合問題を解いてみましょう。

伝送線路上のインピーダンス変換

伝送線路を進むとスミスチャート上を回転する

スミスチャートの最も強力な性質の一つが、伝送線路上の位置移動が $\Gamma$ 平面上の回転に対応することです。

特性インピーダンス $Z_0$ の無損失伝送線路上で、負荷から距離 $\ell$ だけ信号源側に移動したときの反射係数は次のように表されます。

$$ \Gamma(\ell) = \Gamma_L \, e^{-j2\beta\ell} $$

ここで $\beta = 2\pi/\lambda$ は位相定数、$\Gamma_L$ は負荷端での反射係数です。

この式は何を意味しているでしょうか。$|\Gamma|$ は変わらず、位相(偏角)だけが $-2\beta\ell$ だけ回転しています。つまりスミスチャート上では、負荷の点を中心から見た円弧上で時計回りに移動することになります。$\ell = \lambda/2$ のとき $2\beta\ell = 2\pi$ でちょうど一周して元に戻ります。

この性質から、スミスチャートの外周には「波長比 $\ell/\lambda$」の目盛りが刻まれています。信号源に向かう方向が時計回り(Wavelengths Toward Generator)、負荷に向かう方向が反時計回り(Wavelengths Toward Load)です。

整合問題への応用

伝送線路上のインピーダンスが回転で表されるという事実は、整合回路の設計を驚くほど簡単にします。任意の負荷インピーダンスをチャートの中心($\Gamma = 0$、完全整合)に移動させる経路を探せばよいのです。この経路を構成する基本的な操作をまとめると次のようになります。

操作 スミスチャート上の動き
伝送線路の挿入 $|\Gamma|$ 一定の円弧上を時計回りに回転
直列インダクタ追加 等抵抗円に沿って上方へ移動
直列キャパシタ追加 等抵抗円に沿って下方へ移動
並列インダクタ追加 等コンダクタンス円に沿って下方へ移動(アドミタンスチャート上)
並列キャパシタ追加 等コンダクタンス円に沿って上方へ移動(アドミタンスチャート上)

では、具体的な設計例としてLスタブ整合を見てみましょう。

Lスタブ整合の設計例

問題設定

特性インピーダンス $Z_0 = 50\,\Omega$ の伝送線路に、負荷 $Z_L = 100 + j80\,\Omega$ を接続する場合を考えます。目標は、信号源側から見たインピーダンスを $Z_0 = 50\,\Omega$ に整合させることです。

正規化インピーダンスは次のとおりです。

$$ z_L = \frac{100 + j80}{50} = 2 + j1.6 $$

L型整合回路の考え方

L型整合回路は、2つの反射性素子(インダクタまたはキャパシタ)をL字型に配置する最もシンプルな整合ネットワークです。直列素子と並列素子の組み合わせで、負荷インピーダンスをチャートの中心まで移動させます。

一般的な手順は以下のとおりです。

  1. 負荷点 $z_L$ をスミスチャートにプロットする
  2. アドミタンスチャートに変換して $y_L = 1/z_L$ を得る
  3. 並列素子(スタブ)を追加して、等コンダクタンス $g = 1$ の円上に移動させる
  4. 直列素子を追加して、チャート中心($z = 1$)に到達させる

あるいは順序を逆にして、先に直列素子で等コンダクタンス $g = 1$ 円を通る点に移動し、次に並列素子で中心に到達させる方法もあります。

数値計算による設計

まず $y_L$ を計算します。

$$ y_L = \frac{1}{z_L} = \frac{1}{2 + j1.6} $$

分母の共役を掛けて有理化します。

$$ y_L = \frac{2 – j1.6}{(2)^2 + (1.6)^2} = \frac{2 – j1.6}{4 + 2.56} = \frac{2 – j1.6}{6.56} $$

$$ y_L \approx 0.305 – j0.244 $$

ここから並列サセプタンス $jb$ を追加して $g = 1$ の等コンダクタンス円に乗せたいので、コンダクタンスが $g = 0.305$ のまま移動しても $g = 1$ にはなりません。これは直列素子から始めるアプローチが適切であることを示しています。

直列リアクタンス $jx_s$ を追加して $z_L’ = (2 + j1.6) + jx_s$ とし、この $y_L’ = 1/z_L’$ のコンダクタンスが $g = 1$ となる $x_s$ を求めます。

$$ y_L’ = \frac{1}{2 + j(1.6 + x_s)} $$

有理化すると、

$$ g = \frac{2}{4 + (1.6 + x_s)^2} = 1 $$

この方程式を解きます。

$$ 4 + (1.6 + x_s)^2 = 2 $$

$$ (1.6 + x_s)^2 = -2 $$

これは実数解をもちません。つまり、直列リアクタンスだけでは $g = 1$ の円に到達できないケースです。

そこで、並列素子を先に追加するアプローチに切り替えます。$y_L = 0.305 – j0.244$ に並列サセプタンス $jb_p$ を追加して $y’ = 0.305 + j(-0.244 + b_p)$ とし、インピーダンスに変換したとき $r = 1$ となる $b_p$ を求めます。

$$ z’ = \frac{1}{0.305 + j(-0.244 + b_p)} $$

有理化して実部が 1 となる条件を求めます。

$$ r = \frac{0.305}{0.305^2 + (-0.244 + b_p)^2} = 1 $$

$$ 0.305^2 + (-0.244 + b_p)^2 = 0.305 $$

$$ 0.0930 + (-0.244 + b_p)^2 = 0.305 $$

$$ (-0.244 + b_p)^2 = 0.212 $$

$$ b_p = 0.244 \pm 0.460 $$

2つの解が得られます。

  • 解1: $b_p = 0.244 + 0.460 = 0.704$(並列キャパシタ)
  • 解2: $b_p = 0.244 – 0.460 = -0.216$(並列インダクタ)

解1の場合を追いかけましょう。$y’ = 0.305 + j0.460$ なので、

$$ z’ = \frac{0.305 – j0.460}{0.305^2 + 0.460^2} = \frac{0.305 – j0.460}{0.305} = 1 – j1.508 $$

最後に直列リアクタンス $jx_s = +j1.508$(インダクタ)を追加すれば $z = 1 + j0$ となり、整合が完了します。

この一連の操作をスミスチャート上でプロットすれば、整合軌跡を視覚的に確認できます。次のセクションでPythonを使って実際に描画してみましょう。

Pythonによるスミスチャートの描画

基本的なスミスチャートの描画

まず、等抵抗円と等リアクタンス円を描画してスミスチャートの骨格を作ります。先ほど導出した幾何学的パラメータを使って、Pythonでスミスチャートを一から描きましょう。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Arc, Circle

def draw_smith_chart(ax):
    """スミスチャートの等抵抗円・等リアクタンス円を描画"""
    # 単位円(外枠)
    theta = np.linspace(0, 2 * np.pi, 500)
    ax.plot(np.cos(theta), np.sin(theta), 'k-', linewidth=1.5)

    # 等抵抗円: 中心 (r/(r+1), 0), 半径 1/(r+1)
    r_values = [0, 0.2, 0.5, 1, 2, 5]
    for r in r_values:
        center_x = r / (r + 1)
        radius = 1 / (r + 1)
        # 単位円内の部分のみ描画
        t = np.linspace(0, 2 * np.pi, 500)
        cx = center_x + radius * np.cos(t)
        cy = radius * np.sin(t)
        # 単位円内のみフィルタ
        mask = cx**2 + cy**2 <= 1.001
        cx[~mask] = np.nan
        cy[~mask] = np.nan
        ax.plot(cx, cy, color='#888888', linewidth=0.6, alpha=0.7)
        # ラベル
        label_x = center_x - radius
        if -1 <= label_x <= 1:
            ax.text(label_x, 0.03, f'{r}', fontsize=7,
                    ha='center', color='#555555')

    # 等リアクタンス円: 中心 (1, 1/x), 半径 1/|x|
    x_values = [0.2, 0.5, 1, 2, 5]
    for x in x_values:
        center_y = 1 / x
        radius = 1 / x
        t = np.linspace(0, 2 * np.pi, 500)
        cx = 1 + radius * np.cos(t)
        cy = center_y + radius * np.sin(t)
        mask = cx**2 + cy**2 <= 1.001
        cx[~mask] = np.nan
        cy[~mask] = np.nan
        ax.plot(cx, cy, color='#888888', linewidth=0.6, alpha=0.7)
        # 下半面(負のリアクタンス)
        cy_neg = -center_y + radius * np.sin(t)
        cx_neg = 1 + radius * np.cos(t)
        mask_neg = cx_neg**2 + cy_neg**2 <= 1.001
        cx_neg[~mask_neg] = np.nan
        cy_neg[~mask_neg] = np.nan
        ax.plot(cx_neg, cy_neg, color='#888888', linewidth=0.6, alpha=0.7)

    # 実軸
    ax.plot([-1, 1], [0, 0], color='#888888', linewidth=0.6, alpha=0.7)

    ax.set_xlim(-1.15, 1.15)
    ax.set_ylim(-1.15, 1.15)
    ax.set_aspect('equal')
    ax.grid(False)
    ax.axis('off')

# 描画
fig, ax = plt.subplots(1, 1, figsize=(8, 8))
draw_smith_chart(ax)
ax.set_title('Smith Chart', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()

上のコードを実行すると、等抵抗円が同心円のように右側に偏った入れ子構造として現れ、等リアクタンス円弧が上半面と下半面に対称に配置されたスミスチャートが描画されます。$r = 0$ の円が単位円全体に対応し、$r$ が大きくなるにつれて右端に収縮していく様子が確認できます。また、すべての等抵抗円と等リアクタンス円弧が右端の開放点 $(1, 0)$ を共有している点も図から読み取れます。

等抵抗円と等リアクタンス円からなるスミスチャートの骨格

これがコードの出力するスミスチャートの骨格です。等抵抗円(右に偏った入れ子の円)と等リアクタンス円弧(上下対称の弧)が重なり、直交座標の格子に相当する「歪んだ座標グリッド」を形成しています。ここまで手計算で導いた中心・半径の式が、そのままこの一枚の格子に結晶している様子が確認できます。

整合軌跡のプロット

先ほど設計したL型整合回路の軌跡をスミスチャート上にプロットしてみましょう。負荷点から出発し、並列素子の追加(等コンダクタンス円に沿った移動)と直列素子の追加(等抵抗円に沿った移動)を経て中心に到達する経路を可視化します。

import numpy as np
import matplotlib.pyplot as plt

def z_to_gamma(z):
    """正規化インピーダンスから反射係数へ変換"""
    return (z - 1) / (z + 1)

def gamma_to_z(gamma):
    """反射係数から正規化インピーダンスへ変換"""
    return (1 + gamma) / (1 - gamma)

def draw_smith_chart(ax):
    """スミスチャートの等抵抗円・等リアクタンス円を描画"""
    theta = np.linspace(0, 2 * np.pi, 500)
    ax.plot(np.cos(theta), np.sin(theta), 'k-', linewidth=1.5)

    r_values = [0, 0.2, 0.5, 1, 2, 5]
    for r in r_values:
        center_x = r / (r + 1)
        radius = 1 / (r + 1)
        t = np.linspace(0, 2 * np.pi, 500)
        cx = center_x + radius * np.cos(t)
        cy = radius * np.sin(t)
        mask = cx**2 + cy**2 <= 1.001
        cx[~mask] = np.nan
        cy[~mask] = np.nan
        ax.plot(cx, cy, color='#cccccc', linewidth=0.5)

    x_values = [0.2, 0.5, 1, 2, 5]
    for x in x_values:
        center_y = 1 / x
        radius = 1 / x
        t = np.linspace(0, 2 * np.pi, 500)
        for sign in [1, -1]:
            cx = 1 + radius * np.cos(t)
            cy = sign * center_y + radius * np.sin(t)
            mask = cx**2 + cy**2 <= 1.001
            cx[~mask] = np.nan
            cy[~mask] = np.nan
            ax.plot(cx, cy, color='#cccccc', linewidth=0.5)

    ax.plot([-1, 1], [0, 0], color='#cccccc', linewidth=0.5)
    ax.set_xlim(-1.15, 1.15)
    ax.set_ylim(-1.15, 1.15)
    ax.set_aspect('equal')
    ax.grid(False)
    ax.axis('off')

# 整合設計のパラメータ
Z0 = 50
ZL = 100 + 80j
zL = ZL / Z0  # 2 + 1.6j

# 反射係数の計算
gamma_L = z_to_gamma(zL)

# Step 1: 並列サセプタンス b_p = 0.704 を追加
yL = 1 / zL  # 0.305 - 0.244j
bp = 0.704
y_after_shunt = yL + 1j * bp  # 0.305 + 0.460j
z_after_shunt = 1 / y_after_shunt
gamma_after_shunt = z_to_gamma(z_after_shunt)

# Step 2: 直列リアクタンス xs = 1.508 を追加
xs = -z_after_shunt.imag  # z_after_shuntの虚部を打ち消す
z_matched = z_after_shunt + 1j * xs  # = 1 + 0j
gamma_matched = z_to_gamma(z_matched)

# 軌跡の生成
# 並列サセプタンスの軌跡(等コンダクタンス円に沿った移動)
b_trace = np.linspace(yL.imag, y_after_shunt.imag, 100)
y_trace1 = yL.real + 1j * b_trace
z_trace1 = 1 / y_trace1
gamma_trace1 = z_to_gamma(z_trace1)

# 直列リアクタンスの軌跡(等抵抗円に沿った移動)
x_trace = np.linspace(z_after_shunt.imag, 0, 100)
z_trace2 = z_after_shunt.real + 1j * x_trace
gamma_trace2 = z_to_gamma(z_trace2)

# 描画
fig, ax = plt.subplots(1, 1, figsize=(8, 8))
draw_smith_chart(ax)

# 軌跡のプロット
ax.plot(gamma_trace1.real, gamma_trace1.imag, 'b-', linewidth=2.5,
        label='Shunt susceptance (parallel C)')
ax.plot(gamma_trace2.real, gamma_trace2.imag, 'r-', linewidth=2.5,
        label='Series reactance (series L)')

# 特徴的な点のマーク
ax.plot(gamma_L.real, gamma_L.imag, 'ko', markersize=10, zorder=5)
ax.annotate(f'$z_L$ = {zL.real:.1f}+j{zL.imag:.1f}',
            xy=(gamma_L.real, gamma_L.imag),
            xytext=(gamma_L.real - 0.3, gamma_L.imag + 0.15),
            fontsize=10, arrowprops=dict(arrowstyle='->', color='black'))

ax.plot(gamma_after_shunt.real, gamma_after_shunt.imag, 's',
        color='blue', markersize=10, zorder=5)
ax.annotate('After shunt C',
            xy=(gamma_after_shunt.real, gamma_after_shunt.imag),
            xytext=(gamma_after_shunt.real - 0.4, gamma_after_shunt.imag + 0.12),
            fontsize=9, arrowprops=dict(arrowstyle='->', color='blue'))

ax.plot(0, 0, 'r*', markersize=15, zorder=5)
ax.annotate('Matched ($z$=1)', xy=(0, 0), xytext=(-0.4, -0.2),
            fontsize=10, arrowprops=dict(arrowstyle='->', color='red'))

ax.set_title('L-matching Network Trajectory on Smith Chart',
             fontsize=13, fontweight='bold')
ax.legend(loc='lower left', fontsize=10)
plt.tight_layout()
plt.show()

# 設計値の表示
print(f"負荷インピーダンス: ZL = {ZL} Ω")
print(f"正規化: zL = {zL}")
print(f"正規化アドミタンス: yL = {yL:.4f}")
print(f"並列サセプタンス: bp = {bp:.3f}")
print(f"直列リアクタンス: xs = {xs:.3f}")
print(f"整合後: z = {z_matched:.6f}")

このプロットから、L型整合の軌跡がスミスチャート上でどのように進むかが視覚的に理解できます。

  1. 青い軌跡(並列キャパシタ): 負荷点 $z_L$ から出発し、等コンダクタンス円(アドミタンスチャートの等抵抗円)に沿って移動します。サセプタンスを追加しているのでコンダクタンスは一定のまま、サセプタンスだけが変化しています。
  2. 赤い軌跡(直列インダクタ): 等抵抗円 $r = 1$ に沿って中心に向かいます。直列リアクタンスの追加により、抵抗は変わらずリアクタンスだけが減少して整合点に到達します。
  3. 赤い星印(中心) が完全整合 $\Gamma = 0$ を示し、ここに到達すれば反射がゼロであることを意味します。

L型整合回路の軌跡(並列C→直列Lで中心へ)

負荷 $z_L = 2 + j1.6$(白丸)から、まず並列キャパシタで水色の軌跡(等コンダクタンス円)を通って四角の点へ移り、そこから直列インダクタで赤い軌跡(等抵抗円 $r=1$)に沿って中心の整合点(緑の星)へ到達します。2本の円弧をつなぐだけで任意の負荷を中心へ導けるのがL型整合の要点で、コードの出力は $b_p = 0.704$、$x_s = 1.510$ を経て $z = 1.000$ に収束することを確かめています。

VSWR円の可視化

スミスチャートでもう一つ重要な概念がVSWR(電圧定在波比)円です。VSWRは $|\Gamma|$ と直接関係しており、スミスチャート上では原点を中心とする円で表されます。

$$ \text{VSWR} = \frac{1 + |\Gamma|}{1 – |\Gamma|} $$

伝送線路上のどの位置でも $|\Gamma|$ は一定(無損失の場合)なので、伝送線路上の移動はこのVSWR円の上を回転する操作に対応します。

import numpy as np
import matplotlib.pyplot as plt

def draw_smith_chart(ax):
    """スミスチャート描画(簡易版)"""
    theta = np.linspace(0, 2 * np.pi, 500)
    ax.plot(np.cos(theta), np.sin(theta), 'k-', linewidth=1.5)
    for r in [0, 0.2, 0.5, 1, 2, 5]:
        cx_r = r / (r + 1)
        rad = 1 / (r + 1)
        t = np.linspace(0, 2 * np.pi, 500)
        x_c = cx_r + rad * np.cos(t)
        y_c = rad * np.sin(t)
        mask = x_c**2 + y_c**2 <= 1.001
        x_c[~mask] = np.nan
        y_c[~mask] = np.nan
        ax.plot(x_c, y_c, color='#cccccc', linewidth=0.5)
    for xv in [0.2, 0.5, 1, 2, 5]:
        rad = 1 / xv
        t = np.linspace(0, 2 * np.pi, 500)
        for s in [1, -1]:
            x_c = 1 + rad * np.cos(t)
            y_c = s / xv + rad * np.sin(t)
            mask = x_c**2 + y_c**2 <= 1.001
            x_c[~mask] = np.nan
            y_c[~mask] = np.nan
            ax.plot(x_c, y_c, color='#cccccc', linewidth=0.5)
    ax.plot([-1, 1], [0, 0], color='#cccccc', linewidth=0.5)
    ax.set_xlim(-1.15, 1.15)
    ax.set_ylim(-1.15, 1.15)
    ax.set_aspect('equal')
    ax.grid(False)
    ax.axis('off')

# 負荷インピーダンスとVSWR
zL = 2 + 1.6j
gamma_L = (zL - 1) / (zL + 1)
gamma_mag = abs(gamma_L)
vswr = (1 + gamma_mag) / (1 - gamma_mag)

# VSWR円の描画
fig, ax = plt.subplots(1, 1, figsize=(8, 8))
draw_smith_chart(ax)

theta = np.linspace(0, 2 * np.pi, 500)
ax.plot(gamma_mag * np.cos(theta), gamma_mag * np.sin(theta),
        'g--', linewidth=2, label=f'VSWR = {vswr:.2f} circle')

# 負荷点
ax.plot(gamma_L.real, gamma_L.imag, 'ko', markersize=10, zorder=5)
ax.annotate(f'$z_L$ = 2+j1.6\n$|\\Gamma|$ = {gamma_mag:.3f}',
            xy=(gamma_L.real, gamma_L.imag),
            xytext=(gamma_L.real - 0.35, gamma_L.imag + 0.15),
            fontsize=10, arrowprops=dict(arrowstyle='->', color='black'))

# 伝送線路上の移動(λ/8回転 = 90°回転)
angles = np.linspace(0, -np.pi/2, 100)
gamma_rotation = gamma_mag * np.exp(1j * (np.angle(gamma_L) + angles))
ax.plot(gamma_rotation.real, gamma_rotation.imag, 'm-', linewidth=2.5,
        label=r'Transmission line ($\lambda$/8)')

# 端点
gamma_end = gamma_rotation[-1]
z_end = (1 + gamma_end) / (1 - gamma_end)
ax.plot(gamma_end.real, gamma_end.imag, 'm^', markersize=10, zorder=5)
ax.annotate(f'z = {z_end.real:.2f}+j{z_end.imag:.2f}',
            xy=(gamma_end.real, gamma_end.imag),
            xytext=(gamma_end.real - 0.4, gamma_end.imag - 0.15),
            fontsize=9, arrowprops=dict(arrowstyle='->', color='purple'))

ax.set_title('VSWR Circle and Transmission Line Rotation',
             fontsize=13, fontweight='bold')
ax.legend(loc='lower left', fontsize=10)
plt.tight_layout()
plt.show()

print(f"|Γ| = {gamma_mag:.4f}")
print(f"VSWR = {vswr:.2f}")
print(f"λ/8回転後のインピーダンス: z = {z_end:.4f}")

このグラフからいくつかの重要なことが読み取れます。

  1. 緑の破線(VSWR円) が原点を中心とする円であり、無損失伝送線路上のすべての点がこの円上に位置します。$|\Gamma| \approx 0.555$ なのでVSWRは約3.49であり、かなりの不整合状態であることがわかります。
  2. 紫の軌跡 が伝送線路を $\lambda/8$ だけ進んだときの回転を示しています。$\lambda/8$ は位相にして90度に対応するため、チャート上では時計回りに90度の円弧を描きます。
  3. 伝送線路の挿入だけではVSWR円から離れることができない($|\Gamma|$ が変わらない)ため、整合には反射性素子(スタブやランプドエレメント)が必要であることが図からも明らかです。

VSWR円と伝送線路λ/8回転による時計回りの移動

負荷点(白丸、$|\Gamma|=0.555$)を中心からの半径として、緑の破線が半径一定のVSWR円を描いています。紫の実線は伝送線路を $\lambda/8$ 進んだときの移動で、半径($|\Gamma|$)はそのままに時計回りに90度回転し、インピーダンスが $z = 0.92 – j1.28$ へと変化します。伝送線路をどれだけ足してもこの円の外へは出られない、つまり反射の大きさは変わらないことが視覚的に納得できます。

ここまでで、スミスチャートの理論的基礎と実践的な使い方を見てきました。最後に周波数特性を含めた応用例を確認しましょう。

周波数掃引とスミスチャート

周波数依存性の可視化

実際の回路では、インピーダンスは周波数に依存します。ネットワークアナライザで測定した $S_{11}$ パラメータの周波数掃引をスミスチャート上にプロットすると、回路の帯域特性を一目で把握できます。

簡単な例として、直列RLC回路のインピーダンスの周波数特性をスミスチャート上に描いてみましょう。

import numpy as np
import matplotlib.pyplot as plt

def draw_smith_chart(ax):
    """スミスチャート描画"""
    theta = np.linspace(0, 2 * np.pi, 500)
    ax.plot(np.cos(theta), np.sin(theta), 'k-', linewidth=1.5)
    for r in [0, 0.2, 0.5, 1, 2, 5]:
        cx_r = r / (r + 1)
        rad = 1 / (r + 1)
        t = np.linspace(0, 2 * np.pi, 500)
        xc = cx_r + rad * np.cos(t)
        yc = rad * np.sin(t)
        mask = xc**2 + yc**2 <= 1.001
        xc[~mask] = np.nan
        yc[~mask] = np.nan
        ax.plot(xc, yc, color='#cccccc', linewidth=0.5)
    for xv in [0.2, 0.5, 1, 2, 5]:
        rad = 1 / xv
        t = np.linspace(0, 2 * np.pi, 500)
        for s in [1, -1]:
            xc = 1 + rad * np.cos(t)
            yc = s / xv + rad * np.sin(t)
            mask = xc**2 + yc**2 <= 1.001
            xc[~mask] = np.nan
            yc[~mask] = np.nan
            ax.plot(xc, yc, color='#cccccc', linewidth=0.5)
    ax.plot([-1, 1], [0, 0], color='#cccccc', linewidth=0.5)
    ax.set_xlim(-1.15, 1.15)
    ax.set_ylim(-1.15, 1.15)
    ax.set_aspect('equal')
    ax.grid(False)
    ax.axis('off')

# 直列RLC回路のパラメータ
Z0 = 50       # 特性インピーダンス [Ω]
R = 50        # 抵抗 [Ω]
L = 100e-9    # インダクタンス [H]
C = 10e-12    # キャパシタンス [F]

# 共振周波数
f0 = 1 / (2 * np.pi * np.sqrt(L * C))

# 周波数掃引
f = np.linspace(50e6, 500e6, 1000)
omega = 2 * np.pi * f
Z = R + 1j * (omega * L - 1 / (omega * C))
z_norm = Z / Z0
gamma = (z_norm - 1) / (z_norm + 1)

# 描画
fig, axes = plt.subplots(1, 2, figsize=(16, 8))

# 左: スミスチャート
ax = axes[0]
draw_smith_chart(ax)
scatter = ax.scatter(gamma.real, gamma.imag, c=f/1e6, cmap='coolwarm',
                     s=3, zorder=3)
cbar = plt.colorbar(scatter, ax=ax, fraction=0.046, pad=0.04)
cbar.set_label('Frequency [MHz]', fontsize=10)

# 共振点
idx_res = np.argmin(np.abs(f - f0))
ax.plot(gamma[idx_res].real, gamma[idx_res].imag, 'k*',
        markersize=15, zorder=5)
ax.annotate(f'$f_0$ = {f0/1e6:.1f} MHz',
            xy=(gamma[idx_res].real, gamma[idx_res].imag),
            xytext=(-0.5, 0.3), fontsize=10,
            arrowprops=dict(arrowstyle='->', color='black'))

ax.set_title('Series RLC on Smith Chart', fontsize=13, fontweight='bold')

# 右: |Γ| vs 周波数
ax2 = axes[1]
ax2.plot(f/1e6, 20*np.log10(np.abs(gamma)), 'b-', linewidth=1.5)
ax2.axvline(f0/1e6, color='red', linestyle='--', alpha=0.7,
            label=f'$f_0$ = {f0/1e6:.1f} MHz')
ax2.set_xlabel('Frequency [MHz]', fontsize=12)
ax2.set_ylabel('$|\\Gamma|$ [dB]', fontsize=12)
ax2.set_title('Return Loss', fontsize=13, fontweight='bold')
ax2.legend(fontsize=10)
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

print(f"共振周波数: f0 = {f0/1e6:.1f} MHz")
print(f"共振時のインピーダンス: Z = {Z[idx_res]:.2f} Ω")
print(f"共振時の正規化インピーダンス: z = {z_norm[idx_res]:.4f}")
print(f"共振時の|Γ|: {np.abs(gamma[idx_res]):.6f}")

このグラフから、直列RLC回路の周波数特性について以下のことが読み取れます。

  1. スミスチャート上の軌跡 は、低周波では容量性(下半面)に位置し、周波数が上がるにつれて上半面(誘導性)に移動します。これは $\omega L – 1/(\omega C)$ のリアクタンスが周波数とともに符号を変えることに対応しています。
  2. 共振周波数 $f_0 \approx 159$ MHz 付近で軌跡が実軸を横切ります。このとき $z = 1$($R = Z_0$に設計した場合)で完全整合となり、$|\Gamma| \to 0$ です。
  3. 右側のリターンロス曲線 は共振周波数で急激なディップ(反射の最小値)を示しており、スミスチャート上の実軸横断と一致しています。共振のQ値が高いほど軌跡のループは細長くなり、リターンロスのディップも狭帯域になります。

直列RLC回路の周波数掃引とリターンロス

左のスミスチャートでは、低周波(紫)で下半面の容量性、高周波(黄)で上半面の誘導性に軌跡が分布し、共振 $f_0 \approx 159.2$ MHz で実軸を横切って整合点(緑の星)に達します。右のリターンロス曲線はこの $f_0$ で鋭いディップを示し、$|\Gamma|$ がほぼゼロ($-50$ dB 以下)まで落ち込んでいます。色(周波数)と位置の対応を見れば、スミスチャート一枚で回路の帯域特性を直感的に読み取れることがわかります。

まとめ

本記事では、スミスチャートの基礎を等抵抗円・等リアクタンス円の幾何学的導出から出発して解説しました。

  • 正規化インピーダンスと反射係数 の双方向変換 $z = (1+\Gamma)/(1-\Gamma)$ がスミスチャートの数学的基礎である
  • 等抵抗円 は中心 $(r/(r+1), 0)$、半径 $1/(r+1)$ の円であり、すべて右端 $(1,0)$ を通る
  • 等リアクタンス円 は中心 $(1, 1/x)$、半径 $1/|x|$ の円弧であり、やはり $(1,0)$ を通る
  • アドミタンスチャート はインピーダンスチャートの180度回転であり、並列回路の設計に用いる
  • 伝送線路上の移動 はVSWR円上の時計回り回転に対応し、整合回路の設計に直結する
  • L型整合回路 では、並列素子と直列素子の組み合わせで負荷をチャート中心に導く

スミスチャートは一見すると複雑に見えますが、その本質は「複素数の計算を幾何学的操作に変換する道具」です。一度読み方を覚えれば、RF回路設計やアンテナ整合の強力な武器になります。

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