ITU-Rpy によるサテライトリンクバジェットのスクリプト作成 (Python サンプル)
STKを使用しないリンクバジェット自動化:P.618/P.676/P.840のITU-Rpyリファレンス実装を使用したピュアPythonでのスイープ頻度、降雨量、標高の解析を行います。rftools サテライト・リンク・バジェット・アナライザーのコンパニオン。
目次
リンクバジェットをスクリプト化する理由
rftools 衛星リンク予算アナライザーは、インタラクティブなシナリオ設計用に構築されています。トレードスタディ、頻度計画の最適化、ミッションデザインリポジトリへの CI/CD の統合など、パラメーターを何百ものポイントにまたがる必要がある場合は、ブラウザーではなく Python が必要です。 ITU-Rpyは、地球空間伝搬に関する ITU-R 勧告のオープンソースのリファレンス実装です。アナライザの伝播コードはその移植版であり、12か所のテストサイトで両方が同じ推奨バージョンに設定されれば、0.001%以内に一致します(この記事の最後を参照)。この記事では、Jupyter ノートブックに直接取り入れることができる 3 つのスクリプト化されたユースケースを紹介します。インストール
pip install itur numpy matplotlib
ITU-Rpyは、ITUリポジトリから独自のデータテーブル(雨量マップ、屈折率気候学)を取得します。最初のインポートには 5 秒ほどかかる場合があります。
ユースケース 1: Ka バンドダウンリンクの周波数スイープ
GEO ブロードキャストのダウンリンクを設計していて、99.99% の可用性で雨の減衰が 20 GHz から 40 GHz までどのように変化するかを知りたいとします。
import itur
import itur.models as m
import numpy as np
import matplotlib.pyplot as plt
# Ground station: Atlanta, GA
lat, lon = 33.75, -84.39
elevation_deg = 45.0
availability_pct = 0.01 # 0.01% outage → 99.99% availability
freqs = np.linspace(20, 40, 21) # GHz
attenuations = []
for f in freqs:
a = itur.atmospheric_attenuation_slant_path(
lat=lat, lon=lon,
f=f * itur.u.GHz,
el=elevation_deg,
p=availability_pct,
D=1.2 * itur.u.m, # antenna diameter (used for the scintillation term)
hs=0.3 * itur.u.km,
)
attenuations.append(float(a.value))
plt.plot(freqs, attenuations)
plt.xlabel('Frequency (GHz)')
plt.ylabel('Total atmospheric attenuation (dB)')
plt.title(f'Ka-band slant path, {availability_pct}% outage, Atlanta 45° elevation')
plt.grid(True)
plt.show()
アトランタは濡れています。P.837-7マップでは = 51.9 mm/hとなっています。99.99% の可用性では、スクリプトは20GHzで合計減衰量が25.0dB、雨の場合は22.9dB、30GHzでは47.8dB、40GHzでは70.6dBになります。40 GHzではそれをカバーする実用的なフェードマージンはありません。そのため、KaバンドおよびQ/Vバンドシステムは、静的マージンではなくアップリンク電力制御、アダプティブコーディング、サイトダイバーシティに依存し、Q/Vバンドの可用性は99.99%をはるかに下回っています。
ユースケース 2: レインフェードトレード調査におけるアベイラビリティ・スイープ
VSATターミナルの場合は、99.9%(年間526分の停電)、99.99%(53分)、99.999%(5分)のどれかを決める必要があります。各階層にはどれくらいの追加フェードマージンがかかりますか?
availabilities = [1.0, 0.1, 0.01, 0.001] # 99% through 99.999%
freq = 14.5 # Ku-band uplink
lat, lon = 42.0, -3.0 # northern Spain (P.837-7 R0.01 = 26.7 mm/h)
print(f'{"Availability":14s} {"Outage/yr":12s} {"Total Atten":12s}')
print('-' * 40)
for p in availabilities:
a = itur.atmospheric_attenuation_slant_path(
lat=lat, lon=lon,
f=freq * itur.u.GHz,
el=30.0,
p=p,
D=1.0 * itur.u.m, # required: antenna diameter for the scintillation term
)
outage_min = p / 100 * 365.25 * 24 * 60
pct = 100 - p
print(f'{pct:9.3f} % {outage_min:9.1f} min {float(a.value):8.2f} dB')
標準出力:
Availability Outage/yr Total Atten
----------------------------------------
99.000 % 5259.6 min 0.89 dB
99.900 % 526.0 min 2.22 dB
99.990 % 52.6 min 5.96 dB
99.999 % 5.3 min 12.75 dB
99.99% から 99.999% に移行すると、14.5 GHz でさらに 6.8 dB のコストがかかります。これは、99% から 99.99% までの全ステップを上回ります。ほとんどの VSATサービスでは、最後の9つはハードウェアを購入する価値がなく、この表を見ると利害関係者との会話が簡単になります。(ITU-Rpy のデフォルトでは、これらの合計にはシンチレーション項が少し含まれています。以下を参照してください)。
ユースケース 3: 標高マスク — 標高が低いとリンクはどこで閉じますか?
接地端子が固定されたLEOコンステレーションの場合、標高の低い峠では大気の減衰量がはるかに大きくなります。総減衰量と標高の関係:
elevations = np.arange(5, 85, 5)
attens = []
for el in elevations:
a = itur.atmospheric_attenuation_slant_path(
lat=51.5, lon=-0.1, # London
f=20.0 * itur.u.GHz,
el=el,
p=0.1,
D=1.0 * itur.u.m,
)
attens.append(float(a.value))
plt.plot(elevations, attens)
plt.xlabel('Elevation angle (deg)')
plt.ylabel('Total attenuation (dB) at 20 GHz, 99.9%')
plt.title('Atmospheric + rain attenuation vs elevation — London')
plt.grid(True)
plt.show()
ロンドンは99.9%で、45°で4.9デシベル、20°で8.3デシベル、10°で14.2デシベル、5°で25.0デシベルで、45°の数字の5倍です。これが、LEO Kaバンド端末が15~20°の最小仰角マスクを使用し、低標高の接点の優先順位を下げている理由です。
出力を rftools アナライザーにフィードバックする
減衰数を Satellite Link Budget Analyzerにコピーする必要はありません。サイトの緯度と経度を指定すると、同じ ITU-R マップが読み取られ、同じ方法が実行され、アベイラビリティカーブとモンテカルロが加算されます。その数値をITU-Rpyで正確に再現するには、推奨バージョンを一致させ、アナライザがモデル化しないシンチレーションを除外してください。
from itur.models import itu618, itu676, itu836, itu837, itu838, itu839, itu840, itu1510, itu1511
itu618.change_version(13); itu676.change_version(12); itu836.change_version(6)
itu837.change_version(7); itu838.change_version(3); itu839.change_version(4)
itu840.change_version(8); itu1510.change_version(1); itu1511.change_version(1)
ag, ac, ar, _, _ = itur.atmospheric_attenuation_slant_path(
lat, lon, f * itur.u.GHz, el, p, 1.0 * itur.u.m,
tau=0, # horizontal; 90 vertical, 45 circular
return_contributions=True, include_scintillation=False,
)
ITU-Rpy 0.4.0のデフォルトはP.840-7と円偏波(tau=45)です。アナライザはP.840-8と選択した偏光を使用します。
すでに他の場所で減衰の数値を取得していて、それを使ってバジェットをテストしたい場合、RF Link Budget calculatorは雨のフェードと大気損失を単純な入力として受け取り、当社の POST /api/py/v1/calculateエンドポイントはそれをすべての入力で受け入れます。これは、コミットのたびにリンクバジェットコンプライアンスをチェックするCIパイプラインにとって便利です。
よくある落とし穴
- 単位は重要です。
* itur.u.GHzを含まないf=20.0は黙って Hz を仮定します。ITU-Rpy は次元的に検証します。 - アベイラビリティはアップタイム%ではなく、システム停止%です。
p=0.01は 99.99% の可用性 (減衰量がその値を超える時間の 0.01%) を意味します。 - 雨量は緯度/経度の P.837 マップに基づいています。 P.837-7 には雨域はありません。湿潤熱帯地域をテストするには、例えば
lat=1.35, lon=103.8(シンガポール、 ≈100 mm/h) に合格するか、R001=でマップを上書きしてください。 - アンテナの直径
Dはシンチレーション項に供給されます。シンチレーション項は、乱流層の広い範囲にわたって口径が平均化されるにつれて小さくなります。雲の減衰には影響しません。 - シンチレーションはデフォルトで含まれています。
include_scintillation=Falseに合格しない限り、atmospheric_attenuation_slant_pathが追加します。return_contributions=Trueを使うと、ガス、雲、雨、シンチレーションを別々に見ることができます。
STK クラウドの通信モジュールの交換
STK クラウドの通信/レーダー・スイートは、これらの ITU-R 計算を UI にまとめました。スクリプトの場合、ITU-Rpy がリファレンス実装として呼ばれていたでしょう。マイグレーション:
| STK クラウドコミュニケーション | ITU-Rpy equivalent |
|---|---|
| 雨量減衰 (傾斜経路) | itur.models.itu618.rain_attenuation() |
| 特定の雨量減衰 | itur.models.itu838.rain_specific_attenuation() |
| ガス吸収 | itur.models.itu676.gaseous_attenuation_slant_path() |
| 雲の減衰 | itur.models.itu840.cloud_attenuation() |
| シンチレーション | itur.models.itu618.scintillation_attenuation() |
| トータル・アッテネーション | itur.atmospheric_attenuation_slant_path() |
さらに読む
更新 2026-09-19: 上記の減衰数値は ITU-Rpy 0.4.0 で再計算されました。以前の値では、アトランタのKaバンドの雨が桁違いに控えめで、アンテナの直径、シンチレーション、アナライザーへの給電数に関する記述が間違っていました。よくある質問
関連記事
Building a Ground-Station Pass Schedule with Skyfield
Ansys STK sunset-ready: compute SGP4 pass predictions for your amateur-radio or cubesat ground station using Skyfield.
2026年4月30日
Satellite CommunicationsSizing a 9600-baud UHF Downlink for a 3U CubeSat: Full Walkthrough
End-to-end link budget for an amateur-band 3U cubesat: EIRP, slant range, ground-station G/T, propagation losses and Monte Carlo margin.
2026年4月29日
Satellite CommunicationsMigrating from STK Cloud: Free Alternatives for Link Budget and Orbit Analysis
Ansys is sunsetting STK Cloud in March 2026. Here are free open-source replacements for what it did best: ITU-R link budgets and orbital pass prediction.
2026年4月29日