Access windows and pointing
What you will accomplish
Per-satellite access intervals and the pointing series behind them, and a concrete reason to care about the step size you chose.
The pass that looks best in the summary is the one that will break an azimuth-elevation mount. This guide shows how to find that before the antenna does.
Prerequisites
- A constellation.
- A site to observe from.
Steps
Describe the site as a platform
A ground station is a platform with a fixed trajectory.
{
"id": "jfk-gate",
"name": "JFK ramp",
"min_elevation_deg": 10.0,
"trajectory": {
"fixed": { "lat_deg": 40.64, "lon_deg": -73.78, "alt_km": 0.004 }
}
}Run the access analysis
orbitforge platform-access \
--constellation ph1.json \
--platform fixed-jfk.json \
--duration-hours 7 --step-seconds 60Platform `JFK ramp`: 60 satellites analyzed over 7.0 h, 107 passes above 10 deg.
ph1-s0-p00-sat00: 5 passes, visible 7.8%, best peak elevation 45.9 deg
ph1-s0-p00-sat01: 5 passes, visible 7.8%, best peak elevation 40.0 deg
ph1-s0-p00-sat02: 4 passes, visible 6.2%, best peak elevation 44.4 degKeep the pointing series
The summary gives counts. The series gives geometry.
orbitforge platform-access \
--constellation ph1.json \
--platform fixed-jfk.json \
--duration-hours 7 --step-seconds 60 \
--include-series --output aer.jsonEach satellite gains an aer array of samples:
{
"time_s": 12360.0,
"azimuth_deg": 318.0,
"elevation_deg": 52.4,
"range_km": 691.0,
"range_rate_km_s": -4.044
}Reading a pass
The highest pass in that run peaks at 82.7 degrees, nearly overhead:
t_s az el rng_km rr_km_s
12180 310.3 11.5 1745.8 -6.554
12240 311.3 19.0 1358.5 -6.323
12300 313.0 30.7 993.7 -5.740
12360 318.0 52.4 691.0 -4.044
12420 55.1 82.7 563.4 0.227
12480 120.3 49.6 712.9 4.279
12540 124.7 29.2 1024.3 5.821
12600 126.3 17.9 1392.2 6.357Range falls to 563 km and range rate passes through zero at the peak, which is the definition of closest approach. A link budget evaluated here gets the best margin of the pass.
Now look at azimuth. Between the samples at 12360 and 12420 it moves from 318.0 to 55.1 degrees, which is 97 degrees in one minute.
The best pass is the hardest to track
A near-overhead pass demands the highest azimuth rate. An azimuth-elevation mount has to swing through nearly 180 degrees of azimuth as the satellite crosses the zenith, and the closer to overhead, the faster.
This is the mount keyhole. It is a property of the coordinate system, not of the satellite.
The 60-second series understates it badly. Re-run the same window at 1-second steps and measure the rate directly:
orbitforge platform-access \
--constellation ph1.json --platform fixed-jfk.json \
--duration-hours 7 --step-seconds 1 \
--include-series --output aer-1s.json| Step | Peak elevation | Pass duration | Peak azimuth rate |
|---|---|---|---|
| 60 s | 82.7 deg | 9.00 min | 1.6 deg/s |
| 1 s | 82.95 deg | 8.38 min | 6.03 deg/s |
The coarse step reports 1.6 deg/s. The truth is 6.03 deg/s, understated by a factor of 3.8, because a 60-second sample steps straight over the moment the rate peaks.
Both errors point the same way: the coarse run also makes the pass 37 seconds longer than it is, an optimistic 7 percent. Peak elevation rate is 0.632 deg/s, so elevation is not the problem. Azimuth is.
If your mount slews azimuth at 5 deg/s, this pass cannot be tracked, and the 60-second analysis says it is comfortable.
The practical responses are to impose a maximum elevation as well as a minimum, so near-zenith passes are simply not scheduled, or to use an azimuth-elevation-tilt or X-Y mount that puts its keyhole at the horizon where passes are already excluded.
Choosing the step
The step must resolve the fastest thing you intend to measure.
| You want | Step |
|---|---|
| Pass counts and rough duration | 60 s is adequate |
| Scheduling boundaries | 10 s or finer |
| Antenna slew rates | 1 s, and check the peak, not a mean |
| Doppler rate for acquisition | 1 s |
Access analysis at a coarse step fails in the flattering direction, so it will not look wrong.
The start epoch re-anchors a generated constellation
A natural next move is to zoom into an interesting pass by setting --start to
just before it and using a fine step. For a generated constellation, that gives
a different scenario.
# This does NOT zoom into the pass found above.
orbitforge platform-access --constellation ph1.json --platform fixed-jfk.json \
--start 2026-01-01T03:23:00Z --duration-hours 0.2 --step-seconds 1A constellation produced by orbitforge constellation carries no epoch.
Each satellite has an initial_orbit, and that state is applied at whatever
--start you pass.
Changing --start therefore re-anchors the entire pattern rather than selecting
a window within an existing timeline. The Earth has rotated to a different
place, so the geometry relative to your site is not the same.
The safe method is to keep --start fixed and re-run the whole window at a
finer step, which is what the table above does. The 7-hour, 60-satellite,
1-second run took about 12 seconds.
This does not apply to an imported fleet. A TLE import has a real epoch, and
there --start must match it. See Import a real
fleet.
Interpreting the summary
ph1-s0-p00-sat00: 5 passes, visible 7.8%, best peak elevation 45.9 deg- passes counts intervals above
min_elevation_deg, set on the platform, not on the command line. - visible is the fraction of the whole window, not of a pass.
- best peak elevation is the single highest pass. It says nothing about the other four.
The headline total counts every satellite-pass across the constellation, so 107 passes over 7 hours does not mean 107 usable contacts. It means 107 opportunities, most of them overlapping and most of them low.
Checklist
- Is the elevation mask on the platform the one you meant?
- Is the step fine enough for the quantity you are quoting?
- Did you check the peak azimuth rate for high passes?
- Do you need an upper elevation limit as well as a lower one?
- If the constellation is generated, is
--startthe anchor you intend?
Next steps
- Doppler and orbital elements for the frequency side of the same geometry.
- Moving-platform access when the site is not fixed.
platform-accessreference.
main (pre-release)