Antenna modeling and link budget calculation modules in Basilisk.
The communication modules model radio frequency links between spacecraft and ground stations. The simpleAntenna module models an individual antenna as a 2D Gaussian beam, and the linkBudget module computes end-to-end link performance between any two antenna modules.
Both simpleAntenna and linkBudget are currently in beta and may change in future releases.
Models a directional antenna mounted on a spacecraft or placed at a ground station. The radiation pattern is approximated as a 2D Gaussian beam parameterized by directivity and beam shape ratio. The module computes EIRP (for transmitting), G/T (for receiving), and noise power.Configuration parameters
Parameter
Unit
Description
Frequency
Hz
Operating frequency (30 MHz – 60 GHz)
Bandwidth
Hz
Channel bandwidth
Directivity
dB
Antenna directivity (must be > 9 dB)
Beam shape ratio k
—
Ratio of HPBW in azimuth to elevation (k = 1 for symmetric beam)
Transmit power P_Tx
W
RF transmit power
Receiver noise temperature T_E
K
Equivalent noise temperature of the receiver
Radiation efficiency η_r
—
Antenna radiation efficiency (0 < η ≤ 1)
Messages
Message
Type
Direction
Description
scStateInMsg
SCStatesMsgPayload
Input
Spacecraft state (space-based antennas)
groundStateInMsg
GroundStateMsgPayload
Input
Ground state (ground-based antennas)
antennaSetStateInMsg
AntennaStateMsgPayload
Input (optional)
Set antenna mode (Off/Rx/Tx/RxTx)
sunInMsg
SpicePlanetStateMsgPayload
Input (optional)
Sun position for sky noise calculation
sunEclipseInMsg
EclipseMsgPayload
Input (optional)
Eclipse state for solar noise contribution
antennaOutMsg
AntennaLogMsgPayload
Output
EIRP, G/T, noise power, and antenna state
from Basilisk.simulation import simpleAntennaantenna = simpleAntenna.SimpleAntenna()antenna.ModelTag = 'commAntenna'# Required parameters (S-band example)antenna.setAntennaName('CommAntenna')antenna.setAntennaFrequency(2.2e9) # [Hz]antenna.setAntennaBandwidth(5e6) # [Hz]antenna.setAntennaDirectivity_dB(20.0) # [dB] > 9 dBantenna.setAntennaHpbwRatio(1.0) # [-] symmetric beamantenna.setAntennaP_Tx(100.0) # [W]antenna.setAntennaEquivalentNoiseTemp(50.0) # [K]antenna.setAntennaRadEfficiency(0.55) # [-]# Connect to spacecraft state (space-based)antenna.scStateInMsg.subscribeTo(scObject.scStateOutMsg)# Optional: set antenna position/orientation offsetantenna.setAntennaPositionBodyFrame([0.5, 0.0, 0.0]) # [m]antenna.setAntennaOrientationBodyFrame([0.0, 0.0, 0.0]) # MRP# Set antenna mode directly or via input messageantenna.setAntennaState(simpleAntenna.AntennaTypes.ANTENNA_RXTX)# Optional: enable sky noise using Haslam mapantenna.setUseHaslamMap(True)antenna.sunInMsg.subscribeTo(gravFactory.spiceObject.planetStateOutMsgs[sunIdx])antenna.addPlanetToModel(gravFactory.spiceObject.planetStateOutMsgs[earthIdx])antenna.sunEclipseInMsg.subscribeTo(eclipseObject.eclipseOutMsgs[0])sim.AddModelToTask(taskName, antenna)
Computes the end-to-end radio link budget between two simpleAntenna modules. The primary output is the Carrier-to-Noise Ratio (CNR) for each receiving antenna.The link budget equation is: