Skripterstellung von Satelliten-Link-Budgets mit ITU-RPY (Python-Beispiele)
STK-freie Link-Budget-Automatisierung: Sweep-Frequenz, Regenverfügbarkeit und Höhenlage in reinem Python unter Verwendung der ITU-RPY-Referenzimplementierung.
Inhalt
- Warum sollten Sie Ihre Link-Budgets skripten
- Installieren
- Anwendungsfall 1: Frequenz-Sweep für einen Ka-Band-Downlink
- Anwendungsfall 2: Überprüfung der Verfügbarkeit im Rahmen einer Rain-Fade-Handelsstudie
- Anwendungsfall 3: Höhenmaske — wo endet die Verbindung bei niedriger Höhe?
- Häufige Fallstricke
- Das Kommunikationsmodul von STK Cloud ersetzen
- Weiterführende Literatur
Warum sollten Sie Ihre Link-Budgets skripten
Der rftools Satellite Link Budget Analyzer wurde für das interaktive Szenariodesign entwickelt. Wenn Sie einen Parameter über Hunderte von Punkten hinweg durchsuchen müssen — für Handelsstudien, Frequenzplanoptimierung oder CI/CD-Integration in Ihr Missionsdesign-Repo —, dann benötigen Sie Python, keinen Browser.
ITU-RPY ist die Open-Source-Referenzimplementierung der ITU-R-Empfehlungen zur Ausbreitung der Erde im Weltraum. Der Propagationscode des Analyzers ist eine Portierung des Analyzers und stimmt mit ihm an zwölf Teststandorten bis zu 0,001% überein, sobald beide auf die gleichen Recommendation-Versionen eingestellt sind (siehe Ende dieses Beitrags). Dieser Beitrag zeigt drei skriptbasierte Anwendungsfälle, die Sie direkt in ein Jupyter-Notizbuch übernehmen können.Installieren
pip install itur numpy matplotlib
ITU-RPY bezieht seine eigenen Datentabellen (Regenratenkarten, Brechungsindexklimatologien) aus dem ITU-Repository. Der erste Import kann ~5 Sekunden dauern.
Anwendungsfall 1: Frequenz-Sweep für einen Ka-Band-Downlink
Sie planen einen GEO-Broadcast-Downlink und möchten wissen, wie die spezifische Regendämpfung bei einer Verfügbarkeit von 99,99% zwischen 20 und 40 GHz variiert.
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()
Atlanta ist nass: Die P.837-7 map gibt = 51,9 mm/h an. Bei 99,99% Verfügbarkeit gibt das Script eine Gesamtdämpfung von 25,0 dB bei 20 GHz zurück — 22,9 dB bei Regen — 47,8 dB bei 30 GHz und 70,6 dB bei 40 GHz. Bei 40 GHz gibt es keine praktikable Abschwächungsmarge, weshalb Ka-Band- und Q/V-Band-Systeme eher auf Uplink-Leistungssteuerung, adaptive Codierung und Standortdiversität als auf statische Margen angewiesen sind und Q/V-Band-Verfügbarkeiten von deutlich unter 99,99% angeben.
Anwendungsfall 2: Überprüfung der Verfügbarkeit im Rahmen einer Rain-Fade-Handelsstudie
Sie müssen sich für ein VSAT-Terminal zwischen 99,9% (526 Minuten Ausfall pro Jahr), 99,99% (53 Minuten) und 99,999% (5 Minuten) entscheiden. Wie viel zusätzliche Fade-Margin kostet jede Stufe?
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')
Typische Leistung:
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
Ein Wechsel von 99,99% auf 99,999% kostet weitere 6,8 dB bei 14,5 GHz — mehr als der gesamte Schritt von 99% auf 99,99%. Bei den meisten VSAT-Diensten sind die letzten neun die Hardware nicht wert, und die Tabelle erleichtert das Gespräch mit den Beteiligten. (Bei den Standardwerten von ITU-RPY enthalten diese Summen einen kleinen Szintillationsterm; siehe unten.)
Anwendungsfall 3: Höhenmaske — wo endet die Verbindung bei niedriger Höhe?
Bei einer LEO-Konstellation mit festem Bodenanschluss weisen Pässe in niedriger Höhe eine viel höhere atmosphärische Dämpfung auf. Stellen Sie die Gesamtdämpfung im Vergleich zur Höhe dar:
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()
Bei 99,9% werden in London 4,9 dB bei 45°, 8,3 dB bei 20°, 14,2 dB bei 10° und 25,0 dB bei 5° gemessen — das Fünffache des 45°-Werts. Aus diesem Grund verwenden LEO-Ka-Band-Terminals eine Mindesthöhenmaske von 15—20° und räumen Kontakten mit niedriger Höhe keine Priorität ein.
# Die Ausgabe wird wieder in den rtools Analyzer eingespeist
Sie müssen keine Dämpfungswerte in den Satellite Link Budget Analyzer kopieren: Geben Sie ihm den Breiten- und Längengrad der Site und er liest dieselben ITU-R-Karten und führt dieselben Methoden aus. Dann werden die Verfügbarkeitskurve und Monte Carlo hinzugefügt. Um die Zahlen in ITU-RPY exakt zu reproduzieren, passen Sie die Recommendation-Versionen an und lassen Sie die Szintillation weg, die der Analyzer nicht modelliert:
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 verwendet standardmäßig P.840-7 und zirkulare Polarisation (tau=45); der Analysator verwendet P.840-8 und die von Ihnen gewählte Polarisation.
Wenn Sie bereits einen Dämpfungswert von einer anderen Quelle haben und damit ein Budget testen möchten, nimmt der RF Link Budget-Rechner einfache Eingaben an, und unser POST /api/py/v1/calculate -Endpunkt akzeptiert sie mit allen Eingaben — praktisch für CI-Pipelines, die bei jedem Commit die Einhaltung des Link-Budgets überprüfen.
Häufige Fallstricke
- Einheiten sind wichtig.
f=20.0ohne* itur.u.GHzgeht stillschweigend von Hz aus. ITU-RPY validiert dimensional. - Verfügbarkeit ist der Prozentsatz des Ausfalls, nicht der Betriebszeit %.
p=0.01bedeutet eine Verfügbarkeit von 99,99% (0,01% der Fälle, in denen die Dämpfung diesen Wert überschreitet). - Die Regenrate entspricht der P.837 -Karte für Breite/Länge P.837-7 hat keine Regenzonen. Um ein feuchtes tropisches Gebiet zu testen, bestehen Sie eine Karte, z. B.
lat=1.35, lon=103.8(Singapur, ≈ 100 mm/h) — oder überschreiben Sie die Karte mitR001=. - Der Antennendurchmesser
Dspeist den Szintillationsterm, der mit dem Mittelwert der Apertur über einen größeren Teil der turbulenten Schicht abnimmt. Die Dämpfung der Wolken wird dadurch nicht beeinflusst. - Szintillation ist standardmäßig enthalten.
atmospheric_attenuation_slant_pathfügt sie hinzu, es sei denn, Sie besteheninclude_scintillation=False. Benutzereturn_contributions=True, um Gas, Wolken, Regen und Szintillation getrennt voneinander zu betrachten.
Das Kommunikationsmodul von STK Cloud ersetzen
Die Comm/Radar-Suite von STK Cloud hat diese ITU-R-Berechnungen in einer Benutzeroberfläche zusammengefasst. Für die Skripterstellung ist ITU-RPY die Referenzimplementierung, die sie aufgerufen hätten. Migration:
| STK Cloud Comm | ITU-Rpy equivalent |
|---|---|
| Regendämpfung (schräger Verlauf) | itur.models.itu618.rain_attenuation() |
| Spezifische Regendämpfung | itur.models.itu838.rain_specific_attenuation() |
| Gasförmige Absorption | itur.models.itu676.gaseous_attenuation_slant_path() |
| Dämpfung der Wolken | itur.models.itu840.cloud_attenuation() |
| Szintillation | itur.models.itu618.scintillation_attenuation() |
| Totale Dämpfung | itur.atmospheric_attenuation_slant_path() |
Weiterführende Literatur
Aktualisiert 2026-09-19: Die obigen Dämpfungswerte wurden mit ITU-RPY 0.4.0 neu berechnet. Bei früheren Werten wurde der Regen im Ka-Band in Atlanta um eine Größenordnung unterschätzt, und die Angaben zum Antennendurchmesser, zur Szintillation und zur Einspeisung in den Analysator waren falsch.Häufig gestellte Fragen
Verwandte Artikel
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.
30. Apr. 2026
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.
29. Apr. 2026
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.
29. Apr. 2026