リンクバジェットとは?EIRP・自由空間損失・G/Tから回線マージンまで図解で解説

「この送信電力で、1,000 km先の受信点に信号が届くだろうか」——無線システムを設計するとき、そのシステムが物理的に通信できるかどうかを設計の段階で定量的に判断する方法が必要です。実際に電波を飛ばしてみて「届かなかった」では、アンテナを作り直したり基地局を増やしたりする莫大なコストがかかります。

この問いに答えるのがリンクバジェット(link budget)です。直訳すれば「回線の家計簿」。電力が送信機から受信機に届くまでの道のりで、どこでどれだけ「増えて」「減るか」をすべてdBで足し引きして、最終的に受信電力が「必要な品質を保てるか」を検算するシート計算です。

リンクバジェットを理解すると、次のような幅広い応用で定量的な判断ができるようになります。

  • 無線通信システムの設計: セルラーネットワークの基地局配置、Wi-Fiアクセスポイントのカバレッジ計算、固定無線回線の回線設計など、地上無線通信のあらゆる場面でリンクバジェットが基本ツールになります。
  • 遠距離通信の可能性評価: ドローンや気球への中継回線、山岳地帯の見通し通信(マイクロ波回線)、電波望遠鏡からの科学データ受信など、長距離・高損失な環境で「本当に繋がるか」を事前に評価できます。

本記事では、フリスの伝達公式を出発点として、実務の電力収支計算に必要なすべての要素——EIRP・自由空間損失・G/T・C/N・回線マージン——を順に積み上げていきます。

本記事の内容

  • dB/dBm/dBWの復習(なぜ対数を使うのか)
  • 送信側の電力収支:送信電力 → 給電線損失 → アンテナ利得 → EIRP
  • 自由空間損失(FSPL)の導出と近似式
  • 受信側:アンテナ利得・システム雑音温度・G/T(性能指数)
  • C/Nと回線マージンの計算
  • Pythonによる計算実装と可視化(全検証済み)

前提知識

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


リンクバジェットの全体像

まず、リンクバジェットがどんな構造をしているか、一枚の絵で掴みましょう。

リンクバジェットの電力収支(Waterfall図)

この「Waterfall(滝)図」が、リンクバジェットの本質を凝縮しています。送信電力(緑)から出発し、アンテナ利得(水色)で押し上げられ、自由空間損失(赤)で大きく落ち込み、受信アンテナ利得(水色)で再び持ち上げられて受信電力(青)に至ります。途中の損失がいかに巨大か(この例では自由空間損失だけで130 dBを超えます)、そしてアンテナ利得がいかにその損失を補う鍵になるか——この一枚から読み取れます。

リンクバジェットで登場するすべての量をdB(デシベル)で統一することで、掛け算・割り算の連鎖が足し算・引き算に変わります。これが、複雑な無線リンクでも計算シートの足し引きだけで判断できる理由です。

次のセクションから、各要素を順に分解して理解していきましょう。


dB・dBm・dBW の復習 — 対数が「足し算」に変える魔法

リンクバジェットはdBの計算です。dBに慣れていない方は「なぜわざわざ対数を使うのか」と感じるかもしれません。しかしこれには明快な理由があります。

電力比をデシベルで表す

無線通信の世界では、電力が $10^{-12}$ W の微小なものから $10^3$ W の大電力まで、12桁以上の範囲に広がります。これを線形のまま扱うと計算が煩雑になるうえ、直感的に数値の大きさが把握できません。

デシベル(dB)は、電力比を常用対数で表したものです。

$$ X \; [\text{dB}] = 10 \log_{10} X $$

たとえば電力比が1000倍なら $10\log_{10}1000 = 30$ dB、0.001倍なら $10\log_{10}0.001 = -30$ dB です。12桁の範囲が $-120$ dB から $+120$ dB の240の数値に収まります。

絶対電力の単位:dBW と dBm

電力比「dB」は相対値ですが、絶対電力を表すときは基準値を決めます。よく使われる2つの単位を押さえましょう。

dBW(基準:1 W):

$$ P \; [\text{dBW}] = 10 \log_{10} \frac{P}{1 \; \text{W}} $$

例: 1 W = 0 dBW、100 W = +20 dBW、1 mW = −30 dBW

dBm(基準:1 mW):

$$ P \; [\text{dBm}] = 10 \log_{10} \frac{P}{1 \; \text{mW}} $$

例: 1 mW = 0 dBm、1 W = +30 dBm、1 μW = −30 dBm

dBmとdBWの関係は単純で、$P\,[\text{dBm}] = P\,[\text{dBW}] + 30$ です。

アンテナ利得の単位:dBi

アンテナ利得はdBiで表します。「i」は「isotropic(等方性アンテナ)」を基準にしたという意味です。

$$ G \; [\text{dBi}] = 10 \log_{10} \frac{G}{G_{\text{iso}}} = 10 \log_{10} G $$

等方性アンテナの利得を1(= 0 dBi)とし、実際のアンテナがそれより何倍の電力密度を特定方向に集中させるかを表します。

乗除算が足し算・引き算に変わる

対数の最大のメリットは、電力の「掛け算の連鎖」が「足し算の連鎖」に変わることです。

フリスの伝達公式

$$ P_r = P_t \cdot G_t \cdot G_r \cdot \left(\frac{\lambda}{4\pi R}\right)^2 $$

は、dBで表すと

$$ P_r \; [\text{dBW}] = P_t \; [\text{dBW}] + G_t \; [\text{dBi}] + G_r \; [\text{dBi}] – \text{FSPL} \; [\text{dB}] $$

となります。複雑な無線システムでも、各要素のdB値をただ「足したり引いたり」するだけで最終的な受信電力が求まる——これがリンクバジェットの計算原理です。

線形値 → dBW 変換と無線機器の典型電力レベル

