linkbudget.antennas¶
antennas ¶
antennas.py
Antenna gain / beamwidth / pointing / polarization models. The component
classes here return the same stage dict as the components in
link_container and drop straight into a LinkContainer.
ParabolicDish ¶
ParabolicDish(name: str = 'Parabolic dish', description: str = '', diameter: float = 1.0, frequency: float = 1000000000.0, efficiency: float = DEFAULT_APERTURE_EFFICIENCY, role: str | None = None)
Bases: Component
Parabolic (circular-aperture) antenna.
Gain and -3 dB beamwidth are derived from the physical diameter,
frequency and aperture efficiency. Like Gain, the component applies
its gain to both the signal and the noise. Pass role="rx" (or
"tx") so LinkContainer.summary() can pick out the receive antenna
when computing G/T.
Source code in linkbudget/antennas.py
efficiency
instance-attribute
¶
propagate_signal ¶
Apply the dish boresight gain to the signal and the noise.
Source code in linkbudget/antennas.py
BeamPointingLoss ¶
BeamPointingLoss(name: str = 'Beam pointing loss', description: str = '', pointing_error_deg: float = 0.0, half_power_beamwidth_deg: float | None = None, diameter: float | None = None, frequency: float | None = None)
Bases: Component
Pointing loss from a finite beamwidth and a pointing error.
Either give half_power_beamwidth_deg directly, or give an antenna
diameter and frequency to derive it from a parabolic-dish model.
Source code in linkbudget/antennas.py
pointing_error_deg
instance-attribute
¶
half_power_beamwidth_deg
instance-attribute
¶
propagate_signal ¶
Attenuate the signal by the pointing loss (noise unchanged).
Source code in linkbudget/antennas.py
PolarizationMismatchLoss ¶
PolarizationMismatchLoss(name: str = 'Polarization mismatch loss', description: str = '', axial_ratio_db_tx: float = 0.0, axial_ratio_db_rx: float = 0.0, tilt_angle_deg: float = 0.0)
Bases: Component
Loss from a polarization mismatch between the transmit and receive antennas, computed from their axial ratios (dB) and relative tilt.
Source code in linkbudget/antennas.py
propagate_signal ¶
Scale the signal by the polarization efficiency (noise unchanged).
Source code in linkbudget/antennas.py
AntennaNoiseTemperature ¶
AntennaNoiseTemperature(name: str = 'Antenna noise', description: str = '', sky_temp_k: float = 10.0, ground_temp_k: float = 290.0, ground_coupling: float = 0.0, radiation_efficiency: float = 1.0, physical_temp_k: float = 290.0, bandwidth: float = 1.0)
Bases: Component
Antenna noise-temperature floor: injects k * T_a * bandwidth watts
of noise, where T_a is composed from the sky brightness temperature,
ground pickup and the antenna's own ohmic loss (see antenna_noise_temp_k).
This is the receive-side counterpart to a ThermalNoise receiver floor:
put it right after the receive antenna to establish the noise entering the
front end. sky_temp_k is the atmospheric-emission brightness
temperature along the path (roughly T_phys * (1 - 10**(-A_atm_db/10))
plus the 2.7 K cosmic background, so a few K at high elevation in clear
air, tens of K through rain). With radiation_efficiency < 1 the ohmic
loss also attenuates the signal, exactly like a matched lossy stage.
Source code in linkbudget/antennas.py
ground_temp_k
instance-attribute
¶
ground_coupling
instance-attribute
¶
radiation_efficiency
instance-attribute
¶
radiation_efficiency = _validate.in_range('radiation_efficiency', radiation_efficiency, 0.0, 1.0, low_open=True)
physical_temp_k
instance-attribute
¶
propagate_signal ¶
Attenuate by the ohmic loss and add k * T_a * bandwidth.
Source code in linkbudget/antennas.py
dish_gain_dbi ¶
dish_gain_dbi(diameter_m: float, frequency_hz: float, efficiency: float = DEFAULT_APERTURE_EFFICIENCY) -> float
Boresight gain (dBi) of a circular-aperture (parabolic) antenna.
Source code in linkbudget/antennas.py
dish_half_power_beamwidth_deg ¶
dish_half_power_beamwidth_deg(diameter_m: float, frequency_hz: float, beamwidth_constant: float = BEAMWIDTH_CONSTANT_DEG) -> float
Approximate half-power (-3 dB) beamwidth (degrees) of a parabolic dish.
Source code in linkbudget/antennas.py
gaussian_beam_pointing_loss_db ¶
Main-lobe loss (dB) for a direction offset_deg off boresight of a
beam with the given -3 dB beamwidth, using the standard quadratic
(Gaussian) approximation L = 12 (offset / HPBW)**2.
Source code in linkbudget/antennas.py
antenna_noise_temp_k ¶
antenna_noise_temp_k(sky_temp_k: float, ground_temp_k: float = 290.0, ground_coupling: float = 0.0, radiation_efficiency: float = 1.0, physical_temp_k: float = 290.0) -> float
Antenna noise temperature (K) at the feed port.
The beam sees a scene that is a fraction ground_coupling warm ground
(ground_temp_k) and the rest cold sky (sky_temp_k -- the
atmospheric-emission brightness temperature seen along the path, which
already includes the ~2.7 K cosmic background)::
T_scene = (1 - ground_coupling) * sky_temp_k + ground_coupling * ground_temp_k
Ohmic / feed loss with radiation efficiency radiation_efficiency (0..1)
then attenuates that scene and adds its own physical-temperature noise::
T_a = radiation_efficiency * T_scene + (1 - radiation_efficiency) * physical_temp_k
Source code in linkbudget/antennas.py
polarization_efficiency ¶
polarization_efficiency(axial_ratio_db_1: float, axial_ratio_db_2: float, tilt_angle_deg: float = 0.0) -> float
Polarization matching efficiency (0..1) between two elliptically polarized antennas with the given axial ratios (dB) and relative tilt.
AR = 0 dB is perfectly circular; a large AR approaches linear.
Circular-to-circular aligned gives 1.0, circular-to-linear gives 0.5
(3 dB), crossed linears give 0.0.