Communications

Antenna models

class missiontools.IsotropicAntenna(gain_dbi=0.0)[source]

Bases: AbstractAntenna

Antenna with constant gain in all directions.

Since the gain is direction-independent, no mounting information is needed.

Parameters:

gain_dbi (float) – Constant gain (dBi). Default 0.0.

Parameters:

gain_dbi (float)

gain(t, v, frame='eci', *, r_eci=None, v_eci=None)[source]

Return constant gain regardless of direction.

Parameters are accepted for interface compatibility but ignored.

Parameters:
  • t (ArrayLike)

  • v (ArrayLike)

  • frame (str)

  • r_eci (ArrayLike | None)

  • v_eci (ArrayLike | None)

Return type:

ndarray[tuple[Any, …], dtype[floating]]

property peak_gain_dbi: float

Peak gain (dBi), constant for isotropic antenna.

class missiontools.SymmetricAntenna(angles_deg, gains_dbi, **kwargs)[source]

Bases: AbstractAntenna

Axially symmetric antenna defined by a gain-vs-angle table.

The radiation pattern is symmetric about the boresight. Gain values are linearly interpolated between the tabulated points.

Parameters:
  • angles_deg (array_like, shape (K,)) – Off-boresight angles (deg). Must be monotonically increasing and span a range within [0, 180].

  • gains_dbi (array_like, shape (K,)) – Gain at each angle (dBi).

  • **kwargs – Mounting keyword arguments passed to AbstractAntenna.

Parameters:
  • angles_deg (npt.ArrayLike)

  • gains_dbi (npt.ArrayLike)

Notes

Gain values are linearly interpolated using numpy.interp, which clamps angles outside the tabulated range to the nearest endpoint value. If the table only covers [0°, 90°], angles beyond 90° will return the gain at 90° rather than a lower back-hemisphere value, which may overstate gain in that region. Extend the table to 180° (e.g. with a low back-lobe gain) to avoid this clamping.

property angles_deg: ndarray[tuple[Any, ...], dtype[floating]]

Tabulated off-boresight angles (deg).

property gains_dbi: ndarray[tuple[Any, ...], dtype[floating]]

Tabulated gain values (dBi).

classmethod from_isoflux(altitude_km, min_elev_deg=5.0, edge_gain=None, central_body_radius=6371008.7714, **kwargs)[source]

Isoflux antenna pattern for a fixed nadir-pointing orbit altitude.

Shapes the beam so that power flux density at the spherical body surface is constant across the coverage footprint. The gain increases from boresight (nadir) toward the edge of coverage to compensate for the increasing slant range.

Parameters:
  • altitude_km (float) – Orbital altitude above the body surface (km).

  • min_elev_deg (float, optional) – Minimum surface elevation angle defining the coverage edge (deg). Default 5.0°.

  • edge_gain (float or None, optional) – Desired gain at the edge of coverage (dBi). If None (default), the boresight gain is derived from the constraint that the total antenna directivity equals unity (0 dBi on average), assuming zero radiation beyond the coverage zone.

  • central_body_radius (float, optional) – Mean radius of the central body (m). Defaults to EARTH_MEAN_RADIUS.

  • **kwargs – Mounting keyword arguments forwarded to SymmetricAntenna.

Parameters:
Return type:

SymmetricAntenna

classmethod from_gaussian(gain_dbi, **kwargs)[source]

Ideal Gaussian beam pattern with automatically scaled beamwidth.

The half-power beamwidth is derived from the normalisation condition that total directivity equals gain_dbi (i.e. the Gaussian integral over the full sphere gives the correct peak value).

Parameters:
  • gain_dbi (float) – Peak gain at boresight (dBi).

  • **kwargs – Mounting keyword arguments forwarded to SymmetricAntenna.

Parameters:

gain_dbi (float)

Return type:

SymmetricAntenna

classmethod from_parabolic(diameter, frequency, eff=0.6, envelope=False, **kwargs)[source]

Uniformly illuminated parabolic reflector antenna pattern.

Parameters:
  • diameter (float) – Reflector diameter (m).

  • frequency (float) – Centre frequency (Hz).

  • eff (float, optional) – Antenna efficiency (dimensionless, 0 < eff ≤ 1). Accounts for spillover, blockage, surface errors, etc. Default 0.6.

  • envelope (bool, optional) – If False (default), the full pattern including sidelobes is returned. If True, the sidelobe envelope is used: the main lobe is exact and sidelobes beyond the first null are replaced by the asymptotic envelope f_env(u) = 8 / · u³) derived from the large-argument approximation J₁(u) ~ √(2/(πu)) · cos(u 3π/4).

  • **kwargs – Mounting keyword arguments forwarded to SymmetricAntenna.

Parameters:
Return type:

SymmetricAntenna