左のグラフから、1pW($10^{-12}$ W)から1kW($10^3$ W)の15桁の範囲が−120 dBWから+30 dBWのわずか150の幅に収まることが一目でわかります。右のグラフは無線機器の典型的な電力レベルを示しており、Wi-Fiの受信感度(−70 dBm程度)から携帯基地局の送信電力(+43 dBm)まで、さまざまな機器の電力が同じ軸で比較できます。対数スケールの実用的な価値が体感できます。

dBの足し算でリンクバジェットが計算できることが掴めたところで、具体的な各要素を見ていきましょう。まず送信側から始めます。


送信側の電力収支 — EIRP の意味

送信機が出した電力が「等価的に何 Wの等方性アンテナを使ったのと同じか」を示す量がEIRP(Equivalent Isotropically Radiated Power:等価等方放射電力)です。

送信電力から EIRP まで

実際の送信システムでは、送信機の出力電力がそのままアンテナから放射されるわけではありません。同軸ケーブルや導波管などの給電線を通る間に一部が熱に変わります。この給電線損失 $L_{\text{feed}}$(dB、負の値)を引いた後、アンテナが特定方向に電波を集中させる利得 $G_t$(dBi)が加わります。

$$ \text{EIRP} \; [\text{dBW}] = P_t \; [\text{dBW}] – L_{\text{feed}} \; [\text{dB}] + G_t \; [\text{dBi}] $$

ここで $L_{\text{feed}}$ は損失の大きさ(正の数)で、式中では引き算しています。あるいは「負のdB値」として $L_{\text{feed}}$(負の数)を加算する書き方でも同じです。本記事では損失を「大きさ(正の数)を引く」形で統一します。

具体的な数値で感覚を掴みましょう。

要素 記号
送信機出力電力 $P_t$ +30 dBm (= 1 W)
給電線損失 $L_{\text{feed}}$ −2 dB
送信アンテナ利得 $G_t$ +15 dBi
EIRP +43 dBm

計算は 30 − 2 + 15 = 43 dBm です。線形に戻すと約20 W。1 Wの送信機でも、15 dBiの利得アンテナを使えば、等方性アンテナに20 Wを入れたのと同等の方向性電力が出せます。

EIRP の物理的な意味

EIRPは「もし等方性アンテナ(全方向に均等に放射するアンテナ)を使っていたとしたら、同じ最大放射方向の電力密度を実現するために必要な送信電力」です。

アンテナ利得のイメージは懐中電灯と同じです。懐中電灯は光を前方に集中させることで、同じ電球をむき出しにするより前方の明るさを何倍にも増やせます。全体のエネルギー量は変わらず、指向性だけが変わります。30 dBiの高利得パラボラアンテナなら、1 Wの送信機でも「等方性アンテナで1000 Wを送信するのと同等」の方向性電力を実現できます。

EIRPの構成:送信電力 + 利得 − 損失 の積み上げ

この積み上げ図から、EIRPがどのように「送信電力」「給電線損失」「アンテナ利得」の3要素の合計で決まるかが視覚的に確認できます。損失の赤棒が利得の水色棒より小さければ正味で増える——この直感を図から掴んでおきましょう。

送信側の電力収支が理解できたところで、次に電波が空間を伝わる間に受ける「損失」を定量化する自由空間損失を見ていきます。


自由空間損失(FSPL)の導出

電波は空間を伝わる間に、四方八方に広がることで電力密度が下がります。この「幾何学的な拡散による損失」が自由空間損失(Free Space Path Loss:FSPL)です。

フリスの伝達公式から FSPL を導く

フリスの伝達公式では、送受信アンテナがともに等方性(利得1)の場合の受信電力を

$$ P_r = P_t \cdot \left(\frac{\lambda}{4\pi R}\right)^2 $$

と書きます。ここで $\lambda$ は波長、$R$ は距離です。FSPLはこの式の「損失に相当する因子」の逆数として定義されます。

$$ \text{FSPL} = \left(\frac{4\pi R}{\lambda}\right)^2 $$

$\lambda = c/f$($c$ は光速、$f$ は周波数)を代入すると、

$$ \text{FSPL} = \left(\frac{4\pi R f}{c}\right)^2 $$

両辺に $10\log_{10}$ をとってdB表記にします。

$$ \text{FSPL} \; [\text{dB}] = 20\log_{10}\left(\frac{4\pi R f}{c}\right) $$

対数の性質 $\log(A \cdot B) = \log A + \log B$ を使って展開すると、

$$ \text{FSPL} \; [\text{dB}] = 20\log_{10}(4\pi) + 20\log_{10} R + 20\log_{10} f – 20\log_{10} c $$

ここで $20\log_{10}(4\pi) – 20\log_{10} c$ の部分を数値で計算します。$c = 3 \times 10^8$ m/s として

$$ 20\log_{10}(4\pi) – 20\log_{10}(3 \times 10^8) = 21.98 – 169.54 = -147.56 $$

距離を km 単位($R_{\text{km}} = R / 10^3$)、周波数を GHz 単位($f_{\text{GHz}} = f / 10^9$)に換算すると、それぞれ $+60$ dB、$+180$ dB のオフセットが加わります。これらを合算すると、

$$ \text{FSPL} \; [\text{dB}] = 20\log_{10}(R_{\text{km}}) + 20\log_{10}(f_{\text{GHz}}) + (-147.56 + 60 + 180) $$

$$ \boxed{\text{FSPL} \; [\text{dB}] = 20\log_{10}(R_{\text{km}}) + 20\log_{10}(f_{\text{GHz}}) + 92.45} $$

この近似式は実務で非常によく使われます。距離をkmで、周波数をGHzで入れるだけで即座にFSPLが求まります。

FSPL の数値感覚

いくつかの典型的な状況でFSPLを計算してみましょう。

Wi-Fi(2.4 GHz、距離100 m = 0.1 km):

$$ \text{FSPL} = 20\log_{10}(0.1) + 20\log_{10}(2.4) + 92.45 = -20 + 7.6 + 92.45 \approx 80 \; \text{dB} $$

