Skip to Content

orbitforge link

Synopsis

orbitforge link --constellation <PATH> --station <SPEC> [OPTIONS]

Description

Computes a link budget across every contact in the window and reports the margin and the availability actually achieved, against the availability you asked for.

Unlike coverage, which is pure geometry, this asks whether enough signal survives the path: free-space loss over the true slant range, plus the ITU-R atmosphere at the exceedance probability your availability target implies.

Options

ParameterTypeUnitDefaultRequiredDescription
--constellationpathn/a—YesPath to a constellation JSON file.
--stationstringn/a—YesGround station as `Name,lat_deg,lon_deg,alt_km`. Repeatable.
--frequency-ghzfloatGHz—YesCarrier frequency. Drives both free-space loss and atmospheric attenuation.
--availabilityfloatpercent—NoAvailability target, for example `99.9`. Sets the rain exceedance the margin is quoted at.
--climate-zonestringn/a—NoITU-R rain climate zone, for example `K`.
--r001floatmm/h—NoRain rate exceeded 0.01 percent of an average year. Overrides the climate zone.
--rain-ratefloatmm/h—NoExplicit rain rate, bypassing the statistical model.
--modcod-thresholdspathn/a—NoThreshold artifact from `waveform thresholds`, so margin is quoted against a measured decoder.
--modcodstringn/a—NoMODCOD to evaluate against, for example `qpsk-1/2`.
--startstringRFC 3339 UTC2026-01-01T00:00:00ZNoAnalysis start epoch.
--duration-hoursfloath6NoAnalysis window length.
--step-secondsfloats60NoTime step.
--outputpathn/a—NoWrite the full link report.

Worked examples

The same constellation and station at two frequencies. Nothing else changes.

20 GHz

orbitforge link \ --constellation demo.json \ --station "Madrid,40.43,-3.7,0.6" \ --frequency-ghz 20 --availability 99.9 --climate-zone K
Link analysis: 60 satellites, 1 stations, 6.0 h at 60 s (20.0 GHz). madrid: coverage 100.0%, 92 contacts, best margin 4.6 dB Madrid link availability: does not close at 95%

12 GHz

orbitforge link \ --constellation demo.json \ --station "Madrid,40.43,-3.7,0.6" \ --frequency-ghz 12 --availability 99.9 --climate-zone K
Link analysis: 60 satellites, 1 stations, 6.0 h at 60 s (12.0 GHz). madrid: coverage 100.0%, 92 contacts, best margin 14.1 dB Madrid link availability: 99.822%

What that comparison shows

Figure20 GHz12 GHz
Coverage100 percent100 percent
Contacts9292
Best margin4.6 dB14.1 dB
AvailabilityDoes not close at 95 percent99.822 percent

Geometry is identical: same coverage, same contact count. The frequency change alone moved the link from failing a 95 percent target to nearly meeting a 99.9 percent one, worth 9.5 dB of margin.

Free-space loss accounts for only about 4.4 dB of that, from the 20log⁡10(f)20\log_{10}(f) term. The remainder is atmospheric, and most of it is rain. Rain attenuation rises steeply with frequency: at 20 GHz in a wet climate zone it dominates the budget, while at 12 GHz it is a manageable term.

Coverage and link closure are different questions, and they disagree routinely. 100 percent coverage with a failing link is not a contradiction. It means the constraint is RF, not geometry, and adding satellites will not fix it. Lower frequency, more power, a bigger antenna, a higher elevation mask, or a relaxed availability target might.

Availability, not weather

Rain attenuation is a statistical distribution, so the meaningful question is not “how much rain loss” but “how much loss is exceeded for no more than pp percent of an average year”.

TargetPermitted outage per yearConsequence
99.0 percentAbout 88 hoursModest margin required
99.9 percentAbout 8.8 hoursSubstantially more at Ka band
99.99 percentAbout 53 minutesOften unreachable at Ka band without diversity

The reported availability is what the design achieves. The 12 GHz run achieves 99.822 percent against a 99.9 percent request, so it very nearly meets the target and is short by a small amount of margin.

Closing the loop with a measured threshold

By default, margin is quoted against a nominal threshold. Supplying a threshold artifact from waveform thresholds quotes it against a decoder that was actually measured:

orbitforge waveform thresholds --modcods qpsk-1/2 --output thr.json orbitforge link \ --constellation demo.json \ --station "Madrid,40.43,-3.7,0.6" \ --frequency-ghz 12 --availability 99.9 --climate-zone K \ --modcod-thresholds thr.json --modcod qpsk-1/2

That is the difference between margin against an assumption and margin against a demonstration.

Choosing the rain input

FlagUse
--climate-zoneStandard ITU-R zone. The usual choice
--r001A site-specific rain rate exceeded 0.01 percent of the year, from local statistics. Preferred where available
--rain-rateA fixed rate, bypassing the statistical model. For sensitivity studies, not for a quoted availability

--rain-rate produces a deterministic answer that cannot be interpreted as an availability, because it discards the distribution the availability is defined against.

See also

Question? Give us feedbackDocuments Varaha Constellation Designer main (pre-release)
Last updated on