Orbis.RF (Orbis v0.9.1)

Copy Markdown View Source

RF link budget primitives.

Pure physics calculations with no system-specific assumptions. Combine these with Orbis geometry outputs (slant range, elevation) to build a complete link budget for your specific system.

# Get geometry from Orbis
{:ok, elements} = Orbis.Format.TLE.parse(line1, line2)
{:ok, look} = Orbis.look_angle(elements, datetime, station)

# Compute path loss
fspl = Orbis.RF.fspl(look.range_km, 1616.0)

# Your system parameters
eirp_dbw = 27.0 + 3.0 - 30.0  # tx power + antenna gain - 30
gt_dbk = -12.0                  # satellite G/T
other_losses = 3.0              # atmospheric, polarization, etc.

# Link margin
margin = Orbis.RF.link_margin(%{
  eirp_dbw: eirp_dbw,
  fspl_db: fspl,
  receiver_gt_dbk: gt_dbk,
  other_losses_db: other_losses,
  required_cn0_dbhz: 35.0
})

Summary

Functions

Carrier-to-noise-density ratio (C/N₀) in dB-Hz.

Antenna gain in dBi for a parabolic dish.

Effective Isotropic Radiated Power in dBW.

Free-space path loss in dB.

Link margin in dB.

Wavelength in meters for a given frequency.

Functions

cn0(eirp_dbw, fspl_db, receiver_gt_dbk, other_losses_db)

@spec cn0(float(), float(), float(), float()) :: float()

Carrier-to-noise-density ratio (C/N₀) in dB-Hz.

C/N = EIRP + G/T - FSPL + 228.6 - other_losses

The 228.6 is the Boltzmann constant expressed as a positive number in the conventional link budget equation.

Parameters

  • eirp_dbw — transmitter EIRP in dBW
  • fspl_db — free-space path loss in dB (from fspl/2)
  • receiver_gt_dbk — receiver figure of merit (G/T) in dB/K
  • other_losses_db — sum of all other losses (atmospheric, polarization, pointing, etc.)

Examples

iex> Orbis.RF.cn0(0.0, 165.0, -12.0, 3.0)
48.599999999999994

dish_gain(diameter_m, frequency_hz, efficiency \\ 0.55)

@spec dish_gain(float(), float(), float()) :: float()

Antenna gain in dBi for a parabolic dish.

G = 10·log(η · (π·D/λ)²)

Parameters

  • diameter_m — dish diameter in meters
  • frequency_hz — frequency in Hz
  • efficiency — aperture efficiency (default 0.55)

Examples

iex> Orbis.RF.dish_gain(1.0, 1616.0e6)
21.97903741903791

eirp(tx_power_dbm, tx_antenna_gain_dbi)

@spec eirp(float(), float()) :: float()

Effective Isotropic Radiated Power in dBW.

EIRP = P_tx(dBm) + G_tx(dBi) - 30

Examples

iex> Orbis.RF.eirp(27.0, 3.0)
0.0

fspl(distance_km, frequency_mhz)

@spec fspl(float(), float()) :: float()

Free-space path loss in dB.

This is the inverse square law — signal attenuation over distance in vacuum. The foundational calculation in any link budget.

FSPL = 32.45 + 20·log(f_MHz) + 20·log(d_km)

Parameters

  • distance_km — slant range to satellite in km
  • frequency_mhz — carrier frequency in MHz

Examples

iex> Orbis.RF.fspl(1200.0, 1616.0)
158.20245204972383

wavelength(frequency_hz)

@spec wavelength(float()) :: float()

Wavelength in meters for a given frequency.

Examples

iex> Orbis.RF.wavelength(1616.0e6)
0.1855151349009901