5G ミリ波(28 GHz、距離100 m = 0.1 km):

$$ \text{FSPL} = -20 + 20\log_{10}(28) + 92.45 = -20 + 28.9 + 92.45 \approx 101 \; \text{dB} $$

固定無線回線(6 GHz、距離10 km):

$$ \text{FSPL} = 20 + 20\log_{10}(6) + 92.45 = 20 + 15.6 + 92.45 \approx 128 \; \text{dB} $$

FSPLはわずか数百メートルでも80 dBを超えます。これは送信電力の1億分の1($10^{-8}$)以下が届くという意味です。なぜ強力なアンテナ利得が必要になるかが、この数字から直感的に理解できます。

FSPL の 2つの依存性

FSPLの式には重要な性質が2つあります。

距離依存性: 距離が10倍になるとFSPLは20 dB増加します($20\log_{10}(10) = 20$)。これは電力密度が距離の2乗に反比例する逆2乗則の帰結です。

周波数依存性: 周波数が10倍になってもFSPLは20 dB増加します。これは少し直感に反する——なぜ真空中の伝搬が周波数に依存するのでしょうか。

実はFSPLの周波数依存性は、自由空間が高周波を「より多く吸収する」からではありません。同じ利得 $G_r$ の受信アンテナを使ったとき、高周波では有効面積 $A_e = G_r \lambda^2 / (4\pi)$ が小さくなるからです。高周波では波長が短いため、同じ利得でも「電磁波を捕まえる面積」が狭くなるという受信側の特性が原因です。

逆に、受信アンテナの物理的な面積を一定に保てば(大口径のパラボラアンテナを使い続ける場合など)、周波数が高くなるほど利得が増えてFSPLの増加を相殺できます。これが後で登場するパラボラアンテナ設計の重要な示唆になります。

自由空間損失 vs 距離(周波数別)

このグラフから、FSPLが距離に対してほぼ直線的(対数スケール)に増加する逆2乗則の様子が読み取れます。900 MHz(LTE)と28 GHz(5Gミリ波)を比較すると、同じ距離で約30 dBの差があります。GEO衛星の距離(36,000 km)では12 GHz帯で約205 dBもの自由空間損失があることも確認できます。

自由空間損失 vs 周波数(距離別)

周波数に対してもFSPLは20 dB/decade(10倍ごとに20 dB)で増加します。5G FR2(28 GHz)と5G Sub6(3.5 GHz)を比較すると、同じ距離で18 dB(= $20\log_{10}(28/3.5)$)の差があることがグラフから読み取れます。これが5Gミリ波が「高速だが近距離向き」となる物理的な根本原因です。

FSPL だけが伝搬経路の損失ではありません。実際の通信では追加の損失も考慮が必要です。

その他の伝搬損失

自由空間損失に加えて、実際のシステムでは以下の損失も考慮します。

大気・降雨損失 ($L_{\text{atm}}$): 水蒸気と酸素分子は特定の周波数(22 GHzや60 GHz付近)で電波を吸収します。また雨粒による散乱損失(降雨減衰)は、特に10 GHz以上の高い周波数で無視できなくなります。典型的な降雨減衰は3〜10 dB程度ですが、熱帯豪雨や激しい降雪では30 dBを超えることもあります。

偏波ミスマッチ損失 ($L_{\text{pol}}$): 送受信アンテナの偏波方向がずれると、受け取れる電力が減ります。完全に直交すると理論上ゼロになります。典型的には0.5〜3 dB程度の損失として扱います。

ポインティング損失 ($L_{\text{point}}$): 指向性アンテナが完全に相手を向いていないとき、利得が最大値から外れて生じる損失。高利得のアンテナほどビームが鋭く、わずかな角度ずれでも大きな損失になります。

フェージングマージン ($M_{\text{fade}}$): 地上通信では、建物や地面からの反射(マルチパス)により受信電力が時間的に変動します。変動の最悪値でも通信を維持するための余裕を、設計段階で「フェージングマージン」としてリンクバジェットに含めます。

これらを合わせた総損失 $L_{\text{total}}$ をリンクバジェットに加えると

$$ P_r = \text{EIRP} – \text{FSPL} – L_{\text{total}} + G_r \; \; [\text{dBW}] $$

となります。次に、この式の最後の項 $G_r$ — 受信側のアンテナ利得と雑音特性 — を詳しく見ていきます。


受信側:アンテナ利得・雑音温度・G/T

受信側の性能は単純に「アンテナ利得が高いほど良い」ではありません。いくら大きなアンテナで電力を集めても、そのアンテナ自身や低雑音増幅器(LNA)が大きな熱雑音を発生させていれば、信号対雑音比は改善しません。「利得(G)を雑音温度(T)で割った比」—— G/T(性能指数)が受信系の本質的な品質指標になります。

受信電力の計算

受信アンテナの利得を $G_r$(dBi)とすると、受信電力は

$$ P_r \; [\text{dBW}] = \text{EIRP} \; [\text{dBW}] – \text{FSPL} \; [\text{dB}] – L_{\text{total}} \; [\text{dB}] + G_r \; [\text{dBi}] $$

これが「受信した搬送波電力 $C$」です。リンクバジェットでは $C$(carrier)と書くことも多いです。

システム雑音温度 $T_{\text{sys}}$

受信系には避けられない熱雑音が存在します。抵抗は温度が $0$ K でない限り熱揺らぎにより雑音を発生させます(ジョンソン・ナイキスト雑音)。この雑音の電力を等価的な「雑音温度」で表すのがシステム雑音温度 $T_{\text{sys}}$(K:ケルビン)です。

$T_{\text{sys}}$ は受信系のすべての雑音源を入力参照した合計で、主に次の成分から成ります。

  • アンテナ雑音温度 $T_{\text{ant}}$: アンテナが捕捉する周囲の熱放射(空を向けば低い、地面を向けば高い)
  • LNA雑音温度 $T_{\text{LNA}}$: 低雑音増幅器固有の雑音(冷却すると下げられる)
  • 給電線 / 帯域フィルタの損失に起因する付加雑音

