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

Criando scripts de orçamentos de links de satélite com ITU-RPy (exemplos em Python)

Automação de orçamento de links sem STK: frequência de varredura, disponibilidade de chuva e elevação em Python puro usando a implementação de referência ITU-Rpy de P.618/P.676/P.840. Companheiro do rftools Satellite Link Budget Analyzer.

Conteúdo

O rftools Satellite Link Budget Analyzer foi criado para design de cenários interativos. Quando você precisa varrer um parâmetro em centenas de pontos — para estudos comerciais, otimização do plano de frequência ou integração de CI/CD em seu repositório de design de missão — você quer Python, não um navegador.

ITU-Rpy é a implementação de referência de código aberto das Recomendações do ITU-R para propagação no espaço terrestre. Nosso back-end se alinha a ele. Esta postagem mostra três casos de uso com script que você pode transferir diretamente para um notebook Jupyter.

Instalar
pip install itur numpy matplotlib
O ITU-RPy extrai suas próprias tabelas de dados (mapas de taxa de chuva, climatologias de índice de refração) do repositório da UIT. A primeira importação pode levar cerca de 5 segundos.

Você está projetando um downlink de transmissão GEO e quer saber como a atenuação específica da chuva varia de 20 a 40 GHz com disponibilidade 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 (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()
Na banda Ka sobre a zona climática de Atlanta (zona de chuva K da ITU-R), 20 GHz vê cerca de 2-3 dB de atenuação atmosférica total em 99,99%. Em 40 GHz, isso sobe para 15-20 dB — e é por isso que as emissoras de banda Ka normalmente alocam 5-6 dB de margem de controle de potência de uplink além da nominal.

Caso de uso 2: varredura de disponibilidade para um estudo comercial ininterrupto

Você precisa decidir entre 99,9% (interrupção de 80 minutos/ano), 99,99% (52 minutos de interrupção/ano) e 99,999% (interrupção de 5 minutos/ano) para um VSAT marítimo. Quanto custa cada nível de margem extra de redução?

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')
Saída 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
Passar de 99,99% para 99,999% custa cerca de 5 dB na banda Ku — o que, para a maioria dos casos de uso marítimo, não vale o orçamento de hardware. A tabela de estudos comerciais facilita a conversa com as partes interessadas.

Para uma constelação LEO com um terminal terrestre fixo, passagens de baixa elevação têm uma atenuação atmosférica muito maior. Traçar atenuação total versus elevação:

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()
Em uma elevação de 5°, você vê de 8 a 10 dB a mais do que em 45° — e é por isso que os terminais LEO de banda Ka usam uma máscara de elevação mínima de 15 a 20° e despriorizam contatos de baixa elevação.

Alimentando a saída de volta para o rftools Analyzer

Depois de ter um número de atenuação em script, conecte-o ao Satellite Link Budget Analyzer comorainFadeouatmosphericLoss, execute o Monte Carlo e copie a URL do cenário para compartilhamento. Nosso backend usa os mesmos modelos ITU-R para que os resultados correspondam com precisão de ponto flutuante.

Para testes de regressão automatizados, nosso endpoint POST /api/py/v1/calculate aceita a calculadorarf-link-budgetcom todas as entradas — perfeita para pipelines de CI que verificam a conformidade do orçamento de links em cada confirmação.

Pegadinhas comuns

  1. As unidades importam.f=20.0sem* itur.u.GHzassume silenciosamente Hz. O ITU-RPy valida dimensionalmente.
  2. A disponibilidade é% de interrupção, não tempo de atividade %.p=0.01significa disponibilidade de 99,99% (0,01% do tempo em que a atenuação excede esse valor).
  3. A zona de chuva é derivada de lat/lon. Você não pode substituí-la — se estiver testando para a Zona P (na pior das hipóteses tropicais), você deve passar um lat/lon nessa zona, por exemplo,lat=1.3, lon=103.8(Cingapura).
  4. A atenuação da nuvem precisa do diâmetro da antena. Antenas maiores têm feixes mais estreitos e apresentam menos atenuação da nuvem em dB.
  5. A cintilação é uma função separada. Useitur.models.itu618.scintillation_attenuation()— ela não está incluída na chamada padrão doatmospheric_attenuation_slant_path.

Substituindo o módulo Comm da STK Cloud

O pacote Comm/Radar da STK Cloud envolveu esses cálculos do ITU-R em uma interface de usuário. Para scripts, o ITU-RPy é a implementação de referência que eles teriam chamado. Migração:

STK Cloud CommEquivalente ao ITU-RPy
Modelo de atenuação da chuvaitur.models.itu838.specific_attenuation()
Absorção gasosaitur.models.itu676.gaseous_attenuation_slant_path()
Atenuação da nuvemitur.models.itu840.columnar_content_reduced_liquid()
Cintilaçãoitur.models.itu618.scintillation_attenuation()
Atenuação totalitur.atmospheric_attenuation_slant_path()
Para qualquer coisa que não seja uma simulação de constelação completa, isso é o que você deseja. Consulte também Migrando do STK Cloud para ver o mapa completo de substituição de ferramentas.

Leitura adicional

Artigos Relacionados