Propagation models¶
linkbudget.propagation provides simplified engineering implementations of
the relevant ITU-R Recommendations, plus a two-ray ground-reflection model.
Every class is a drop-in component tagged is_propagation = True, so
summary() folds it into the total path loss.
These are approximations
The models are compact curve-fits and single-parameter formulas, not line-by-line reference implementations. They are fine for trade studies and first-order budgets; they are not a substitute for a full ITU-R prediction where an availability figure has to be defended. Each model's validity range is noted below.
AtmosphericAbsorption¶
Clear-air gaseous absorption (oxygen + water vapour), ITU-R P.676 Annex 2.
Specify the path one of two ways:
# explicit horizontal path
linkbudget.AtmosphericAbsorption(
"Gases", "", frequency=20e9, path_length_km=3.0, water_vapor_density=7.5)
# slant path from the gas equivalent heights
linkbudget.AtmosphericAbsorption(
"Gases", "", frequency=20e9, elevation_deg=30.0)
water_vapor_densityis absolute humidity in g/m³ (7.5 is the ITU-R reference).- Validity: the oxygen term is the P.676 fit for f ≤ 57 GHz; the water-vapour term is usable to ~350 GHz. Both assume a standard sea-level atmosphere.
RainAttenuation¶
ITU-R P.838-3 specific attenuation (γ_R = k·R^α, with the full frequency
and polarization coefficient fits) and ITU-R P.618 slant-path geometry.
# explicit horizontal path, with an effective-length reduction factor
linkbudget.RainAttenuation(
"Rain", "", frequency=12e9, rain_rate=22.0, path_length_km=6.0)
# slant path: P.618 0.01% reduction + vertical-adjustment factors
linkbudget.RainAttenuation(
"Rain", "", frequency=20e9, rain_rate=32.0,
elevation_deg=25.0, rain_height_km=3.2, station_height_km=0.1,
latitude_deg=41.0, polarization_tilt_deg=45.0) # 45° tilt = circular
rain_rateis the point rain rate in mm/h (a rate of 0 is transparent).latitude_degrefines the vertical-adjustment factor; omit it to use the worst case.- Validity: P.838-3 coefficients cover 1–1000 GHz; the slant-path
procedure is the P.618 method for the attenuation exceeded 0.01% of an
average year and expects
elevation_deg≥ ~5°.
CloudFogAttenuation¶
ITU-R P.840 double-Debye model of liquid-water permittivity.
# columnar (integrated) liquid water, kg/m²
linkbudget.CloudFogAttenuation(
"Cloud", "", frequency=30e9, liquid_water_path=0.6, elevation_deg=30.0)
# in-cloud density × path length
linkbudget.CloudFogAttenuation(
"Fog", "", frequency=30e9, liquid_water_density=0.5, path_length_km=1.0)
- Validity: the double-Debye fit is good across the microwave/millimetre
band; the model covers cloud/fog liquid water only (rain is handled
separately by
RainAttenuation).
TroposphericScintillation¶
ITU-R P.618 §2.4.1 — the fast amplitude fading on a low-elevation slant path, with the antenna aperture-averaging factor.
linkbudget.TroposphericScintillation(
"Scintillation", "", frequency=20e9, elevation_deg=20.0,
antenna_diameter=1.2, antenna_efficiency=0.5,
time_percent=0.01) # fade depth exceeded this % of an average year
- The wet refractivity
n_wetis derived fromtemperature_candrelative_humidity_percentunless you pass it directly. - Validity: P.618 gives this method for f > 4 GHz and elevation ≥ 5°.
TwoRayGroundReflection¶
A plane-earth two-ray model for a terrestrial path.
linkbudget.TwoRayGroundReflection(
"Two-ray", "", distance=8000.0, tx_height=25.0, rx_height=2.0,
frequency=900e6)
Beyond the free-space / plane-earth crossover distance the received power
falls as (h_tx·h_rx / d²)² (40 dB/decade); below it, the model falls back
to free-space loss (frequency is needed for that and to report the
crossover distance).
Scalar helpers¶
The specific-attenuation maths is also exposed as pure functions:
from linkbudget import propagation
propagation.oxygen_specific_attenuation_db_per_km(20.0) # GHz -> dB/km
propagation.rain_specific_attenuation_db_per_km(12e9, 22.0) # Hz, mm/h -> dB/km
propagation.rain_kalpha(20e9, polarization_tilt_deg=45.0) # (k, alpha)
propagation.cloud_specific_attenuation_coefficient(30e9) # (dB/km)/(g/m^3)