これらの合計が $T_{\text{sys}}$ です。室温(290 K)程度の機器では $T_{\text{sys}} \approx 300\sim1000$ K が典型ですが、冷却型の高感度受信機では $50\sim100$ K まで下げることができます。

雑音電力 $N = kT_{\text{sys}}B$

受信帯域幅 $B$(Hz)の範囲で積算される雑音電力は、ボルツマン定数 $k = 1.38 \times 10^{-23}$ J/K を使って

$$ N = k T_{\text{sys}} B \; [\text{W}] $$

dBで表すと

$$ N \; [\text{dBW}] = 10\log_{10}(k) + 10\log_{10}(T_{\text{sys}}) + 10\log_{10}(B) $$

$$ = -228.6 + 10\log_{10}(T_{\text{sys}}) + 10\log_{10}(B) \; [\text{dBW}] $$

ここで $-228.6 = 10\log_{10}(1.38 \times 10^{-23})$ はボルツマン定数のdB値です。

例として $T_{\text{sys}} = 290$ K、$B = 36$ MHz を入れると

$$ N = -228.6 + 24.6 + 75.6 = -128.4 \; \text{dBW} = -98.4 \; \text{dBm} $$

これが雑音電力の基準値です。帯域幅が広いほど(情報を高速に伝えるほど)、より多くの雑音も取り込むというトレードオフが、この式に如実に現れています。

G/T(受信機の性能指数)

受信性能を最もコンパクトに表す指標が G/T(「G over T」と読む)です。

$$ \frac{G}{T} \; [\text{dB/K}] = G_r \; [\text{dBi}] – 10\log_{10}(T_{\text{sys}}) $$

G/Tが高いほど、同じ信号電力に対して信号対雑音比が良くなります。これは「受信の効率」を表す単一の数字で、アンテナと受信機をまとめて評価するときに使います。

なぜ G/T が重要かを直感的に説明しましょう。受信電力 $C$ は $\text{EIRP} + G_r – \text{FSPL}$ ですが、雑音 $N$ は $T_{\text{sys}}$ に比例します。すると $C/N$ は

$$ C/N = (\text{EIRP} – \text{FSPL}) + G_r – 10\log_{10}(T_{\text{sys}}) – 10\log_{10}(kB) $$

$$ = (\text{EIRP} – \text{FSPL}) + (G/T) – 10\log_{10}(kB) $$

つまり $C/N$ は受信系では $G/T$ だけに依存するのです。アンテナ利得をいくら上げても雑音温度が同じ割合で上がれば $G/T$ は変わらず $C/N$ も変わらない。利得と雑音のトレードオフをこの1つの数字が代表しています。

G/T(性能指数)と C/N の関係

左のグラフから、アンテナ利得 $G_r$ が同じでも雑音温度 $T_{\text{sys}}$ が高いほど(G/Tが低いほど)C/Nが悪化することが読み取れます。右のグラフでは各システムの典型的なG/T値を示しており、冷却型大型地上局(+53 dB/K)からスマートフォン(−42 dB/K)まで100 dB近い差があることがわかります。G/Tの改善が受信性能向上の最重要設計変数であることが、この図から直感的に理解できます。

ここまでで送信電力から受信電力まで、そして雑音まで求める準備が揃いました。次に、受信した信号が「実際に使えるか」を判断するC/Nと回線マージンを見ていきます。


C/N(搬送波対雑音比)と回線マージン

受信した搬送波電力 $C$ と雑音電力 $N$ の比が C/N(Carrier-to-Noise Ratio:搬送波対雑音比)です。これがリンクバジェットの「結論」にあたる量です。

C/N の計算

$$ C/N \; [\text{dB}] = C \; [\text{dBW}] – N \; [\text{dBW}] $$

$N = kT_{\text{sys}}B$ ですから

$$ C/N = \text{EIRP} + G_r – \text{FSPL} – L_{\text{total}} – 10\log_{10}(kT_{\text{sys}}B) $$

あるいは $G/T$ を使って

$$ C/N = \text{EIRP} + (G/T) – \text{FSPL} – L_{\text{total}} – 10\log_{10}(kB) $$

ここで $10\log_{10}(kB) = 10\log_{10}(k) + 10\log_{10}(B) = -228.6 + 10\log_{10}(B\,[\text{Hz}])$ です。

Eb/N0 との関係

デジタル通信では $C/N$ と並んで $E_b/N_0$(ビットエネルギー対雑音電力密度比)が使われます。

$$ \frac{E_b}{N_0} \; [\text{dB}] = C/N \; [\text{dB}] + 10\log_{10}\left(\frac{B}{R_b}\right) $$

ここで $R_b$ はビットレート(bps)です。$B/R_b$ は「帯域幅あたりのビットレート」で、通信方式の効率(スペクトル効率)を表します。BPSK(スペクトル効率1 bps/Hz)なら $B/R_b = 1$ で $E_b/N_0 = C/N$、QPSK(2 bps/Hz)なら $B/R_b = 0.5$ で $E_b/N_0 = C/N – 3\,\text{dB}$ となります。

所要 C/N(C/N 要)

通信が成立するためには $C/N$ が一定の閾値(所要 C/N)を上回る必要があります。この閾値は使用する変調方式と符号化率によって決まります。

変調・符号化方式 所要 C/N の目安
BPSK, 符号化率1/2 約 1 dB
QPSK, 符号化率1/2 約 4 dB
QPSK, 符号化率3/4 約 7 dB
8PSK, 符号化率3/4 約 10 dB
16QAM, 符号化率3/4 約 14 dB
64QAM, 符号化率5/6 約 22 dB

要求する $E_b/N_0$(BER目標から決まる)から所要 $C/N$ を逆算するのが実際の設計です。

回線マージン

リンクバジェットの最終結論が回線マージン(link margin)です。

$$ \text{マージン} \; [\text{dB}] = C/N \; [\text{dB}] – (C/N)_{\text{要}} \; [\text{dB}] $$

マージンが正ならリンクは成立、負なら成立しません。ただし「マージン = 0 dB ギリギリ」は危険です。実際のシステムでは以下の変動・不確実性があるため、余裕を持たせます。

  • 気象変動(降雨・大気)による瞬時損失増加
  • アンテナの経年劣化・ポインティング誤差
  • 温度変化による機器特性の変動
  • 設計パラメータの測定誤差・製造ばらつき

一般的な設計マージンの目安は以下の通りです。

通信の種類 典型的なマージン
見通し地上回線(雨が少ない地域) 5〜10 dB
見通し地上回線(降雨多い地域) 15〜25 dB
固定衛星通信 3〜6 dB(晴天時)
移動体衛星通信 10〜15 dB

C/N vs 距離と回線マージン内訳

左のグラフから、C/Nが距離とともに単調に減少し、所要C/N(赤破線)を下回ると通信不成立(赤塗り領域)になることが読み取れます。マージン(緑塗り)が大きいほど余裕のある設計です。右の棒グラフはGEO衛星へのリンクの各要素の大きさを示しており、FSPLの圧倒的な損失(−205 dB程度)を、大きなEIRPと受信アンテナ利得で補い、最終的に約+24 dBのマージンを確保している様子が一目でわかります。

ここまでで、リンクバジェットを構成する全要素が揃いました。次に、これを一枚の表にまとめる方法と、Pythonで実際に計算する実装を見ていきましょう。


リンクバジェット表の作り方

リンクバジェットは「各要素を dBで列挙して積み上げる」ことで、誰が見ても同じ計算を追えるように整理します。

標準的なリンクバジェット表の構成

典型的なリンクバジェット表は次のような構成になります。

=== 送信側 ===
送信機出力電力 Pt             : +XX dBW
給電線損失 L_feed             : −X dB
送信アンテナ利得 Gt           : +XX dBi
EIRP = Pt − L_feed + Gt      : +XX dBW

=== 伝搬損失 ===
自由空間損失 FSPL             : −XXX dB
大気・降雨損失 L_atm          : −X dB
偏波ミスマッチ損失 L_pol      : −X dB
その他損失(フェージング等)  : −X dB

=== 受信側 ===
受信アンテナ利得 Gr           : +XX dBi
受信電力 C = EIRP − FSPL − Losses + Gr : −XX dBW

=== 雑音・品質 ===
システム雑音温度 Tsys         : XXX K
帯域幅 B                     : XX MHz
雑音電力 N = kTsysB          : −XXX dBW
搬送波対雑音比 C/N            : +XX dB

=== 判定 ===
所要 C/N                     : +XX dB
回線マージン = C/N − 所要 C/N: +XX dB(正ならOK)

各行はそれぞれ独立したパラメータで、見直しが容易なのが特徴です。送信電力を変えたければその行だけ書き換えれば、下の行は自動的に更新されます。

リンクバジェット計算表(衛星通信ダウンリンク例)

この表は衛星通信ダウンリンクの具体例です。FSPL(−205 dB程度)という巨大な損失を52 dBWのEIRPと35.3 dBiの受信アンテナ利得で補い、C/N +11.4 dBから所要C/N +10 dBを引いた回線マージン +1.4 dBが確保されています。マージンが正(緑で強調)であり、この設計でリンクが成立することが一目で確認できます。実際の放送衛星設計では降雨余裕を加えるために、さらにEIRPを増やすか受信アンテナを大型化します。

リンクバジェットの構成がわかったところで、次にPythonで実際にこれらを計算して可視化してみましょう。


Python 実装 — dBでの積み上げ計算と可視化

基本関数の実装

まず、リンクバジェット計算に必要な基本関数をPythonで定義します。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

# 日本語フォント設定
for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

# 物理定数
c   = 3.0e8     # 光速 [m/s]
k_B = 1.38e-23  # ボルツマン定数 [J/K]

def fspl_db(d_km: float, f_ghz: float) -> float:
    """自由空間損失 [dB](近似式)
    FSPL = 92.45 + 20log10(d_km) + 20log10(f_ghz)
    """
    return 92.45 + 20 * np.log10(d_km) + 20 * np.log10(f_ghz)

def noise_power_dbw(T_sys_K: float, B_hz: float) -> float:
    """雑音電力 N = kTB [dBW]"""
    return 10 * np.log10(k_B * T_sys_K * B_hz)

def cn_db(eirp_dbw: float, gr_dbi: float, fspl: float,
          L_total_db: float, T_sys_K: float, B_hz: float) -> float:
    """C/N [dB] を計算する"""
    C_dbw = eirp_dbw + gr_dbi - fspl - L_total_db
    N_dbw = noise_power_dbw(T_sys_K, B_hz)
    return C_dbw - N_dbw

# 動作確認(Ku帯 GEO衛星ダウンリンク)
d_km_geo = 36000.0  # GEO衛星距離 [km]
f_ghz    = 12.0     # Ku帯周波数 [GHz]
eirp     = 52.0     # dBW(100W送信機 + 34dBiパラボラ)
gr       = 35.3     # dBi(0.6m地上局パラボラ, η=0.6)
L_atm    = 2.0      # dB(晴天時大気損失)
T_sys    = 150.0    # K(地上局システム雑音温度)
B_hz     = 36e6     # Hz(36 MHz)
req_cn   = 10.0     # dB(所要 C/N)

fspl_val = fspl_db(d_km_geo, f_ghz)
cn_val   = cn_db(eirp, gr, fspl_val, L_atm, T_sys, B_hz)
margin   = cn_val - req_cn

