Création de scripts pour les budgets de liaisons satellites avec ITU-RPy (exemples Python)
Budget de liaison sans STK : balayage de fréquence, disponibilité pluie et élévation en Python pur avec l'implémentation ITU-Rpy de P.618/P.676/P.840.
Sommaire
- Pourquoi créer des scripts pour vos budgets de liens
- Installer
- Cas d'utilisation 1 : balayage de fréquence pour une liaison descendante en bande Ka
- Cas d'utilisation 2 : analyse de la disponibilité pour une étude commerciale en cas de pluie
- Cas d'utilisation 3 : masque d'altitude — où se ferme le lien à basse altitude ?
- Réintroduire la sortie dans l'analyseur rftools
- Pièges courants
- Remplacement du module de communication de STK Cloud
- Lectures complémentaires
Pourquoi créer des scripts pour vos budgets de liens
Le rftools Satellite Link Budget Analyzer est conçu pour la conception de scénarios interactifs. Lorsque vous devez faire passer un paramètre sur des centaines de points, pour des études commerciales, l'optimisation d'un plan de fréquence ou l'intégration CI/CD dans votre référentiel de conception de mission, vous avez besoin de Python, pas d'un navigateur.
ITU-RPy est l'implémentation de référence open source des Recommandations UIT-R pour la propagation de la Terre dans l'espace. Le code de propagation de l'analyseur en est un port et correspond à celui-ci à 0,001 % près sur douze sites de test, une fois que les deux sont définis sur les mêmes versions de recommandation (voir la fin de cet article). Cet article présente trois cas d'utilisation scénarisés que vous pouvez intégrer directement dans un bloc-notes Jupyter.Installer
pip install itur numpy matplotlib
L'UIT-RPy extrait ses propres tableaux de données (cartes des taux de pluie, climatologies à indice de réfraction) du référentiel de l'UIT. La première importation peut prendre environ 5 secondes.
Cas d'utilisation 1 : balayage de fréquence pour une liaison descendante en bande Ka
Vous concevez une liaison descendante de diffusion GEO et souhaitez savoir dans quelle mesure l'atténuation spécifique de la pluie varie de 20 à 40 GHz avec une disponibilité de 99,99 %.
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 est humide : la carte P.837-7 donne = 51,9 mm/h. À 99,99 % de disponibilité, le script renvoie 25,0 dB d'atténuation totale à 20 GHz — 22,9 dB de pluie — 47,8 dB à 30 GHz et 70,6 dB à 40 GHz. Aucune marge d'atténuation pratique ne couvre celle à 40 GHz. C'est pourquoi les systèmes en bande Ka et en bande Q/V s'appuient sur le contrôle de la puissance des liaisons montantes, le codage adaptatif et la diversité des sites plutôt que sur une marge statique, et situent les disponibilités en bande Q/V bien en dessous de 99,99 %.
Cas d'utilisation 2 : analyse de la disponibilité pour une étude commerciale en cas de pluie
Vous devez choisir entre 99,9 % (526 minutes de panne par an), 99,99 % (53 minutes) et 99,999 % (5 minutes) pour un terminal VSAT. Quel est le coût de la marge de décoloration supplémentaire pour chaque niveau ?
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')
Sortie typique :
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
Passer de 99,99 % à 99,999 % coûte 6,8 dB supplémentaires à 14,5 GHz, soit plus que le passage complet de 99 % à 99,99 %. Pour la plupart des services VSAT, ces neuf derniers ne valent pas le prix du matériel, et le tableau facilite la conversation avec les parties prenantes. (Avec les valeurs par défaut de l'ITU-RPy, ces totaux incluent un petit terme de scintillation ; voir ci-dessous.)
Cas d'utilisation 3 : masque d'altitude — où se ferme le lien à basse altitude ?
Pour une constellation LEO dotée d'une borne terrestre fixe, les passes à basse altitude présentent une atténuation atmosphérique beaucoup plus élevée. Tracez l'atténuation totale en fonction de l'altitude :
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 %, Londres enregistre 4,9 dB à 45°, 8,3 dB à 20°, 14,2 dB à 10° et 25,0 dB à 5°, soit cinq fois le chiffre de 45°. C'est pourquoi les terminaux en bande Ka LEO utilisent un masque d'élévation minimum de 15 à 20° et dépriorisent les contacts à basse altitude.
Réintroduire la sortie dans l'analyseur rftools
Vous n'avez pas besoin de copier les numéros d'atténuation dans le Satellite Link Budget Analyzer : donnez-lui la latitude et la longitude du site et il lit les mêmes cartes UIT-R et exécute les mêmes méthodes, puis ajoute la courbe de disponibilité et le Monte Carlo. Pour reproduire ses chiffres exactement dans ITU-RPy, faites correspondre les versions recommandées et omettez la scintillation, que l'analyseur ne modélise pas :
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,
)
La valeur par défaut de l'ITU-RPy 0.4.0 est P.840-7 et la polarisation circulaire (tau=45) ; l'analyseur utilise P.840-8 et la polarisation que vous choisissez.
Si vous avez déjà un chiffre d'atténuation obtenu ailleurs et que vous souhaitez tester un budget avec celui-ci, le calculateur de budget RF Link prend la baisse de la pluie et la perte atmosphérique comme entrées simples, et notre point de terminaison POST /api/py/v1/calculate l'accepte avec toutes les entrées, ce qui est pratique pour les pipelines CI qui vérifient la conformité du budget des liens à chaque commit.
Pièges courants
- Les unités comptent.
f=20.0sans* itur.u.GHzsuppose silencieusement Hz. L'ITU-RPy valide dimensionnellement. - La disponibilité est le % de panne, et non le % de disponibilité.
p=0.01signifie une disponibilité de 99,99 % (0,01 % du temps, l'atténuation dépasse cette valeur). - Le taux de pluie provient de la carte du P.837 lat/lon. P.837-7 ne comporte aucune zone de pluie. Pour tester un site tropical humide, réussissez-en un, par exemple
lat=1.35, lon=103.8(Singapour, ≈ 100 mm/h) — ou remplacez la carte parR001=. - Le diamètre de l'antenne
Dalimente le terme de scintillation, qui diminue à mesure que l'ouverture augmente en moyenne sur une plus grande partie de la couche turbulente. Cela n'affecte pas l'atténuation des nuages. - La scintillation est incluse par défaut.
atmospheric_attenuation_slant_pathl'ajoute sauf si vous passez leinclude_scintillation=False. Utilisezreturn_contributions=Truepour voir séparément le gaz, les nuages, la pluie et les scintillations.
Remplacement du module de communication de STK Cloud
La suite Comm/Radar de STK Cloud a intégré ces calculs UIT-R dans une interface utilisateur. Pour les scripts, ITU-RPy est l'implémentation de référence qu'ils auraient appelée. Migration :
| Communication dans le cloud STK | ITU-Rpy equivalent |
|---|---|
| Atténuation de la pluie (trajectoire inclinée) | itur.models.itu618.rain_attenuation() |
| Atténuation spécifique de la pluie | itur.models.itu838.rain_specific_attenuation() |
| Absorption de gaz | itur.models.itu676.gaseous_attenuation_slant_path() |
| Atténuation des nuages | itur.models.itu840.cloud_attenuation() |
| Scintillation | itur.models.itu618.scintillation_attenuation() |
| Atténuation totale | itur.atmospheric_attenuation_slant_path() |
Lectures complémentaires
Mise à jour 2026-09-19: les chiffres d'atténuation ci-dessus ont été recalculés avec ITU-RPy 0.4.0. Les valeurs précédentes sous-estimaient d'un ordre de grandeur la pluie dans la bande Ka à Atlanta, et les notes sur le diamètre de l'antenne, la scintillation et les chiffres d'alimentation de l'analyseur étaient erronées.Foire Aux Questions
Articles connexes
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 avr. 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 avr. 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 avr. 2026