Skip to content

rate_distance_calculator

cosmica.comm_link.rate_distance_calculator

__all__ module-attribute

__all__ = ['SatToSatBinaryCommLinkCalculatorWithRateCalc']

SatToSatBinaryCommLinkCalculatorWithRateCalc

SatToSatBinaryCommLinkCalculatorWithRateCalc(
    *,
    inter_satellite_link_capacity: float,
    max_inter_satellite_distance: float = float("inf"),
    lowest_altitude: float = 0.0,
    max_relative_angular_velocity: float = float("inf"),
    sun_exclusion_angle: float = 0.0,
    lct_power: float = 1.0,
    available_link_capacity: float = 1000000000.0,
    lna_gain: float,
    noise_figure: float = 4
)

Bases: MemorylessCommLinkCalculator[Satellite, Satellite]

Calculate satellite-to-satellite communication link performance for each edge in a network.

The link performance is calculated as a binary value, i.e., 1 if the link is available and 0 otherwise.

Source code in src/cosmica/comm_link/rate_distance_calculator.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
def __init__(
    self,
    *,
    inter_satellite_link_capacity: float,
    max_inter_satellite_distance: float = float("inf"),
    lowest_altitude: float = 0.0,
    max_relative_angular_velocity: float = float("inf"),
    sun_exclusion_angle: float = 0.0,
    lct_power: float = 1.0,
    available_link_capacity: float = 1e9,
    lna_gain: float,
    noise_figure: float = 4,
) -> None:
    self.max_inter_satellite_distance = max_inter_satellite_distance
    self.inter_satellite_link_capacity = inter_satellite_link_capacity
    self.lowest_altitude = lowest_altitude
    self.max_relative_angular_velocity = max_relative_angular_velocity
    self.sun_exclusion_angle = sun_exclusion_angle
    self.lct_p0 = lct_power
    self.link_capacity = available_link_capacity
    self.lna_gain = lna_gain
    self.noise_figure = noise_figure
inter_satellite_link_capacity = (
    inter_satellite_link_capacity
)

lct_p0 instance-attribute

lct_p0 = lct_power
link_capacity = available_link_capacity

lna_gain instance-attribute

lna_gain = lna_gain

lowest_altitude instance-attribute

lowest_altitude = lowest_altitude

max_inter_satellite_distance instance-attribute

max_inter_satellite_distance = max_inter_satellite_distance

max_relative_angular_velocity instance-attribute

max_relative_angular_velocity = (
    max_relative_angular_velocity
)

noise_figure instance-attribute

noise_figure = noise_figure

sun_exclusion_angle instance-attribute

sun_exclusion_angle = sun_exclusion_angle

calc

calc(
    edges: Collection[tuple[Satellite, Satellite]],
    *,
    dynamics_data: DynamicsData,
    rng: Generator
) -> dict[tuple[Satellite, Satellite], CommLinkPerformance]
Source code in src/cosmica/comm_link/rate_distance_calculator.py
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def calc(
    self,
    edges: Collection[tuple[Satellite, Satellite]],
    *,
    dynamics_data: DynamicsData,
    rng: np.random.Generator,  # noqa: ARG002 For interface compatibility
) -> dict[tuple[Satellite, Satellite], CommLinkPerformance]:
    return {
        edge: self._calc_satellite_to_satellite(
            positions_eci=(
                dynamics_data.satellite_position_eci[edge[0]],
                dynamics_data.satellite_position_eci[edge[1]],
            ),
            velocities_eci=(
                dynamics_data.satellite_velocity_eci[edge[0]],
                dynamics_data.satellite_velocity_eci[edge[1]],
            ),
            attitude_angular_velocities_eci=(
                dynamics_data.satellite_attitude_angular_velocity_eci[edge[0]],
                dynamics_data.satellite_attitude_angular_velocity_eci[edge[1]],
            ),
            sun_direction_eci=dynamics_data.sun_direction_eci,
        )
        for edge in edges
    }