Propagation¶
Propagation loss models implementing the PropagationModel protocol.
Free-Space Path Loss¶
FreeSpacePropagation
¶
Free-space path loss model.
Computes FSPL(dB) = 20 * log10(4 * pi * d * f / c) where d is the
slant range and f is the carrier frequency.
Examples:
>>> prop = FreeSpacePropagation()
>>> prop.total_path_loss_db(12e9, 30.0, 37e6, PropagationConditions())
205.3 # approximate
total_path_loss_db
¶
Compute free-space path loss.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f_hz
|
float
|
Carrier frequency in Hz. |
required |
elev_deg
|
float
|
Elevation angle in degrees (unused for FSPL). |
required |
range_m
|
float
|
Slant range in metres. |
required |
cond
|
PropagationConditions
|
Environmental conditions (unused for FSPL). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Free-space path loss in dB (positive value). |
Source code in src/opensatcom/propagation/fspl.py
Composite Propagation¶
CompositePropagation
¶
Sum losses in dB across multiple propagation components.
Combines FSPL with atmospheric, rain, and scintillation losses.
Each component's total_path_loss_db is called and the results
are summed in dB domain.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
components
|
Sequence of PropagationModel
|
Ordered list of propagation models to combine. |
required |
Examples:
>>> from opensatcom.propagation import FreeSpacePropagation
>>> comp = CompositePropagation([FreeSpacePropagation()])
Source code in src/opensatcom/propagation/composite.py
total_path_loss_db
¶
Compute total composite path loss.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f_hz
|
float
|
Carrier frequency in Hz. |
required |
elev_deg
|
float
|
Elevation angle in degrees. |
required |
range_m
|
float
|
Slant range in metres. |
required |
cond
|
PropagationConditions
|
Environmental conditions. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Sum of all component losses in dB. |
Source code in src/opensatcom/propagation/composite.py
per_component_losses_db
¶
Compute per-component path losses.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f_hz
|
float
|
Carrier frequency in Hz. |
required |
elev_deg
|
float
|
Elevation angle in degrees. |
required |
range_m
|
float
|
Slant range in metres. |
required |
cond
|
PropagationConditions
|
Environmental conditions. |
required |
Returns:
| Type | Description |
|---|---|
dict of str to float
|
Mapping from component key name to its loss in dB.
Keys use standard names: |
Source code in src/opensatcom/propagation/composite.py
Rain Attenuation (ITU-R P.618)¶
RainAttenuationP618
¶
ITU-R P.618 rain attenuation model.
Computes rain-induced path loss using specific attenuation from ITU-R P.838 coefficients and effective path length derived from elevation angle.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
availability_target
|
float
|
Target link availability (e.g. 0.99 for 99%). |
0.99
|
rain_rate_mm_per_hr
|
float | None
|
Rain rate. If None, uses value from PropagationConditions. |
None
|
climate_region
|
str | None
|
ITU rain climate region (for future region-based rain rate lookup). |
None
|
Source code in src/opensatcom/propagation/rain.py
total_path_loss_db
¶
Compute rain attenuation in dB (additional loss beyond FSPL).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f_hz
|
float
|
Carrier frequency in Hz. |
required |
elev_deg
|
float
|
Elevation angle in degrees. |
required |
range_m
|
float
|
Slant range in metres (unused; path length derived from elevation). |
required |
cond
|
PropagationConditions
|
Environmental conditions; |
required |
Returns:
| Type | Description |
|---|---|
float
|
Rain attenuation in dB (0.0 if rain rate is zero or frequency < 1 GHz). |
Source code in src/opensatcom/propagation/rain.py
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | |
Gaseous Absorption (ITU-R P.676)¶
GaseousAbsorptionP676
¶
ITU-R P.676 gaseous absorption model.
Computes combined dry-air (O2) and water-vapor (H2O) absorption loss. Simplified model with frequency-dependent specific attenuation multiplied by slant path length through the atmosphere.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
water_vapor_density_g_m3
|
float
|
Surface water vapor density in g/m^3. Default 7.5 g/m^3 (standard mid-latitude). |
7.5
|
Source code in src/opensatcom/propagation/gas.py
total_path_loss_db
¶
Compute gaseous absorption loss in dB.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f_hz
|
float
|
Carrier frequency in Hz. |
required |
elev_deg
|
float
|
Elevation angle in degrees. |
required |
range_m
|
float
|
Slant range in metres (unused; path derived from elevation). |
required |
cond
|
PropagationConditions
|
Environmental conditions (unused; water vapor set at construction). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Combined dry-air and water-vapor absorption in dB (0.0 if frequency < 1 GHz). |
Source code in src/opensatcom/propagation/gas.py
Scintillation¶
ScintillationLoss
¶
Tropospheric scintillation fade margin model.
Computes the scintillation fade margin based on frequency, elevation angle, and target availability. Uses a simplified model:
sigma = C_f * f_GHz^(7/12) * (1/sin(elev))^1.2
fade_margin = sigma * G(p)
where G(p) is the inverse Gaussian quantile for the availability target.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
availability_target
|
float
|
Target link availability (e.g. 0.99 for 99%). |
0.99
|
Source code in src/opensatcom/propagation/scintillation.py
total_path_loss_db
¶
Compute scintillation fade margin in dB.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f_hz
|
float
|
Carrier frequency in Hz. |
required |
elev_deg
|
float
|
Elevation angle in degrees. |
required |
range_m
|
float
|
Slant range in metres (unused; derived from elevation). |
required |
cond
|
PropagationConditions
|
Environmental conditions; |
required |
Returns:
| Type | Description |
|---|---|
float
|
Scintillation fade margin in dB (0.0 if frequency < 1 GHz). |