Skip to content
RFrftools.io
Satellite Communications2026年4月30日8分で読める

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 秒ほどかかる場合があります。

ユースケース 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 dB
99.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()
本格的なコンステレーション・シミュレーション以外には、この方法が最適です。完全なツール交換マップについては、STK クラウドからの移行 も参照してください。

さらに読む

-ITU-RPY ドキュメンテーション -ITU-R P.618 — 伝播データと予測方法 -STK クラウドからの移行:無料の代替手段 -UHF CubeSat ダウンリンクのサイズ設定:完全チュートリアル -rftools サテライトリンクバジェットアナライザー

関連記事