Skip to content
RFrftools.io
Satellite Communications30. April 20265 Min. Lesezeit

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

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.

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 R0.01R_{0.01} = 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

  1. Einheiten sind wichtig.f=20.0 ohne * itur.u.GHz geht stillschweigend von Hz aus. ITU-RPY validiert dimensional.
  2. Verfügbarkeit ist der Prozentsatz des Ausfalls, nicht der Betriebszeit %.p=0.01 bedeutet eine Verfügbarkeit von 99,99% (0,01% der Fälle, in denen die Dämpfung diesen Wert überschreitet).
  3. 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, R0.01R_{0.01} ≈ 100 mm/h) — oder überschreiben Sie die Karte mit R001=.
  4. Der Antennendurchmesser D speist 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.
  5. Szintillation ist standardmäßig enthalten.atmospheric_attenuation_slant_path fügt sie hinzu, es sei denn, Sie besteheninclude_scintillation=False . Benutze return_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 CommITU-Rpy equivalent
Regendämpfung (schräger Verlauf)itur.models.itu618.rain_attenuation()
Spezifische Regendämpfungitur.models.itu838.rain_specific_attenuation()
Gasförmige Absorptionitur.models.itu676.gaseous_attenuation_slant_path()
Dämpfung der Wolkenitur.models.itu840.cloud_attenuation()
Szintillationitur.models.itu618.scintillation_attenuation()
Totale Dämpfungitur.atmospheric_attenuation_slant_path()
Für alles andere als eine vollständige Konstellationssimulation ist dies genau das, was Sie wollen. Siehe auch Migration von STK Cloud für die vollständige Übersicht über den Austausch von Tools.

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

Ja. ITU-RPY ist die Open-Source-Referenzimplementierung der ITU-R-Empfehlungen P.618, P.676, P.840, P.838, P.837, P.839, P.836 und P.530, die anhand der ITU-eigenen Testvektoren validiert wurde. Der rftools Satellite Link Budget Analyzer ist eine Portierung davon und stimmt ihr innerhalb von 0,001% zu, wenn beide die gleichen Recommendation-Versionen verwenden.
Die Regendämpfung (ITU-R P.618) ist nur die Regenkomponente. Die gesamte atmosphärische Dämpfung kombiniert Regen, gasförmige Absorption (P.676), flüssiges Wolkenwasser (P.840) und, im Standardaufruf von ITU-RPY, Szintillation (P.618), wie in P.618 Abschnitt 2.5 angegeben. Gas und Wolken dominieren bei Zielen mit niedriger Verfügbarkeit, wie z. B. 99%, wo Regen gering ist; Regen dominiert zunehmend, je höher der Zielwert auf 99,99% und höher steigt.
outage_minutes_per_year = (outage_pct / 100) * 525.960 Minuten. Also 99,99% Verfügbarkeit = 0,01% Ausfall = 52,6 min/Jahr. 99,999% = 0,001% Ausfall = 5,3 min/Jahr. Der ITU-R-Parameter p ist immer der Prozentsatz des Ausfalls, nicht der Prozentsatz der Verfügbarkeit — eine häufige Fehlerquelle.
Das ITU-R P.676-Gasabsorptionsmodell ist von 1 GHz bis 1000 GHz gültig. Die P.618-Regendämpfung ist für 4-55 GHz spezifiziert. Verwenden Sie für das W-Band (75-110 GHz) und höher P.840 Wolkendämpfung + P.676 gasförmig; die Regendämpfung lässt sich für wissenschaftliche Missionen sinnvoll extrapolieren, bei höheren 55 GHz fehlt es jedoch an behördlicher Validierung.
Bei fester Verfügbarkeit nimmt die Dämpfung schnell zu, wenn die Höhe sinkt — bei niedrigen Winkeln schneller als 1/sin (Höhe), da der Pfad länger Regen und Gas ausgesetzt ist. In London bei 20 GHz liegt die Gesamtdämpfung über 0,01% des Jahres bei 11,9 dB bei 45° und 28,7 dB bei 10°. Aus diesem Grund verwenden Endgeräte im Ka-Band und höher eine Mindesthöhenmaske, in der Regel 15—20°.

Verwandte Artikel