Spacecraft Communication Link Budget (space-systems/subsystems/communication-link-budget)
Use when the task is a spacecraft communications link budget: Friis
free-space path loss, EIRP, received power, carrier to noise density
ratio, and the Eb/N0 margin at the data rate.
Units convention (stated once): power and EIRP in dBW, gains and
losses in dB, distance in meters, frequency in hertz, noise
temperature in kelvin, data rate in bits per second, C/N0 in dB-Hz,
Eb/N0 and margin in dB. No Watt/dBW mixing anywhere.
Domain quick reference
- Free-space path loss: L_fs = 20log10(4pi*d/lambda) dB, where
lambda = c/f with c = 299792458 m/s; doubling distance or frequency
adds about 6 dB of loss.
- EIRP (dBW) = transmit power (dBW) + transmit antenna gain (dB).
- Received power: Pr = EIRP + Gr - L_fs - L_other (dBW), where other
losses lump atmospheric, pointing, and polarization effects.
- Carrier to noise density: C/N0 = Pr + 228.6 - 10log10(T) dB-Hz
(228.6 is 10log10(1/k) with k = 1.380649e-23 J/K); doubling the
system noise temperature costs 3 dB.
- Eb/N0 = C/N0 - 10*log10(R); the required Eb/N0 comes from the
modulation and coding scheme, and the margin is the difference.
- ECSS-E-ST-50C (communications) sets the European baseline for space
data link budgets; ECSS standards are free to download from
https://ecss.nl/standards/ (name + paraphrase + link only).
Workflow
- Set the link geometry: slant distance (m) and carrier frequency
(Hz); compute free_space_path_loss.
- Combine transmit power (dBW) and antenna gain (dB) with
eirp_dbw.
- Add the receive gain and subtract path and other losses with
received_power_dbw.
- Convert received power to carrier to noise density with the
system noise temperature: cno_db_hz.
- Close the budget with link_margin at the data rate against the
required Eb/N0; treat ok False as a design failure, not a
rounding error.
Pitfalls
- Mixing watts and dBW in one chain; convert transmit power to dBW
once, then keep everything in dBW.
- Feeding kilometers or gigahertz into the Friis formula without
converting to meters and hertz.
- Dropping other losses (pointing, polarization, atmospheric) and
calling a paper link closed.
- Checking the margin at the wrong data rate; 10*log10(R) is the
per-bit penalty.
- Accepting a negative margin because the raw C/N0 still looks
large.
Behavior contract (gate 3)
The path loss, EIRP, received power, C/N0, and margin logic is
exercised by the gate 3 contract test:
scripts/test_link_budget_logic.py against scripts/link_budget_logic.py
(stdlib unittest, offline). Run from the repo root:
python3 skills/space-systems/subsystems/communication-link-budget/scripts/test_link_budget_logic.py
Compliance
- Standards referenced, not reproduced: ECSS standards are freely
downloadable (copyright ESA); summary-only per standards-map.yaml
and brief 06.
- compliance: STANDARDS-REF, gated: false.
1---2name: communication-link-budget3description: Use when you must build or check a spacecraft communications link budget: compute the free space path loss from distance and frequency, derive EIRP from transmit power and antenna gain, estimate received power and carrier to noise density ratio, and verify the link margin against the required energy per bit to noise ratio at the data rate. Produces path loss, EIRP, received power, C/N0, Eb/N0, and the margin verdict that closes the link. Trigger: link budget, path loss, eirp, carrier to noise density, eb n0, link margin, data rate, spacecraft communications.4license: Apache-2.05---67# Spacecraft Communication Link Budget (space-systems/subsystems/communication-link-budget)89Use when the task is a spacecraft communications link budget: Friis10free-space path loss, EIRP, received power, carrier to noise density11ratio, and the Eb/N0 margin at the data rate.1213Units convention (stated once): power and EIRP in dBW, gains and14losses in dB, distance in meters, frequency in hertz, noise15temperature in kelvin, data rate in bits per second, C/N0 in dB-Hz,16Eb/N0 and margin in dB. No Watt/dBW mixing anywhere.1718## Domain quick reference1920- Free-space path loss: L_fs = 20*log10(4*pi*d/lambda) dB, where21 lambda = c/f with c = 299792458 m/s; doubling distance or frequency22 adds about 6 dB of loss.23- EIRP (dBW) = transmit power (dBW) + transmit antenna gain (dB).24- Received power: Pr = EIRP + Gr - L_fs - L_other (dBW), where other25 losses lump atmospheric, pointing, and polarization effects.26- Carrier to noise density: C/N0 = Pr + 228.6 - 10*log10(T) dB-Hz27 (228.6 is 10*log10(1/k) with k = 1.380649e-23 J/K); doubling the28 system noise temperature costs 3 dB.29- Eb/N0 = C/N0 - 10*log10(R); the required Eb/N0 comes from the30 modulation and coding scheme, and the margin is the difference.31- ECSS-E-ST-50C (communications) sets the European baseline for space32 data link budgets; ECSS standards are free to download from33 https://ecss.nl/standards/ (name + paraphrase + link only).3435## Workflow36371. Set the link geometry: slant distance (m) and carrier frequency38 (Hz); compute free_space_path_loss.392. Combine transmit power (dBW) and antenna gain (dB) with40 eirp_dbw.413. Add the receive gain and subtract path and other losses with42 received_power_dbw.434. Convert received power to carrier to noise density with the44 system noise temperature: cno_db_hz.455. Close the budget with link_margin at the data rate against the46 required Eb/N0; treat ok False as a design failure, not a47 rounding error.4849## Pitfalls5051- Mixing watts and dBW in one chain; convert transmit power to dBW52 once, then keep everything in dBW.53- Feeding kilometers or gigahertz into the Friis formula without54 converting to meters and hertz.55- Dropping other losses (pointing, polarization, atmospheric) and56 calling a paper link closed.57- Checking the margin at the wrong data rate; 10*log10(R) is the58 per-bit penalty.59- Accepting a negative margin because the raw C/N0 still looks60 large.6162## Behavior contract (gate 3)6364The path loss, EIRP, received power, C/N0, and margin logic is65exercised by the gate 3 contract test:66scripts/test_link_budget_logic.py against scripts/link_budget_logic.py67(stdlib unittest, offline). Run from the repo root:68python3 skills/space-systems/subsystems/communication-link-budget/scripts/test_link_budget_logic.py6970## Compliance7172- Standards referenced, not reproduced: ECSS standards are freely73 downloadable (copyright ESA); summary-only per standards-map.yaml74 and brief 06.75- compliance: STANDARDS-REF, gated: false.