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

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マップでは R0.01R_{0.01} = 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パイプラインにとって便利です。

よくある落とし穴

  1. 単位は重要です。* itur.u.GHz を含まない f=20.0は黙って Hz を仮定します。ITU-Rpy は次元的に検証します。
  2. アベイラビリティはアップタイム%ではなく、システム停止%です。p=0.01は 99.99% の可用性 (減衰量がその値を超える時間の 0.01%) を意味します。
  3. 雨量は緯度/経度の P.837 マップに基づいています。 P.837-7 には雨域はありません。湿潤熱帯地域をテストするには、例えばlat=1.35, lon=103.8(シンガポール、R0.01R_{0.01} ≈100 mm/h) に合格するか、 R001=でマップを上書きしてください。
  4. アンテナの直径Dはシンチレーション項に供給されます。シンチレーション項は、乱流層の広い範囲にわたって口径が平均化されるにつれて小さくなります。雲の減衰には影響しません。
  5. シンチレーションはデフォルトで含まれています。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()
本格的な星座シミュレーション以外には、これが最適です。完全なツール交換マップについては、STK Cloud からの移行も参照してください。

さらに読む

更新 2026-09-19: 上記の減衰数値は ITU-Rpy 0.4.0 で再計算されました。以前の値では、アトランタのKaバンドの雨が桁違いに控えめで、アンテナの直径、シンチレーション、アナライザーへの給電数に関する記述が間違っていました。

よくある質問

はい。ITU-Rpyは、ITU-R勧告P.618、P.676、P.840、P.838、P.837、P.839、P.836、P.530のオープンソースリファレンス実装であり、ITU独自のテストベクトルに照らして検証されています。rftools サテライト・リンク・バジェット・アナライザはその移植版であり、両方が同じ推奨バージョンを使用する場合、0.001% 以内で同意します。
雨の減衰量(ITU-R P.618)は雨の要素だけです。全大気減衰量は、雨、ガス吸収 (P.676)、雲液水 (P.840)、そしてITU-Rpyのデフォルトコールではシンチレーション (P.618) (P.618セクション 2.5) が規定しているシンチレーション (P.618) を組み合わせたものです。雨の少ない99%など、利用可能性の低い目標ではガスと雲が優勢です。目標値が 99.99% 以上に上昇するにつれて、雨がますます優勢になります。
outage_minutes_per_year = (outage_pct / 100) * 525,960 分。つまり、99.99% のアベイラビリティ = 0.01% のシステム停止 = 52.6 分/年。99.999% = 0.001% のシステム停止 = 5.3 分/年。ITU-R p パラメータは常に障害率であり、エラーの原因となる可用性の割合ではありません。
ITU-R P.676 ガス吸収モデルは、1 GHz から 1000 GHz まで有効です。P.618 の雨量減衰量は 4 ~ 55 GHz で規定されています。W バンド(75~110 GHz)以上では、P.840 雲減衰量と P.676 気体を使用します。雨による減衰は科学ミッションでは妥当と推定されますが、55 GHz を超えると規制上の検証には不十分です。
一定の稼働率では、標高が下がるにつれて減衰量が急速に増加し、低角度での減衰量が 1/sin (標高) よりも速くなります。これは、経路が雨やガスにさらされる時間が長くなるためです。20 GHz のロンドンでは、年間の総減衰量が 0.01% を超えました。45°で11.9dB、10°で28.7dBでした。これが、Ka バンド以上の端末では最小エレベーションマスク(通常は 15 ~ 20°)を使用する理由です。

関連記事