ITU-RPY によるサテライトリンクバジェットのスクリプト作成 (Python サンプル)
STKを使用しないリンクバジェット自動化:P.618/P.676/P.840のITU-RPyリファレンス実装を使用したピュアPythonでのスイープ頻度、降雨量、標高の解析を行います。rftools サテライト・リンク・バジェット・アナライザーのコンパニオン。
目次
リンクバジェットをスクリプト化する理由
rftools サテライトリンクバジェットアナライザー は、インタラクティブなシナリオ設計用に構築されています。トレードスタディ、頻度計画の最適化、ミッションデザインリポジトリへの CI/CD の統合など、パラメーターを何百ものポイントにまたがる必要がある場合は、ブラウザーではなく Python が必要です。 ITU-RPY は、地球空間伝搬に関する ITU-R 勧告のオープンソースのリファレンス実装です。私たちのバックエンドはそれに沿っています。この記事では、Jupyter ノートブックに直接組み込むことができる 3 つのスクリプト化されたユースケースを紹介します。インストールpip install itur numpy matplotlib
ITU-RPY は ITU リポジトリから独自のデータテーブル (雨量マップ、屈折率気候学) を取得します。最初のインポートには 5 秒ほどかかる場合があります。
pip install itur numpy matplotlibユースケース 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 (affects cloud attenuation)
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()アトランタの気候帯(ITU-R 雨帯 K)の Ka 帯では、20 GHz で全大気の減衰量が約 2~3 dB、99.99% になります。40 GHz では 15 ~ 20 dB まで上昇します。これが、Ka バンド放送局が通常、定格値を超えて 5 ~ 6 dB のアップリンク電力制御マージンを割り当てている理由です。
ユースケース 2: レインフェードトレード調査のためのアベイラビリティスイープ
海事VSATについては、99.9% (年間80分のサービス停止)、99.99% (年間52分のサービス停止)、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 # Bay of Biscay, typical rain zone M
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,
)
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 1.48 dB
99.900 % 525.9 min 3.21 dB
99.990 % 52.6 min 6.58 dB
99.999 % 5.3 min 11.42 dB99.99% から 99.999% にすると、Kuバンドで約 5 dB のコストがかかります。ほとんどの海事用途では、これはハードウェア予算に見合う価値がありません。トレードスタディテーブルがあると、利害関係者との会話が容易になります。
ユースケース 3: 標高マスク — 標高が低いとリンクはどこで閉まりますか?
地上の終点が固定されているしし座コンステレーションの場合、標高の低い峠では大気の減衰量がはるかに大きくなります。総減衰量と標高の関係:
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,
)
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()5°の高さでは、45°よりも8~10 dB高くなります。これが、LEOのKaバンド端末が15〜20°の最小エレベーションマスクを使用し、低標高の接点を優先しない理由です。
出力を rftools アナライザにフィードバックする
スクリプト化された減衰数を取得したら、それを 衛星リンクバジェットアナライザー にrainFadeまたはatmosphericLossとして接続し、モンテカルロを実行してシナリオ URL をコピーして共有します。バックエンドでは同じ ITU-R モデルを使用しているため、結果は浮動小数点精度内で一致します。
自動回帰テストでは、POST /api/py/v1/calculate エンドポイントがすべての入力を含むrf-link-budget計算機を受け入れます。これは、コミットのたびにリンクバジェットへの準拠を検証する CI パイプラインに最適です。
よくある落とし穴
1.単位は重要です。* itur.u.GHzを含まないf=20.0は黙って Hz を仮定します。ITU-RPy は次元的に検証します。 2.アベイラビリティはアップタイム%ではなく停止%です。p=0.01は 99.99% の可用性 (減衰量がその値を超える時間の 0.01%) を意味します。 3.レインゾーンは緯度/経度から導き出されます。 ゾーンP (最悪の場合は熱帯) のテストを行う場合は、そのゾーンで緯度/経度を合格する必要があります (例:lat=1.3, lon=103.8(シンガポール))。 4.雲の減衰にはアンテナの直径が必要です。 アンテナが大きいほどビームがきつく、雲の減衰量 (dB) が小さくなります。 5.シンチレーションは別の関数です。itur.models.itu618.scintillation_attenuation()を使用してください。デフォルトのatmospheric_attenuation_slant_path呼び出しには含まれていません。
STK クラウドのコミュニケーションモジュールの交換
STK クラウドの通信/レーダー・スイートは、これらの ITU-R 計算を UI にまとめました。スクリプトの場合、ITU-RPY がリファレンス実装として呼ばれていたでしょう。マイグレーション:
| STK クラウドコミュニケーション | ITU-RPY と同等のサービス |
|---|---|
| 雨量減衰モデル | itur.models.itu838.specific_attenuation() |
| ガス吸収 | itur.models.itu676.gaseous_attenuation_slant_path() |
| クラウド減衰 | itur.models.itu840.columnar_content_reduced_liquid() |
| シンチレーション | itur.models.itu618.scintillation_attenuation() |
| トータルアッテネーション | itur.atmospheric_attenuation_slant_path() |
さらに読む
-ITU-RPY ドキュメンテーション -ITU-R P.618 — 伝播データと予測方法 -STK クラウドからの移行:無料の代替手段 -UHF CubeSat ダウンリンクのサイズ設定:完全チュートリアル -rftools サテライトリンクバジェットアナライザー
関連記事
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. Full Python walkthrough with TLE fetch, elevation masks, Doppler, and iCalendar export.
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, ground-station G/T, ITU-R propagation losses, and Monte Carlo availability. Uses the Amateur CubeSat preset.
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 the free open-source replacements for the two things it did best — ITU-R link budgets and orbital pass prediction.
2026年4月29日