アンテナを無線機につなぐとき、データシートには必ず「VSWR 1.5 以下」「リターンロス 20 dB 以上」といった数字が並んでいます。これらは何を意味していて、なぜ性能の良し悪しを判断する基準になるのでしょうか。実は VSWR(電圧定在波比)、リターンロス(反射損失)、反射係数 $\Gamma$ の 3 つは、すべて「伝送線路に送り込んだ電力のうち、どれだけが負荷で反射して戻ってきてしまうか」という同じ一つの現象を、異なる角度から測っているにすぎません。一つがわかれば残り二つは計算で求まる、相互変換可能な兄弟のような量です。
たとえば 5G 基地局のアンテナ給電線、衛星トランスポンダの送信段、あるいは MRI 装置の RF コイル — いずれも「送り込んだ電力を反射させずに負荷へ届けたい」という要求があり、その達成度をこの 3 指標で管理します。反射が大きいと、送信電力が無駄になるだけでなく、戻ってきた電力が増幅器を破壊したり、線路上に定在波という電圧の山と谷を作って局所的な絶縁破壊を引き起こしたりします。
この 3 指標を自在に行き来できるようになると、以下のような場面で見通しが格段に良くなります。
- アンテナ設計: 測定したリターンロス特性から、どの周波数帯でアンテナが「整合している」かを判断し、帯域を評価できます
- 増幅器・フィルタの段間整合: 各段の入力 VSWR を抑えることで、反射による利得低下や発振を防げます
- 同軸ケーブルの故障診断: TDR(時間領域反射測定)で線路上の不整合点を反射係数として検出できます
本記事の内容
- 反射係数 $\Gamma$ の定義と、負荷インピーダンスからの導出
- 入射波と反射波の重ね合わせが作る定在波のメカニズム
- 定在波の最大・最小から VSWR を導出する
- リターンロス RL と反射係数の対数関係
- ミスマッチ損失(反射で失われる電力)の導出
- 3 指標の相互変換と、VSWR = 2 が何 dB・何 % に相当するか
- Python による電圧包絡線・定在波パターン・指標対応の可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
反射係数とは
水の流れているホースの先端を急に細いノズルに付け替えると、勢いよく流れていた水の一部が押し戻されてホース内で圧力が乱れます。電気の世界でも全く同じことが起こります。特性インピーダンス $Z_0$(たいていは 50 Ω)の伝送線路を進んできた電圧波が、それと値の異なる負荷インピーダンス $Z_L$ にぶつかると、波の一部はそのまま負荷に吸い込まれますが、残りは「行き場を失って」線路を逆向きに戻っていきます。この戻る波が反射波です。
反射波がどれだけ生じるかを、入射波に対する比として表したものが反射係数 $\Gamma$(ガンマ)です。直感的には「ぶつかった先のインピーダンスが、線路のインピーダンスからどれだけズレているか」を測る量だと考えてください。ズレがなければ反射はゼロ、ズレが大きいほど反射が大きくなります。
反射係数は一般に複素数で、振幅と位相を持ちます。
$$ \Gamma = |\Gamma| e^{j\theta} $$
ここで $|\Gamma|$ は反射波と入射波の振幅比、$\theta$ は反射時に生じる位相のずれです。本記事で扱う VSWR やリターンロスは、このうち振幅 $|\Gamma|$ のみで決まります。位相 $\theta$ は定在波の山がどこに来るかには効きますが、山と谷の比そのものには影響しないからです。
それでは、この反射係数が負荷インピーダンスからどう決まるのかを、伝送線路の電圧・電流の境界条件から導いていきましょう。
反射係数の導出
入射波と反射波の重ね合わせ
伝送線路上の電圧を考えます。負荷を原点 $z = 0$ に置き、線路を負の $z$ 方向(負荷から電源側へ向かう向き)に取ります。線路上の電圧は、負荷へ向かう入射波と負荷から戻る反射波の和で表せます。
$$ V(z) = V^+ e^{-j\beta z} + V^- e^{+j\beta z} $$
ここで $V^+$ は入射波の複素振幅、$V^-$ は反射波の複素振幅、$\beta$ は位相定数です。$e^{-j\beta z}$ は $+z$ 方向(負荷へ向かう向き)に進む波、$e^{+j\beta z}$ は $-z$ 方向(負荷から戻る向き)に進む波を表します。
電流についても同様ですが、伝送線路理論では進行波の電圧と電流は特性インピーダンス $Z_0$ で結ばれ、しかも反射波は進行方向が逆なので電流の符号が反転します。
$$ I(z) = \frac{V^+}{Z_0} e^{-j\beta z} – \frac{V^-}{Z_0} e^{+j\beta z} $$
反射波の項にマイナス符号が付くのが要点です。これは「逆向きに進む波では、電圧の向きが同じでも電流(電荷の流れる向き)は逆になる」という物理を反映しています。
負荷での境界条件
負荷の位置 $z = 0$ では、電圧と電流の比がオームの法則により負荷インピーダンス $Z_L$ に等しくなければなりません。これが境界条件です。$z = 0$ を代入すると指数因子はすべて 1 になるので、
$$ Z_L = \frac{V(0)}{I(0)} = \frac{V^+ + V^-}{(V^+ – V^-)/Z_0} = Z_0 \frac{V^+ + V^-}{V^+ – V^-} $$
ここで反射係数を、負荷点での反射波振幅と入射波振幅の比として定義します。
$$ \Gamma = \frac{V^-}{V^+} $$
この定義を上の式に代入していきます。まず分子・分母を $V^+$ で割ると、$V^-/V^+ = \Gamma$ が現れます。
$$ Z_L = Z_0 \frac{V^+ + V^-}{V^+ – V^-} = Z_0 \frac{1 + V^-/V^+}{1 – V^-/V^+} = Z_0 \frac{1 + \Gamma}{1 – \Gamma} $$
最後に、この式を $\Gamma$ について解きます。両辺に $(1 – \Gamma)$ を掛けて整理すると、
$$ Z_L (1 – \Gamma) = Z_0 (1 + \Gamma) $$
$\Gamma$ を含む項を左辺に集めると、
$$ Z_L – Z_0 = \Gamma (Z_L + Z_0) $$
したがって、反射係数の基本公式が得られます。
$$ \boxed{\Gamma = \frac{Z_L – Z_0}{Z_L + Z_0}} $$
この式は本記事の出発点です。分子 $Z_L – Z_0$ は「負荷と線路のインピーダンスのズレ」そのものであり、分母 $Z_L + Z_0$ で規格化されています。$Z_L = Z_0$(完全整合)なら $\Gamma = 0$ で反射ゼロ、$Z_L = 0$(短絡)なら $\Gamma = -1$、$Z_L \to \infty$(開放)なら $\Gamma = +1$ となり、いずれも全反射です。
反射係数の取りうる範囲
受動的な負荷(電力を消費するだけで生成しない負荷)では、反射波の振幅は入射波を超えられません。エネルギー保存から当然の要請です。したがって、
$$ 0 \leq |\Gamma| \leq 1 $$
が常に成り立ちます。$|\Gamma| = 0$ が理想(無反射)、$|\Gamma| = 1$ が最悪(全反射)です。実用上は $|\Gamma|$ を 0 にできるだけ近づけることが整合設計の目標になります。
反射係数の振幅 $|\Gamma|$ が決まると、次に問題になるのは「この反射波が線路上にどんな電圧分布を作るか」です。入射波と反射波が重なり合うことで生じる定在波こそが、VSWR という指標を生む現象です。次節で詳しく見ていきましょう。
定在波の発生メカニズム
入射波と反射波が干渉する
反射が起きると、線路上では負荷へ向かう波と戻る波が同時に存在し、両者が干渉します。場所によって 2 つの波が強め合ったり打ち消し合ったりするため、電圧の振幅が線路に沿って周期的に変化します。これが定在波(standing wave)です。
イメージとしては、ロープの両端を持って揺らしたときにできる「揺れの大きい腹」と「ほとんど動かない節」を思い浮かべてください。腹では入射波と反射波が同位相で重なって振幅が最大になり、節では逆位相で打ち消し合って振幅が最小になります。
線路上の電圧の大きさを計算しましょう。$V(z) = V^+ e^{-j\beta z} + V^- e^{+j\beta z}$ から、反射係数 $\Gamma = V^-/V^+$ を使って $V^+$ でくくり出すと、
$$ V(z) = V^+ e^{-j\beta z}\left(1 + \Gamma e^{+2j\beta z}\right) $$
この電圧の振幅(絶対値)を取ります。$|e^{-j\beta z}| = 1$ なので、
$$ |V(z)| = |V^+| \left|1 + \Gamma e^{+2j\beta z}\right| = |V^+| \left|1 + |\Gamma| e^{j(2\beta z + \theta)}\right| $$
ここで $\Gamma = |\Gamma| e^{j\theta}$ と書き、位相をまとめました。
振幅の最大と最小
上の式の $|1 + |\Gamma| e^{j\phi}|$ という形に注目します($\phi = 2\beta z + \theta$)。これは複素平面上で、長さ 1 のベクトルに長さ $|\Gamma|$ のベクトルを角度 $\phi$ で足したものの長さです。$\phi$ は線路上の位置 $z$ とともに変化するため、足し算の結果は $\phi$ に応じて伸び縮みします。
2 つのベクトルが同じ向き($\phi = 0$)に揃うとき、長さは最大になります。
$$ |V|_{\max} = |V^+|(1 + |\Gamma|) $$
逆に、2 つのベクトルが正反対($\phi = \pi$)を向くとき、長さは最小になります。
$$ |V|_{\min} = |V^+|(1 – |\Gamma|) $$
このように、線路に沿って電圧振幅は $|V^+|(1+|\Gamma|)$ と $|V^+|(1-|\Gamma|)$ の間を周期的に往復します。山(電圧最大)と谷(電圧最小)が交互に現れるのが定在波の正体です。
ここまでで定在波の山と谷の高さがわかりました。この山と谷の比こそが、測定で最も扱いやすい指標 VSWR です。次節でその定義と導出を見ていきます。
VSWR の導出
定在波比という発想
なぜ反射係数そのものではなく、わざわざ定在波比という量を使うのでしょうか。歴史的には、複素数である反射係数 $\Gamma$ を直接測るのは難しかったからです。一方、線路に沿ってプローブを滑らせて電圧の最大値と最小値を読み取ることは、スロット線路という測定器で比較的簡単にできました。そこで「電圧の山と谷の比」という、測定しやすい実数の指標が標準になりました。
電圧定在波比(Voltage Standing Wave Ratio, VSWR)は、その名の通り定在波の電圧最大値と最小値の比として定義されます。
$$ \text{VSWR} \equiv \frac{|V|_{\max}}{|V|_{\min}} $$
定義から VSWR は必ず 1 以上の実数です(最大値は最小値以上だから)。
反射係数との関係
前節で求めた最大値と最小値を代入します。$|V^+|$ が分子・分母で約分されることに注意すると、
$$ \text{VSWR} = \frac{|V^+|(1 + |\Gamma|)}{|V^+|(1 – |\Gamma|)} = \frac{1 + |\Gamma|}{1 – |\Gamma|} $$
これが VSWR の基本公式です。
$$ \boxed{\text{VSWR} = \frac{1 + |\Gamma|}{1 – |\Gamma|}} $$
両端を確認しておきましょう。完全整合 $|\Gamma| = 0$ のとき VSWR $= 1/1 = 1$、これは定在波がなく線路上どこでも電圧が一定であることを意味します(山と谷の区別がない理想状態)。全反射 $|\Gamma| = 1$ のとき VSWR $= 2/0 = \infty$、谷の電圧がゼロになり、山との比が発散します。
VSWR から反射係数を逆算する
測定で VSWR を得たら、そこから $|\Gamma|$ を逆算したい場面が多くあります。上式を $|\Gamma|$ について解きましょう。$\text{VSWR} = S$ と置くと、
$$ S (1 – |\Gamma|) = 1 + |\Gamma| $$
$|\Gamma|$ を含む項を左辺に集めると、
$$ S – 1 = |\Gamma| (S + 1) $$
したがって、
$$ |\Gamma| = \frac{S – 1}{S + 1} = \frac{\text{VSWR} – 1}{\text{VSWR} + 1} $$
この逆変換は、反射係数の基本公式 $\Gamma = (Z_L – Z_0)/(Z_L + Z_0)$ と全く同じ形をしている点が美しいところです。VSWR が線路インピーダンス(基準 1)に対する「実効的なインピーダンス比」のように振る舞うことを示唆しています。実際、純抵抗負荷 $Z_L > Z_0$ の場合は VSWR $= Z_L/Z_0$、$Z_L < Z_0$ の場合は VSWR $= Z_0/Z_L$ という簡潔な関係が成り立ちます。
VSWR は測定に便利な実数でしたが、反射の「大きさ」を桁で表現したい場面では対数指標のほうが直感的です。次節では、デシベルで反射量を表すリターンロスを導入します。
リターンロスの導出
なぜ対数で測るのか
反射係数 $|\Gamma|$ が 0.1 から 0.01 へ改善したとき、線形のままだと「0.09 減った」としか言えず、改善のインパクトが伝わりにくいものです。通信や RF の世界では、電力比を桁で扱うデシベル(dB)が共通語になっているため、反射量もデシベルで表すのが自然です。これがリターンロス(Return Loss, RL)です。
リターンロスは「入射電力に対して、反射して戻ってきた電力がどれだけ小さいか」を正の dB 値で表したものです。電力は電圧振幅の 2 乗に比例するので、反射電力と入射電力の比は $|\Gamma|^2$ です。
$$ \frac{P_{\text{ref}}}{P_{\text{inc}}} = |\Gamma|^2 $$
これをデシベルに直し、損失を正の値として表すために符号を反転します。
$$ \text{RL} = -10 \log_{10}\left(\frac{P_{\text{ref}}}{P_{\text{inc}}}\right) = -10 \log_{10} |\Gamma|^2 $$
対数の中の 2 乗を前に出すと、
$$ \boxed{\text{RL} = -20 \log_{10} |\Gamma| \quad [\text{dB}]} $$
電力比なら係数 10、電圧比($|\Gamma|$)なら係数 20 になるのは、$\log_{10}|\Gamma|^2 = 2\log_{10}|\Gamma|$ という対数の性質によるものです。
リターンロスの符号と読み方
定義から、$|\Gamma| < 1$ のとき $\log_{10}|\Gamma|$ は負なので、マイナスを掛けた RL は正の値になります。完全整合 $|\Gamma| = 0$ では $\text{RL} = +\infty$(反射が全くないので「損失」が無限大に良い)、全反射 $|\Gamma| = 1$ では $\text{RL} = 0$ dB(戻ってきた電力が入射と等しい、最悪)です。
ここで注意したいのは符号の流儀です。物理的には「反射損失」なので RL は正の量として扱うのが本記事の立場ですが、ネットワークアナライザの画面では $S_{11}$ パラメータをそのまま表示するため、$20\log_{10}|\Gamma|$ という負の dB で出てくることが多くあります。たとえば「$S_{11} = -20$ dB」と「リターンロス 20 dB」は同じ状態を指しています。良い整合ほど $S_{11}$ は深いマイナスに、RL は大きなプラスになる、と覚えておけば混乱しません。
RL から反射係数を逆算する
リターンロスから $|\Gamma|$ を求めるには、定義式を指数の形に戻します。$\text{RL} = -20\log_{10}|\Gamma|$ より、
$$ \log_{10}|\Gamma| = -\frac{\text{RL}}{20} $$
両辺を 10 のべきにすると、
$$ |\Gamma| = 10^{-\text{RL}/20} $$
たとえば $\text{RL} = 20$ dB なら $|\Gamma| = 10^{-1} = 0.1$、$\text{RL} = 40$ dB なら $|\Gamma| = 10^{-2} = 0.01$ です。RL が 20 dB 増えるごとに反射電圧が 1 桁小さくなる、という対数の威力がよくわかります。
反射係数・VSWR・リターンロスの 3 つが出そろいました。しかし「反射した分が戻ってきた」というだけでは、肝心の「負荷にどれだけ電力が届いたか」が見えません。次節で、反射によって失われる正味の電力、ミスマッチ損失を導きます。
ミスマッチ損失の導出
届いた電力という視点
リターンロスは「戻ってきた電力の小ささ」を測る指標でした。一方、システム設計者が本当に知りたいのは「結局、負荷に何 % の電力が届いたのか」です。この「届いた割合」を dB で表したものがミスマッチ損失(Mismatch Loss, ML)です。
エネルギー保存を考えます。入射電力 $P_{\text{inc}}$ のうち、$|\Gamma|^2$ の割合が反射されるので、負荷に届く(吸収される)電力 $P_{\text{abs}}$ は残りです。
$$ P_{\text{abs}} = P_{\text{inc}} – P_{\text{ref}} = P_{\text{inc}}(1 – |\Gamma|^2) $$
つまり負荷に届く電力の割合は $1 – |\Gamma|^2$ です。これをデシベルの損失として表すと、
$$ \boxed{\text{ML} = -10 \log_{10}\left(1 – |\Gamma|^2\right) \quad [\text{dB}]} $$
ここでは電力の割合をそのまま扱うので係数は 10 です。$1 – |\Gamma|^2 \leq 1$ なので対数は負、符号を反転した ML は正の損失値になります。
リターンロスとミスマッチ損失の違い
両者を混同しないことが大切です。具体的な数字で比べましょう。$|\Gamma| = 0.1$(RL = 20 dB)のとき、反射電力は $|\Gamma|^2 = 0.01$、すなわち入射の 1 % にすぎません。残りの 99 % が負荷に届きます。このときミスマッチ損失は、
$$ \text{ML} = -10\log_{10}(1 – 0.01) = -10\log_{10}(0.99) \approx 0.044 \ \text{dB} $$
リターンロスが 20 dB もあるのに、実際に失われる電力はわずか 0.044 dB です。これは「反射量(RL)」と「正味の損失(ML)」が全く別物であることを端的に示しています。反射が 1 % あっても、システム全体の電力効率に与える影響は 0.04 dB と微々たるもの、というわけです。
逆に整合が悪いケースを見ましょう。$|\Gamma| = 0.5$(RL = 6 dB)では反射電力が 25 % にもなり、負荷に届くのは 75 % です。ミスマッチ損失は $-10\log_{10}(0.75) \approx 1.25$ dB と、無視できない大きさになります。
これで 3 指標とミスマッチ損失がすべて出そろいました。次節では具体的な数値を入れて、設計でよく使う「VSWR = 2 はどんな状態か」を計算で確認します。
具体例:VSWR = 2 を分解する
データシートでしきい値としてよく登場する VSWR = 2 を例に、3 指標とミスマッチ損失を実際に計算してみましょう。
まず VSWR から反射係数を求めます。前に導いた逆変換 $|\Gamma| = (\text{VSWR}-1)/(\text{VSWR}+1)$ に $\text{VSWR} = 2$ を代入すると、
$$ |\Gamma| = \frac{2 – 1}{2 + 1} = \frac{1}{3} \approx 0.333 $$
次にリターンロスです。$\text{RL} = -20\log_{10}|\Gamma|$ に $|\Gamma| = 1/3$ を入れると、
$$ \text{RL} = -20\log_{10}(0.333) = -20 \times (-0.477) \approx 9.54 \ \text{dB} $$
続いて反射電力の割合 $|\Gamma|^2$ を計算します。
$$ |\Gamma|^2 = \left(\frac{1}{3}\right)^2 = \frac{1}{9} \approx 0.111 $$
すなわち、入射電力の約 11 % が反射して戻ってきます。最後にミスマッチ損失です。負荷には $1 – 0.111 = 0.889$、つまり約 89 % が届くので、
$$ \text{ML} = -10\log_{10}(0.889) \approx 0.51 \ \text{dB} $$
まとめると、VSWR = 2 は「反射係数 0.33」「リターンロス 約 9.5 dB」「反射電力 約 11 %」「ミスマッチ損失 約 0.5 dB」という状態に対応します。多くの実用機器で VSWR 2 が許容上限とされるのは、反射電力が 1 割程度に収まり、正味の損失が 0.5 dB 程度と実用上問題ない範囲に入るからです。
純抵抗負荷で考えるなら、VSWR = 2 は $Z_L = 100\ \Omega$($Z_0 = 50\ \Omega$ の場合の $2Z_0$)または $Z_L = 25\ \Omega$($Z_0/2$)に対応します。どちらも 50 Ω 系に対するインピーダンスのズレとしては比較的大きいものの、致命的ではない、という感覚を持っておくとよいでしょう。
この具体例で 3 指標の対応関係が腑に落ちたところで、いよいよ Python で定在波そのものを可視化し、負荷を変えたとき指標がどう動くかを数値で追いかけてみましょう。
Python による可視化
線路上の電圧包絡線をプロットする
まずは反射が作る定在波を「目で見て」理解するために、線路に沿った電圧振幅 $|V(z)|$ をプロットします。負荷インピーダンスを 3 通り変え、定在波パターンの違いを比較します。
import numpy as np
import matplotlib.pyplot as plt
# 線路パラメータ
Z0 = 50.0 # 特性インピーダンス [Ohm]
freq = 1e9 # 周波数 1 GHz
c = 3e8 # 光速 [m/s]
wavelength = c / freq
beta = 2 * np.pi / wavelength # 位相定数
# 負荷から電源側へ 2 波長ぶん見る (z<=0 が線路, z=0 が負荷)
z = np.linspace(-2 * wavelength, 0, 1000)
def voltage_envelope(ZL, Z0, beta, z, Vp=1.0):
"""負荷ZLに対する線路上の電圧振幅 |V(z)| を返す"""
Gamma = (ZL - Z0) / (ZL + Z0) # 反射係数(複素)
V = Vp * np.exp(-1j * beta * z) * (1 + Gamma * np.exp(2j * beta * z))
return np.abs(V), Gamma
# 3通りの負荷
loads = {"ZL = 50 (整合)": 50.0,
"ZL = 100": 100.0,
"ZL = 150": 150.0}
plt.figure(figsize=(10, 5))
for label, ZL in loads.items():
Vmag, Gamma = voltage_envelope(ZL, Z0, beta, z)
vswr = (1 + abs(Gamma)) / (1 - abs(Gamma))
plt.plot(z / wavelength, Vmag, label=f"{label}, VSWR={vswr:.2f}")
plt.xlabel("position z / wavelength (z=0: load)")
plt.ylabel("|V(z)| (normalized)")
plt.title("Voltage standing wave on a transmission line")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("vswr_envelope.png", dpi=150, bbox_inches="tight")
plt.show()
このグラフから、定在波の本質がはっきり読み取れます。整合した $Z_L = 50\ \Omega$ では電圧振幅が線路上のどこでも一定(平らな直線)で、定在波がまったく生じていません。一方、$Z_L = 100\ \Omega$ や $150\ \Omega$ では振幅が山と谷を繰り返す波打った曲線になり、$Z_L$ が $Z_0$ から離れるほど山と谷の差(=定在波の振幅)が大きくなります。山と谷が半波長ごとに繰り返している点も、$|1 + |\Gamma|e^{j(2\beta z + \theta)}|$ の周期が $2\beta z = 2\pi$ すなわち $z$ の半波長に対応するという理論と一致しています。
山と谷の比が VSWR に一致することを確認する
次に、上で描いた電圧包絡線の最大値と最小値を実際に読み取り、その比 $|V|_{\max}/|V|_{\min}$ が公式 $(1+|\Gamma|)/(1-|\Gamma|)$ と一致するかを数値で検証します。
import numpy as np
Z0 = 50.0
freq = 1e9
beta = 2 * np.pi / (3e8 / freq)
z = np.linspace(-2 * (3e8 / freq), 0, 5000)
for ZL in [75.0, 100.0, 150.0, 200.0]:
Gamma = (ZL - Z0) / (ZL + Z0)
V = np.exp(-1j * beta * z) * (1 + Gamma * np.exp(2j * beta * z))
Vmag = np.abs(V)
# 包絡線の最大/最小から測った VSWR
vswr_measured = Vmag.max() / Vmag.min()
# 公式から計算した VSWR
vswr_formula = (1 + abs(Gamma)) / (1 - abs(Gamma))
print(f"ZL={ZL:6.1f} |Gamma|={abs(Gamma):.3f} "
f"VSWR(measured)={vswr_measured:.4f} "
f"VSWR(formula)={vswr_formula:.4f}")
出力は次のようになります。
ZL= 75.0 |Gamma|=0.200 VSWR(measured)=1.5000 VSWR(formula)=1.5000
ZL= 100.0 |Gamma|=0.333 VSWR(measured)=2.0000 VSWR(formula)=2.0000
ZL= 150.0 |Gamma|=0.500 VSWR(measured)=3.0000 VSWR(formula)=3.0000
ZL= 200.0 |Gamma|=0.750 VSWR(measured)=4.0000 VSWR(formula)=4.0000
包絡線の山と谷から実測した VSWR と、公式から計算した VSWR が小数点以下まで完全に一致しています。これは、本記事で導いた「定在波の最大・最小の比が $(1+|\Gamma|)/(1-|\Gamma|)$ になる」という導出が正しいことの数値的な裏付けです。また $Z_L = 100\ \Omega$ で VSWR がちょうど 2、$|\Gamma|$ がちょうど 1/3 になっており、具体例の手計算とも合致しています。
3 指標の相互変換を一枚のグラフにする
反射係数 $|\Gamma|$ を横軸に、VSWR・リターンロス・反射電力割合・ミスマッチ損失がどう動くかをまとめて描き、3 指標が一つの量の言い換えであることを視覚化します。
import numpy as np
import matplotlib.pyplot as plt
# |Gamma| を 0 から 0.95 まで動かす(1で発散するため手前まで)
gamma = np.linspace(1e-3, 0.95, 500)
vswr = (1 + gamma) / (1 - gamma) # 電圧定在波比
rl = -20 * np.log10(gamma) # リターンロス [dB]
p_ref = gamma**2 * 100 # 反射電力割合 [%]
ml = -10 * np.log10(1 - gamma**2) # ミスマッチ損失 [dB]
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
axes[0, 0].plot(gamma, vswr, color="tab:blue")
axes[0, 0].set_ylim(1, 10)
axes[0, 0].set_xlabel("|Gamma|"); axes[0, 0].set_ylabel("VSWR")
axes[0, 0].set_title("Reflection coefficient -> VSWR")
axes[0, 1].plot(gamma, rl, color="tab:red")
axes[0, 1].set_xlabel("|Gamma|"); axes[0, 1].set_ylabel("Return Loss [dB]")
axes[0, 1].set_title("Reflection coefficient -> Return Loss")
axes[1, 0].plot(gamma, p_ref, color="tab:green")
axes[1, 0].set_xlabel("|Gamma|"); axes[1, 0].set_ylabel("Reflected power [%]")
axes[1, 0].set_title("Reflection coefficient -> Reflected power")
axes[1, 1].plot(gamma, ml, color="tab:purple")
axes[1, 1].set_xlabel("|Gamma|"); axes[1, 1].set_ylabel("Mismatch Loss [dB]")
axes[1, 1].set_title("Reflection coefficient -> Mismatch Loss")
for ax in axes.flat:
ax.grid(True, alpha=0.3)
ax.axvline(1/3, color="gray", linestyle="--", alpha=0.7) # VSWR=2 の線
plt.tight_layout()
plt.savefig("vswr_metrics.png", dpi=150, bbox_inches="tight")
plt.show()
4 枚のグラフから、各指標の振る舞いの違いが読み取れます。VSWR は $|\Gamma| \to 1$ で急激に発散する一方、リターンロスは $|\Gamma| \to 0$(左端)で発散して整合が良いほど大きくなる、互いに反対向きの量です。反射電力割合は $|\Gamma|^2$ の放物線で、$|\Gamma|$ が小さいうちは非常にゆっくりしか増えません。ミスマッチ損失も同様に立ち上がりが緩やかで、$|\Gamma| = 1/3$(破線、VSWR = 2)の位置では約 0.5 dB と小さい値にとどまっています。すべてのパネルに引いた破線($|\Gamma| = 1/3$)が、VSWR = 2 という一つの状態を 4 つの異なる目盛りで読んでいることを示しています。
指標の対応表を数値で出力する
最後に、実務で参照することの多い VSWR・反射係数・リターンロス・反射電力・ミスマッチ損失の対応表をプログラムで生成します。
import numpy as np
print(f"{'VSWR':>6} {'|Gamma|':>9} {'RL[dB]':>8} "
f"{'Pref[%]':>8} {'ML[dB]':>8}")
print("-" * 44)
for vswr in [1.0, 1.05, 1.1, 1.2, 1.5, 2.0, 3.0, 5.0, 10.0]:
gamma = (vswr - 1) / (vswr + 1)
rl = -20 * np.log10(gamma) if gamma > 0 else np.inf
p_ref = gamma**2 * 100
ml = -10 * np.log10(1 - gamma**2) if gamma < 1 else np.inf
print(f"{vswr:>6.2f} {gamma:>9.4f} {rl:>8.2f} "
f"{p_ref:>8.3f} {ml:>8.3f}")
出力は次の表になります。
VSWR |Gamma| RL[dB] Pref[%] ML[dB]
--------------------------------------------
1.00 0.0000 inf 0.000 0.000
1.05 0.0244 32.26 0.060 0.003
1.10 0.0476 26.44 0.227 0.010
1.20 0.0909 20.83 0.826 0.036
1.50 0.2000 13.98 4.000 0.177
2.00 0.3333 9.54 11.111 0.512
3.00 0.5000 6.02 25.000 1.249
5.00 0.6667 3.52 44.444 2.553
10.00 0.8182 1.74 66.942 4.815
この表から実務的な感覚がつかめます。VSWR = 2 の行を見ると、反射係数 0.333、リターンロス 9.54 dB、反射電力 11.1 %、ミスマッチ損失 0.512 dB と、本記事の具体例で手計算した値とすべて一致しています。また、VSWR 1.1 程度(高性能機器の目安)では反射電力がわずか 0.2 %、損失も 0.01 dB と、ほぼ完全整合とみなせることがわかります。逆に VSWR = 10 まで悪化すると反射電力が 67 % に達し、送り込んだ電力の 3 分の 2 が戻ってきてしまう深刻な不整合だと一目で判断できます。このように 1 つの量を 4 つの目盛りで読めるようになると、データシートの数字を即座に物理的な意味へ翻訳できるようになります。
まとめ
本記事では、伝送線路の不整合を表す 3 つの指標 — 反射係数・VSWR・リターンロス — の関係を、定在波のメカニズムから一貫して導出し、Python で可視化しました。
- 反射係数 $\Gamma = (Z_L – Z_0)/(Z_L + Z_0)$ は、負荷と線路のインピーダンスのズレを規格化した量で、整合のすべての出発点です
- 入射波と反射波の干渉が定在波を作り、その電圧の山 $|V^+|(1+|\Gamma|)$ と谷 $|V^+|(1-|\Gamma|)$ の比が VSWR $= (1+|\Gamma|)/(1-|\Gamma|)$ になります
- リターンロス $\text{RL} = -20\log_{10}|\Gamma|$ は反射量を dB で表し、ネットワークアナライザの $S_{11}$ とは符号だけが異なります
- ミスマッチ損失 $\text{ML} = -10\log_{10}(1-|\Gamma|^2)$ は、反射によって負荷に届かなかった正味の電力で、リターンロスとは別物です
- VSWR = 2 は反射係数 0.33・リターンロス 約 9.5 dB・反射電力 約 11 %・ミスマッチ損失 約 0.5 dB に対応し、実用上の許容ラインの目安になります
これら 3 指標が自在に行き来できるようになると、アンテナや整合回路の設計・評価が格段にスムーズになります。次のステップとして、反射係数を複素平面上で扱い整合を図式的に設計する手法や、実際に不整合を解消する整合回路の設計に進むと理解が立体的になります。
次のステップとして、以下の記事も参考にしてください。