print(f"FSPL         = {fspl_val:.2f} dB")
print(f"雑音電力     = {noise_power_dbw(T_sys, B_hz):.2f} dBW")
print(f"C/N          = {cn_val:.2f} dB")
print(f"回線マージン = {margin:.2f} dB → {'OK' if margin > 0 else 'NG'}")

このコードを実行すると次の出力が得られます。

FSPL         = 205.16 dB
雑音電力     = -131.28 dBW
C/N          = 11.42 dB
回線マージン = 1.42 dB → OK

FSPLは205.16 dB(距離36,000 km、周波数12 GHz)、雑音電力は−131.28 dBW(150 K、36 MHz)、C/Nは11.42 dBと計算されます。所要C/Nの10 dBに対してマージン1.42 dBが確保されており、リンクが成立することが確認できます。1.42 dBは晴天時のマージンで、降雨時には損失がさらに増えるため、設計では降雨余裕として追加のマージンを考慮します(大型パラボラや出力増大でEIRPを上げる等)。

受信電力の積み上げ図(詳細版)

次に、送信電力から受信電力までの各ステップを棒グラフで可視化するコードを実装します。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

# パラメータ(dBm単位で統一)
# EIRP=52dBW(=82dBm): 送信電力20dBW(=50dBm), L_feed=2dB, Gt=34dBi
# Gr=35.3dBi, L_atm=2dB, (偏波損失0.5dB含まず)
# 受信電力 = 50 - 2 + 34 - 205.16 - 2.0 + 35.3 = -89.86 dBm ≈ -89.9 dBm
steps = [
    ("送信電力\n$P_t$",            50,    "gain"),   # 20dBW = 50dBm (100W)
    ("給電線損失",                  -2,   "loss"),
    ("送信アンテナ利得 $G_t$",      34,   "gain"),
    ("自由空間損失\nFSPL",        -205.2, "loss"),
    ("大気損失",                    -2,   "loss"),
    ("受信アンテナ利得 $G_r$",      35.3, "gain"),
    # 受信電力 = 50 - 2 + 34 - 205.2 - 2 + 35.3 = -89.9 dBm
]

BG, GREEN, CYAN, RED, BLUE, FG = "#0d1117","#7ee787","#39c5cf","#ff6b6b","#58a6ff","#e6edf3"

fig, ax = plt.subplots(figsize=(12, 6))
fig.patch.set_facecolor(BG)
ax.set_facecolor(BG)
ax.tick_params(colors=FG)
for sp in ax.spines.values():
    sp.set_edgecolor("#30363d")

running = 0
for i, (lbl, delta, kind) in enumerate(steps):
    color = GREEN if (kind == "gain" and i == 0) else (CYAN if kind == "gain" else RED)
    if delta >= 0:
        ax.bar(i, delta, bottom=running, color=color, alpha=0.85, width=0.6,
               edgecolor=FG, lw=0.5)
    else:
        ax.bar(i, abs(delta), bottom=running + delta, color=color, alpha=0.85,
               width=0.6, edgecolor=FG, lw=0.5)
    sign = "+" if delta >= 0 else ""
    ax.text(i, running + delta / 2,
            f"{sign}{delta:.1f}", ha="center", va="center", color=FG, fontsize=9)
    running += delta

# 最終受信電力バー
ax.bar(len(steps), abs(running), bottom=min(0, running), color=BLUE, alpha=0.85,
       width=0.6, edgecolor=FG, lw=0.5)
ax.text(len(steps), running / 2, f"$P_r$\n= {running:.1f} dBm",
        ha="center", va="center", color=BLUE, fontsize=10, fontweight="bold")

xticks = [s[0] for s in steps] + ["受信電力\n$P_r$"]
ax.set_xticks(range(len(xticks)))
ax.set_xticklabels(xticks, fontsize=8, rotation=15, ha="right", color=FG)
ax.set_ylabel("電力 [dBm]", color=FG)
ax.set_title("リンクバジェット:各要素の積み上げ", color=FG)
ax.axhline(0, color=FG, lw=0.6, alpha=0.3)
ax.grid(axis="y", color="#30363d", alpha=0.4)
legend_els = [
    mpatches.Patch(color=GREEN, label="送信電力"),
    mpatches.Patch(color=CYAN,  label="利得"),
    mpatches.Patch(color=RED,   label="損失"),
    mpatches.Patch(color=BLUE,  label="受信電力"),
]
ax.legend(handles=legend_els, facecolor="#161b22", edgecolor="#30363d",
          labelcolor=FG, fontsize=9)
plt.tight_layout()
plt.show()

リンクバジェット:受信電力の積み上げ(衛星通信例)

積み上げ図から、自由空間損失の巨大さ(−205 dB)が一目でわかります。送信アンテナ利得(+34 dBi)と受信アンテナ利得(+35.3 dBi)を合わせた+69.3 dBでも、FSPLの半分しか補えません。それでも最終的に約−89.9 dBmという受信電力が確保できるのは、送信電力50 dBm(100 W)と高利得アンテナが組み合わさってEIRP = 82 dBm(≈ 52 dBW)という大きな等価放射電力を実現しているからです。

FSPL vs 距離・周波数の計算

距離と周波数に対してFSPLがどう変わるかを確認します。

import numpy as np

# FSPL近似式の検証
c = 3e8  # 光速

def fspl_exact(d_m, f_hz):
    """正確な FSPL 計算(FSPLの定義式から)"""
    lam = c / f_hz
    return 20 * np.log10(4 * np.pi * d_m / lam)

def fspl_approx(d_km, f_ghz):
    """近似式 FSPL = 92.45 + 20log(d_km) + 20log(f_ghz)"""
    return 92.45 + 20 * np.log10(d_km) + 20 * np.log10(f_ghz)

# 代表的なケースで厳密値と近似値を比較
cases = [
    ("Wi-Fi室内",   0.01, 2.4),
    ("Wi-Fi屋外",   0.1,  2.4),
    ("LTE 1km",     1.0,  0.9),
    ("固定無線10km", 10,   6.0),
    ("衛星36000km", 36000, 12.0),
]

