Link Budgets – ephemerista.analysis.link_budget
¶
The link_budget.py module.
This module provides the LinkBudget class and the associated LinkBudgetResults class.
- pydantic model ephemerista.analysis.link_budget.EnvironmentalLosses¶
The EnvironmentalLosses class.
This class models all environmental losses supported by Ephemerista.
- Fields:
-
field atmospheric_attenuation:
float
[Required] (alias 'atmosphericAttenuation')¶ Attenuation of atmospheric gases, in dB
- Constraints:
ge = 0.0
-
field cloud_attenuation:
float
[Required] (alias 'cloudAttenuation')¶ Attenuation due to clouds, in dB
- Constraints:
ge = 0.0
-
field depolarization_loss:
float
[Required] (alias 'depolarizationLoss')¶ Depolarization losses, in dB
- Constraints:
ge = 0.0
-
field gaseous_attenuation:
float
[Required] (alias 'gaseousAttenuation')¶ Gaseous attenuation, in dB
- Constraints:
ge = 0.0
-
field rain_attenuation:
float
[Required] (alias 'rainAttenuation')¶ Rain attenuation, in dB)
- Constraints:
ge = 0.0
-
field scintillation_attenuation:
float
[Required] (alias 'scintillationAttenuation')¶ Solar scintillation attenuation, in dB
- Constraints:
ge = 0.0
- classmethod calculate(percentage_exceed, time, observer, target_comms, observer_comms, gs_pass, min_elevation_deg=5.0)¶
Calculate environmental losses for a given link.
- Parameters:
percentage_exceed (float) – Percentage of time losses are exceeded
time (Time) – Time at which to calculate losses
observer (Asset) – Observer asset (typically ground station)
target_comms (CommunicationSystem) – Target communication system
observer_comms (CommunicationSystem) – Observer communication system
gs_pass (Pass) – Pass object for elevation data
min_elevation_deg (float, optional) – Minimum elevation (degrees) below which the threshold value is used. ITU-R models become numerically unstable below ~5 degrees. Default is 5.0.
- Returns:
Calculated environmental losses for the link
- Return type:
- classmethod no_losses()¶
Initialize all environmental losses to zero.
- Returns:
Instance with all loss components set to zero.
- Return type:
- sum()¶
Sum all environmental losses.
- Returns:
Total environmental losses in dB.
- Return type:
float
- pydantic model ephemerista.analysis.link_budget.InterferenceStats¶
The InterferenceStats class.
This class models the influence of interfering radio transmissions on the link.
- Fields:
-
field c_n0i0:
float
[Required] (alias 'cN0I0')¶ Carrier to noise plus interference density, in dB
-
field eb_n0i0:
float
[Required] (alias 'ebN0I0')¶ Bit energy to noise plus interference density, in dB
-
field interference_power_w:
float
[Required] (alias 'interferencePowerW')¶ Total received interference power from all sources, in W
- Constraints:
ge = 0.0
-
field margin_with_interference:
float
[Required] (alias 'marginWithInterference')¶ Link margin considering interference, in dB
- property interference_power: float¶
- pydantic model ephemerista.analysis.link_budget.Link¶
The Link class.
This class models a radio link between two communication systems covering a specific visbility window.
- Fields:
-
field link_type:
Literal
['uplink'
,'downlink'
] [Required] (alias 'linkType')¶ Link type, uplink or downlink
-
field window:
Window
[Required]¶ Time window of the visibility pass where the link budget is computed
- plot(*, plot_interference=False)¶
Plot all link properties.
- Parameters:
plot_interference (bool, optional) – Whether to include interference statistics in the plots. Default is False.
- Returns:
Figure containing subplots of all link properties.
- Return type:
matplotlib.figure.Figure
- plot_attenuations(percentage_exceed)¶
Plot all environmental attenuations.
- Parameters:
percentage_exceed (float) – Percentage of time the attenuations are exceeded, used in plot title.
- Returns:
Figure containing subplots of all environmental attenuations.
- Return type:
matplotlib.figure.Figure
- to_dataframe()¶
Convert link statistics to a pandas DataFrame.
- Returns:
DataFrame containing all link statistics indexed by time.
- Return type:
pd.DataFrame
- property mean_c_n0: float¶
- property mean_eb_n0: float¶
- property mean_eirp: float¶
- property mean_fspl: float¶
- property mean_gt: float¶
- property mean_losses: float¶
- property mean_margin: float¶
- property mean_rx_angle: float¶
- property mean_slant_range: float¶
- property mean_tx_angle: float¶
- pydantic model ephemerista.analysis.link_budget.LinkBudget¶
The LinkBudget analysis.
- Fields:
-
field end_time:
Time
|None
= None (alias 'endTime')¶ End time (optional, if None the scenario’s end time is used)
-
field min_elevation_deg:
float
= 5.0 (alias 'minElevationDeg')¶ Minimum elevation angle (degrees) below which the threshold value is used to avoid numerical instability
- Constraints:
ge = 0.0
le = 90.0
-
field percentage_exceed:
float
= 1.0 (alias 'percentageExceed')¶ Percentage of the time the environmental attenuation values are exceeded, per ITU-R
- Constraints:
gt = 0.001
le = 5.0
-
field start_time:
Time
|None
= None (alias 'startTime')¶ Start time (optional, if None the scenario’s start time is used)
-
field with_environmental_losses:
bool
= True (alias 'withEnvironmentalLosses')¶ Whether to calculate environmental losses (rain, atmospheric, etc.) or use zero losses
-
field with_interference:
bool
= False (alias 'withInterference')¶ Whether to calculate interference from other transmissions in the scenario
- analyze(ensemble=None, visibility=None)¶
Run the link budget analysis.
- Parameters:
ensemble (Ensemble, optional) – Pre-computed ensemble with propagated trajectories. If None, the scenario will be propagated automatically.
visibility (VisibilityResults, optional) – Pre-computed visibility results. If None, visibility analysis will be run automatically.
- Returns:
Complete link budget analysis results including all links and their statistics over time.
- Return type:
- pydantic model ephemerista.analysis.link_budget.LinkBudgetResults¶
The results of the LinkBudget analysis.
- Fields:
-
field links:
dict
[Annotated
[UUID
],dict
[Annotated
[UUID
],list
[Link
]]] [Required]¶ Dictionary of all links between all targets and all observers
-
field results_type:
Literal
['link_budget'
] = 'link_budget' (alias 'type')¶
- get(observer, target)¶
Get all links for a given observer and target pairing.
- Return type:
list
[Link
]
- to_dataframe(observer, target, *, with_interference=False)¶
Convert the analysis results to a Pandas data frame.
- Parameters:
observer (AssetKey) – Observer asset identifier
target (AssetKey) – Target asset identifier
with_interference (bool, optional) – Whether to include interference statistics in the dataframe. Default is False.
- Returns:
Dataframe containing link statistics for all passes between the observer and target.
- Return type:
pd.DataFrame
- pydantic model ephemerista.analysis.link_budget.LinkStats¶
The LinkStats class.
This class models all relevant properties of a radio link for link budget calculations at specific point in time.
- Fields:
-
field bandwidth:
float
[Required]¶ Bandwidth, in Hz
-
field c_n0:
float
[Required] (alias 'cN0')¶ Carrier to noise density, in dB
-
field carrier_rx_power:
float
[Required] (alias 'carrierRxPower')¶ Power level at receiver input, in dBW
-
field data_rate:
float
[Required] (alias 'dataRate')¶ Data rate, in bit/s
-
field eb_n0:
float
[Required] (alias 'ebN0')¶ Bit energy to noise density, in dB
-
field eirp:
float
[Required]¶ Effective isotropic radiated power, in dBW
-
field frequency:
float
[Required]¶ Frequency, in Hz
-
field fspl:
float
[Required]¶ Free space path loss, in dB
-
field gt:
float
[Required]¶ Gain to noise temperature ratio, in dB/K
-
field interference_stats:
InterferenceStats
|None
= None (alias 'interferenceStats')¶ Interference data (optional, only available after analyzing interference)
-
field losses:
EnvironmentalLosses
[Required]¶ Environmental losses
-
field margin:
float
[Required]¶ Link margin, in dB
-
field noise_power:
float
[Required] (alias 'noisePower')¶ Noise power, in dBW
-
field rx_angle:
Angle
[Required] (alias 'rxAngle')¶ Angle between the RX antenna boresight vector and the receiver to transmitter vector, in degrees
-
field slant_range:
float
[Required] (alias 'slantRange')¶ Range between transmit and receive antennas, in km
-
field tx_angle:
Angle
[Required] (alias 'txAngle')¶ Angle between the TX antenna boresight vector and the transmitter to receiver vector, in degrees
- classmethod calculate(time, channel, link_type, target, observer, target_comms, observer_comms, losses, ensemble)¶
Calculate link statistics for a given time and link configuration.
- Parameters:
time (Time) – Time at which to calculate link statistics
channel (Channel) – Communication channel configuration
link_type ({"uplink", "downlink"}) – Type of link direction
target (Asset) – Target asset (typically spacecraft)
observer (Asset) – Observer asset (typically ground station)
target_comms (CommunicationSystem) – Target communication system
observer_comms (CommunicationSystem) – Observer communication system
losses (EnvironmentalLosses) – Environmental losses to apply
ensemble (Ensemble) – Ensemble containing propagated trajectories
- Returns:
Calculated link statistics including EIRP, G/T, margins, etc.
- Return type: