ITU-R Propagation

Build & TestHex.pm

Pure Elixir implementation of ITU-R atmospheric propagation models for satellite link budget calculations.

What are ITU-R recommendations?

The International Telecommunication Union - Radiocommunication Sector (ITU-R) publishes recommendations that serve as international standards for radio communication systems. The P-series recommendations cover radiowave propagation and are essential for designing reliable satellite communication links.

This library implements the following recommendations:

RecommendationTitleImplementation
P.676Attenuation by atmospheric gasesSimplified Annex 2 model (1-350 GHz)
P.838Specific attenuation model for rainFull regression coefficients from P.838-3 (1-1000 GHz)
P.618Earth-space propagationFull step-by-step procedure from P.618-13 (Rain, Scintillation)
P.839Rain height model1-degree gridded data from P.839-4 with bilinear interpolation
P.840Attenuation due to clouds and fogDouble-Debye permittivity model from P.840-7

Installation

Add itu_r_propagation to your list of dependencies in mix.exs:

def deps do
[
{:itu_r_propagation, "~> 0.6.0"}
]
end

Usage

Total atmospheric attenuation

For link budget calculations, use the combined model:

result = ItuRPropagation.total_atmospheric_attenuation(
frequency_ghz: 12.0,
elevation_deg: 30.0,
latitude_deg: 40.0,
longitude_deg: -100.0,
rain_rate_mmh: 25.0
)
# result = %{
# total_db: ...,
# gaseous_db: ...,
# rain_db: ...,
# cloud_db: ...,
# scintillation_db: ...
# }

Individual models

# P.838: Specific rain attenuation (dB/km)
gamma = ItuRPropagation.P838.specific_attenuation(12.0, 25.0, :circular, 30.0)
# P.839: Rain height (km)
h_r = ItuRPropagation.P839.rain_height(40.0, -100.0)
# P.618: Slant-path rain attenuation (dB)
a_rain = ItuRPropagation.P618.rain_attenuation(12.0, 30.0, 40.0, 25.0,
longitude_deg: -100.0, polarization: :circular)
# P.676: Gaseous attenuation (dB)
a_gas = ItuRPropagation.P676.slant_path_attenuation(12.0, 30.0)

Polarization

Supports horizontal, vertical, and circular polarization per ITU-R P.838-3. The combined coefficient formula correctly accounts for elevation angle:

gamma_h = ItuRPropagation.P838.specific_attenuation(12.0, 25.0, :horizontal, 30.0)
gamma_v = ItuRPropagation.P838.specific_attenuation(12.0, 25.0, :vertical, 30.0)
gamma_c = ItuRPropagation.P838.specific_attenuation(12.0, 25.0, :circular, 30.0)

Validation

P.838 and P.618 are validated against the Python itur library (v0.4.0). P.838 coefficients match to 6 significant figures. P.618 rain attenuation matches the ITU-R P.618-13 step-by-step procedure to within 0.01%.

Run the Python parity tests (requires itur installed):

mix test --include python_parity

Frequency ranges

BandFrequencyRain effectPrimary concern
L-band1-2 GHzNegligible (< 0.01 dB)Gaseous absorption, scintillation
S-band2-4 GHzVery smallGaseous absorption
C-band4-8 GHzSmallRain begins to matter
Ku-band12-18 GHzSignificant (1-10 dB)Rain attenuation
Ka-band26-40 GHzDominant (5-30 dB)Rain attenuation

Limitations

License

MIT License. See LICENSE for details.