print(f"{'ケース':20s} {'d_km':>8} {'f_GHz':>7} {'厳密値':>10} {'近似値':>10} {'誤差':>8}")
print("-" * 70)
for name, d_km, f_ghz in cases:
    exact  = fspl_exact(d_km * 1e3, f_ghz * 1e9)
    approx = fspl_approx(d_km, f_ghz)
    print(f"{name:20s} {d_km:>8.3g} {f_ghz:>7.1f} {exact:>10.2f} {approx:>10.2f} {approx-exact:>8.4f}")

このコードを実行すると次の出力が得られます。

ケース                      d_km   f_GHz        厳密値        近似値       誤差
----------------------------------------------------------------------
Wi-Fi室内                  0.01     2.4       60.05       60.05    0.0082
Wi-Fi屋外                   0.1     2.4       80.05       80.05    0.0082
LTE 1km                     1.0     0.9       91.53       91.53    0.0082
固定無線10km                10.0     6.0      128.00      128.01    0.0082
衛星36000km               36000    12.0      205.15      205.16    0.0082

厳密式と近似式(92.45 + 20log(d_km) + 20log(f_GHz))の差は全ケースで約0.008 dB(定数項92.45の丸め誤差)と無視できる範囲です。Wi-Fi室内10mでFSPL ≈ 60 dB、GEO衛星で205 dBに達することが数値で確認できました。この0.008 dBの系統誤差は実用上完全に無視できるレベルです。

周波数トレードオフの可視化

「高い周波数を使うとFSPLが増えるが、物理口径一定のアンテナなら利得も増える」というトレードオフを可視化します。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

c = 3e8; k_B = 1.38e-23
d_km = 1000.0   # 固定距離 1000 km
T_sys = 290.0   # K(室温)
B_hz  = 1e6     # 1 MHz
Pt_dbw = 10.0   # dBW

f_ghz = np.linspace(0.5, 40, 400)
f_hz  = f_ghz * 1e9
lam   = c / f_hz

# シナリオA: 利得一定 (30 dBi)
Gt = Gr = 30.0
fspl_A = 92.45 + 20*np.log10(d_km) + 20*np.log10(f_ghz)
C_A  = Pt_dbw + Gt + Gr - fspl_A
N    = 10 * np.log10(k_B * T_sys * B_hz)
cn_A = C_A - N

# シナリオB: 物理口径一定 (D=0.5m, η=0.6)
D, eta = 0.5, 0.6
Gr_phys = eta * (np.pi * D / lam) ** 2
Gr_phys_dBi = 10 * np.log10(np.maximum(Gr_phys, 1e-10))
C_B  = Pt_dbw + Gr_phys_dBi + Gr_phys_dBi - fspl_A
cn_B = C_B - N

BG, CYAN, AMBER, RED, FG = "#0d1117","#39c5cf","#f0a500","#ff6b6b","#e6edf3"
fig, ax = plt.subplots(figsize=(9, 5))
fig.patch.set_facecolor(BG); ax.set_facecolor(BG)
ax.tick_params(colors=FG)
for sp in ax.spines.values():
    sp.set_edgecolor("#30363d")

ax.plot(f_ghz, cn_A, color=CYAN,  lw=2, label="利得一定 (30 dBi / アンテナ側)")
ax.plot(f_ghz, cn_B, color=AMBER, lw=2, label=f"口径一定 (D={D}m, η={eta})")
ax.axhline(10, color=RED, ls="--", lw=1.5, label="所要 C/N=10 dB")
ax.set_xlabel("周波数 [GHz]", color=FG)
ax.set_ylabel("C/N [dB]", color=FG)
ax.set_title(f"周波数 vs C/N のトレードオフ (d={d_km:.0f}km, Pt={Pt_dbw}dBW)", color=FG)
ax.legend(facecolor="#161b22", edgecolor="#30363d", labelcolor=FG)
ax.grid(color="#30363d", alpha=0.5)
ax.set_ylim(-20, 60)
ax.xaxis.label.set_color(FG); ax.yaxis.label.set_color(FG)
ax.title.set_color(FG)
plt.tight_layout()
plt.show()

周波数 vs C/N のトレードオフ(利得一定 vs 口径一定)

このグラフから、設計方針によってC/Nの周波数依存性が正反対になることが読み取れます。利得一定(同じアンテナを使い続ける)ならFSPLの増加に負けてC/Nは周波数とともに低下します。一方、物理口径一定(同じ大きさのパラボラを使い続ける)なら高周波ほど利得が増え、FSPLの増加を完全に相殺するどころか補って余りある——C/Nは周波数とともに改善します。

「高周波は損失が多い」と言われる理由も「口径一定なら高周波有利」という事実も、どちらも正しい。どのアンテナを前提にするかで答えが変わる——これがFSPLの周波数依存性に関する最も重要な理解です。

雑音電力の確認

ボルツマン定数 $k$ を使った雑音計算を検証します。

import numpy as np

k_B = 1.38e-23  # J/K

def noise_dbw(T_K, B_hz):
    """雑音電力 N = kTB を dBW で返す"""
    return 10 * np.log10(k_B * T_K * B_hz)

def noise_dbm(T_K, B_hz):
    return noise_dbw(T_K, B_hz) + 30  # dBW → dBm

# 各帯域幅・温度での雑音電力
print("雑音電力 N = kTB の計算例")
print(f"{'Tsys [K]':>10} {'B [MHz]':>10} {'N [dBW]':>10} {'N [dBm]':>10}")
print("-" * 45)
for T in [100, 150, 290, 1000]:
    for B_mhz in [1, 10, 36]:
        N_dbw = noise_dbw(T, B_mhz * 1e6)
        N_dbm = noise_dbm(T, B_mhz * 1e6)
        print(f"{T:>10d} {B_mhz:>10d} {N_dbw:>10.2f} {N_dbm:>10.2f}")

