Skip to content
RFrftools.io
Satellite Communications30 de abril de 20268 min de lectura

Creación de scripts para presupuestos de enlaces satelitales con ITU-RPY (ejemplos de Python)

Automatización del presupuesto de enlaces sin STK: frecuencia de barrido, disponibilidad de lluvia y elevación en Python puro utilizando la implementación de referencia ITU-RPY de P.618/P.676/P.840. Complemento del analizador presupuestario Satellite Link de rftools.

Contenido

Por qué crear scripts para tus presupuestos de enlaces

El rftools Satellite Link Budget Analyzer está diseñado para el diseño interactivo de escenarios. Cuando necesita analizar un parámetro en cientos de puntos (para realizar estudios comerciales, optimizar planes de frecuencia o integrar la CI/CD en su repositorio de diseño de misiones), lo que necesita es Python, no un navegador.

ITU-RPY es la implementación de referencia de código abierto de las Recomendaciones del UIT-R para la propagación Tierra-espacio. Nuestro backend se alinea con ello. Esta publicación muestra tres casos de uso guionados que puedes convertir directamente en un cuaderno de Jupyter.

Instalar
pip install itur numpy matplotlib
La UIT-Rpy extrae sus propias tablas de datos (mapas de tasas de lluvia, climatologías con índices de refracción) del repositorio de la UIT. La primera importación puede tardar unos 5 segundos.

Caso práctico 1: barrido de frecuencia para un enlace descendente en banda Ka

Estás diseñando un enlace descendente para una transmisión GEO y quieres saber cómo varía la atenuación específica de la lluvia de 20 a 40 GHz con una disponibilidad del 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 (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()
En la banda Ka de la zona climática de Atlanta (zona de lluvia K del ITU-R), a 20 GHz se produce una atenuación atmosférica total de entre 2 y 3 dB al 99,99%. En 40 GHz, esto aumenta a 15-20 dB, razón por la cual los organismos de radiodifusión en banda Ka suelen asignar entre 5 y 6 dB de margen de control de potencia de enlace ascendente superior al nominal.

Caso práctico 2: Un barrido de disponibilidad para un estudio comercial que se desvanece por la lluvia

Debe decidir entre un 99,9% (80 minutos de interrupción al año), un 99,99% (52 minutos de interrupción al año) y un 99,999% (5 minutos de interrupción al año) para un VSAT marítimo. ¿Cuánto margen de atenuación adicional cuesta cada nivel?

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')
Salida típica:
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
Pasar del 99,99% al 99,999% cuesta alrededor de 5 dB en la banda Ku, lo que, en la mayoría de los casos de uso marítimo, no vale la pena el presupuesto de hardware. La mesa de estudio sobre el comercio facilita la conversación con las partes interesadas.

Caso práctico 3: máscara de elevación: ¿dónde se cierra el enlace a baja altitud?

En el caso de una constelación LEO con una terminal terrestre fija, los pasos a baja altitud tienen una atenuación atmosférica mucho mayor. Grafique la atenuación total frente a la elevación:

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()
A una elevación de 5°, se ven de 8 a 10 dB más que a 45°, por lo que los terminales LEO de banda Ka utilizan una máscara de elevación mínima de 15 a 20° y restan prioridad a los contactos de baja elevación.

Devolviendo la salida al analizador rftools

Cuando tenga un número de atenuación programado, conéctelo al Satellite Link Budget Analyzer comorainFadeoatmosphericLoss, ejecute el comando Monte Carlo y copie la URL del escenario para compartirlo. Nuestro servidor utiliza los mismos modelos de la ITU-R, por lo que los resultados coinciden con una precisión de punto flotante.

Para las pruebas de regresión automatizadas, nuestro punto final POST /api/py/v1/calculate acepta la calculadorarf-link-budgetcon todas las entradas, perfecta para las canalizaciones de CI que verifican el cumplimiento del presupuesto de enlaces en cada confirmación.

Errores comunes

  1. Las unidades importan.f=20.0sin* itur.u.GHzasume silenciosamente Hz. ITU-RPY valida dimensionalmente.
  2. La disponibilidad es el% de interrupciones, no el% de tiempo de actividad.p=0.01significa una disponibilidad del 99,99% (el 0,01% del tiempo en el que la atenuación supera ese valor).
  3. La zona de lluvia se deriva de la latitud y lón. No puedes anularla; si estás realizando una prueba para la zona P (tropical en el peor de los casos), debes superar una latitud o longitud en esa zona, por ejemplo,lat=1.3, lon=103.8(Singapur).
  4. La atenuación de las nubes requiere un diámetro de antena. Las antenas más grandes tienen haces más estrechos y ven menos atenuación de las nubes en dB.
  5. El centelleo es una función independiente. Usaitur.models.itu618.scintillation_attenuation(): no está incluido en la llamadaatmospheric_attenuation_slant_pathpredeterminada.

Sustituir el módulo de comunicación de STK Cloud

La suite Comm/Radar de STK Cloud incluyó estos cálculos del ITU-R en una interfaz de usuario. Para la creación de scripts, ITU-rpy es la implementación de referencia a la que habrían llamado. Migración:

STK Cloud CommEquivalente a ITU-RPY
Modelo de atenuación de lluviaitur.models.itu838.specific_attenuation()
Absorción de gasesitur.models.itu676.gaseous_attenuation_slant_path()
Atenuación de nubesitur.models.itu840.columnar_content_reduced_liquid()
Centelleoitur.models.itu618.scintillation_attenuation()
Atenuación totalitur.atmospheric_attenuation_slant_path()
Para cualquier cosa que no sea una simulación de constelaciones en toda regla, esto es lo que busca. Consulta también Migración desde STK Cloud para ver el mapa completo de sustitución de herramientas.

Lecturas adicionales

Artículos Relacionados