実行結果:

雑音電力 N = kTB の計算例
  Tsys [K]    B [MHz]    N [dBW]    N [dBm]
---------------------------------------------
       100          1    -148.60    -118.60
       100         10    -138.60    -108.60
       100         36    -133.04    -103.04
       150          1    -146.84    -116.84
       150         10    -136.84    -106.84
       150         36    -131.28    -101.28
       290          1    -143.98    -113.98
       290         10    -133.98    -103.98
       290         36    -128.41     -98.41
      1000          1    -138.60    -108.60
      1000         10    -128.60     -98.60
      1000         36    -123.04     -93.04

帯域幅が10倍になると雑音電力が10 dB増加すること(例: T=290K, B=1MHz → 10MHzで−143.98 → −133.98 dB)、雑音温度が10倍になっても同様に10 dB増加すること(例: T=100K → 1000Kで−148.60 → −138.60 dB、B=1MHz時)が確認できます。$N = kTB$ の $T$ と $B$ が対称的に扱われることがわかります。T=150K, B=36MHzの場合は−131.28 dBWで、これが本記事の衛星通信設計例の雑音電力と一致します。

雑音電力 N = kTB の帯域幅・温度依存性

左のグラフから、帯域幅 $B$ が広がるにつれて雑音電力が線形(対数スケールで直線)に増加することが確認できます。10 dB/decade の傾きです。雑音温度が低いほど(青の曲線、100K)全体的に雑音電力が低く抑えられており、低雑音化が高感度受信の基本戦略であることが数値で示されています。右のグラフは雑音温度と雑音電力密度の関係で、冷却型受信機(100K)と室温(290K)の差が約4.6 dB(10log(290/100))であることも確認できます。

G/T と C/N の関係計算

import numpy as np

k_B = 1.38e-23

def link_budget(eirp_dbw, gr_dbi, T_sys_K, d_km, f_ghz, L_total_db, B_hz, req_cn_db):
    """リンクバジェットを計算してマージンを返す"""
    fspl = 92.45 + 20 * np.log10(d_km) + 20 * np.log10(f_ghz)
    C    = eirp_dbw + gr_dbi - fspl - L_total_db          # 受信電力 [dBW]
    N    = 10 * np.log10(k_B * T_sys_K * B_hz)            # 雑音電力 [dBW]
    cn   = C - N                                           # C/N [dB]
    gt   = gr_dbi - 10 * np.log10(T_sys_K)                # G/T [dB/K]
    return {"fspl": fspl, "C": C, "N": N, "cn": cn,
            "gt": gt, "margin": cn - req_cn_db}

# 例: 固定無線通信 (6GHz, 10km)
r1 = link_budget(eirp_dbw=30, gr_dbi=30, T_sys_K=300,
                 d_km=10, f_ghz=6, L_total_db=2,
                 B_hz=10e6, req_cn_db=15)
print("=== 固定無線通信(6GHz, 10km)===")
for k, v in r1.items():
    print(f"  {k:10s} = {v:.2f}")

# 例: GEO衛星ダウンリンク (12GHz, 36000km)
r2 = link_budget(eirp_dbw=52, gr_dbi=35.3, T_sys_K=150,
                 d_km=36000, f_ghz=12, L_total_db=2,
                 B_hz=36e6, req_cn_db=10)
print("\n=== 衛星通信(12GHz, 36000km)===")
for k, v in r2.items():
    print(f"  {k:10s} = {v:.2f}")

実行結果:

=== 固定無線通信(6GHz, 10km)===
  fspl       = 128.01
  C          = -70.01
  N          = -133.83
  cn         = 63.82
  gt         = 5.23
  margin     = 48.82

=== 衛星通信(12GHz, 36000km)===
  fspl       = 205.16
  C          = -119.86
  N          = -131.28
  cn         = 11.42
  gt         = 13.54
  margin     = 1.42

固定無線通信(6GHz, 10km)のC/Nは63.82 dBと非常に大きなマージンを持ちます。一方GEO衛星(12GHz, 36,000km)はFSPLが205 dBもあるにもかかわらず、C/N = 11.42 dBが得られています。これはEIRP(52 dBW)と受信アンテナ利得(35.3 dBi)の合計87.3 dBWがFSPL + 損失の207.16 dBのうち大部分を補っているからです。回線マージンの1.42 dBは晴天時の値であり、降雨時の追加損失に対応するためには送信電力の増大や口径の拡大が必要です。G/TはGEO衛星リンクで13.54 dB/Kとなっており、これが高感度受信機(低T_sys)と大口径アンテナ(高G_r)の組み合わせによる成果です。


まとめ

本記事では、リンクバジェットの全要素を基礎から積み上げ式に解説しました。

  • dBによる表記: 電力の乗除算が足し算・引き算に変わる。FSPL[dB] = 92.45 + 20log(d[km]) + 20log(f[GHz]) が実務の基本式
  • EIRP: 送信電力 + 送信アンテナ利得 − 給電線損失。「等方性アンテナに換算した実効送信電力」
  • FSPL: 電波の幾何学的拡散による損失。距離と周波数の両方に20 dB/decade で比例。物理口径一定なら高周波ほど利得が増えFSPLを相殺できる
  • G/T(性能指数): 受信アンテナ利得 / システム雑音温度。C/Nを決める受信系の本質的な指標。単純に利得を上げるだけでなく、雑音温度の低減が鍵
  • C/N と回線マージン: 設計の最終判定。所要C/Nを十分に上回る正のマージンを確保することが目標。フェージング・降雨・経年変化のため5〜25 dB程度の余裕が必要

リンクバジェットはあらゆる無線通信設計の共通言語です。セルラーネットワーク・固定無線・ドローン通信など、どんな用途でも「電力の家計簿」を作る考え方は同じです。ここで学んだ各要素の組み合わせで、実際の通信システムの可能性を自分で定量的に評価できるようになります。

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