Web Simulation 

 

 

 

 

2D Satellite Orbit, Doppler, Distance, and Elevation 

This tutorial shows a satellite moving around Earth in a 2D orbital plane and an observer on Earth. The purpose is to visualize how the satellite range, elevation angle, and Doppler shift change during a pass.

The model uses a circular orbit. The satellite moves with Keplerian mean motion, while the observer can either rotate with Earth or stay fixed in the inertial display frame. At each time step, the simulator computes the line-of-sight vector from observer to satellite.

Mathematical Foundation

For a circular orbit with Earth radius Re and satellite altitude h, the orbital radius is:

r = Re + h

The angular rate of the satellite is found from the gravitational parameter mu:

n = sqrt(mu / r^3)

In the 2D plane, the satellite and observer positions are represented as vectors from Earth's center. When Earth rotation is enabled, the observer angle advances with Earth's angular rate and the observer's tangential velocity contributes to Doppler.

For the GEO preset, Earth rotation is enabled and the satellite starts at the observer longitude. The GEO preset also locks the satellite angular rate to Earth's rotation rate, so distance, elevation, and Doppler should remain constant in this simplified geostationary case.

Range and Elevation

The range is the distance between satellite and observer:

range = |satellite_position - observer_position|

The elevation angle is measured above the observer's local horizon. A positive elevation means the satellite is above the local horizon. A negative elevation means it is geometrically below the horizon in this 2D model.

Pass Duration

This section walks through how long the satellite is visible during a single pass for each of the four presets. The general formula is the same in every case; only the orbit radius changes, which then changes the horizon half-angle, mean motion, and resulting pass time.

LEO Preset (550 km, S-band)

A common rule of thumb is that an LEO satellite at around 500 km altitude stays visible for about 10 minutes during a high overhead pass. That number comes directly from the geometry of a circular orbit, and you can derive it without leaving this page.

The satellite is geometrically above the local horizon when the angle between its position vector and the observer's position vector is less than the horizon half-angle:

cos(theta_half) = Re / r  →  theta_half = arccos(Re / r)

For an overhead (zenith) pass with a stationary observer, the satellite traverses a full arc of 2 · theta_half from rise to set. Dividing by the satellite's angular rate gives the pass time:

t_pass(overhead) = 2 · arccos(Re / r) / sqrt(mu / r^3)

Plugging in numbers for h = 500 km, so r = 6871 km:

Quantity

Value

Orbit radius r

6871 km

Mean motion n = sqrt(mu/r^3)

1.109 × 10-3 rad/s

Orbital period T = 2π/n

94.5 min

Horizon half-angle arccos(Re/r)

22.0°

Above-horizon arc (overhead pass)

44.0°

Geometric pass time, overhead

~11.5 min

So the "~10 minute" rule of thumb is correct as the upper bound for a good high-elevation pass at 500 km. In practice, two effects shorten what you actually observe:

  • Off-zenith geometry. Most passes do not cross directly overhead. The arc length above the horizon depends on the closest-approach elevation (CPA). A low grazing pass can be only a few degrees of arc, giving a 1–3 minute visibility.
  • Practical visibility threshold. Real observers usually need elevation greater than about 10 degrees due to atmospheric extinction, buildings, refraction noise, and link-budget constraints. Using a 10-degree mask instead of a 0-degree horizon trims roughly 1–2 minutes off the geometric pass time.

Combining these effects gives the following ranges:

Pass type

Typical duration

Overhead pass, geometric horizon (0°)

~11.5 min

Overhead pass, 10° elevation mask

~8–9 min

Typical random pass with 10° mask

~4–7 min

Low grazing pass

~1–3 min

For comparison with real spacecraft in the same altitude regime:

  • ISS at ~400 km: well-known maximum visible pass of ~10 minutes at zenith.
  • Starlink at ~550 km: high-elevation passes around 6–10 minutes, typical ~4–6 minutes.
What the simulator reports for the LEO preset: the pass window in the readout uses the geometric horizon (elevation ≥ 0), so for the default LEO preset at 550 km you should see a pass of about 12 minutes. That matches the theoretical ceiling, not the practical observed average. If you want to approximate the operational view, mentally subtract a couple of minutes for a 10° mask.
MEO Preset (20 200 km, GPS-like)

The MEO preset places the satellite at 20 200 km altitude with a 1.575 GHz carrier, matching the GPS L1 navigation band. The same geometry formula applies, but the much larger orbit radius shifts every number dramatically:

Quantity

Value

Orbit radius r = Re + h

26 571 km

Mean motion n = sqrt(mu/r^3)

1.458 × 10-4 rad/s

Orbital period T = 2π/n

11.97 hr

Horizon half-angle arccos(Re/r)

76.1°

Above-horizon arc (overhead)

152.3°

Geometric pass, stationary observer

~5.1 hr

Geometric pass, with Earth rotation

~10.1 hr

Two effects flip the intuition compared to LEO:

  • Much larger horizon cone. Because the satellite is six times farther out, it can stay in line of sight from anywhere along ~152° of arc — almost half its orbit.
  • Earth rotation matters now. The satellite's angular rate (1.46×10-4 rad/s) is only twice Earth's rotation rate (7.29×10-5), so toggling the Earth-rotation switch nearly doubles the visible pass length. At LEO the same toggle only adds ~7% because the satellite moves so much faster than the surface.

Real GPS satellites sit at this altitude but in 55°-inclined orbits with two-sidereal-day repeat ground tracks. A mid-latitude observer typically sees a specific GPS satellite for 4–5 hours per pass, with 8–12 satellites in view at any time. This 2D equatorial model shows the geometric maximum rather than the inclined-orbit average.

What the simulator reports for the MEO preset: with Earth rotation off (the default), expect ~5 hours of geometric pass; toggle the Earth-rotation checkbox on and it grows to ~10 hours. The Doppler at L1 frequency reaches roughly ±5 kHz at horizon, much smaller than LEO because the range rate is lower (peak range rate n · Re ≈ 0.93 km/s for MEO vs 7 km/s for LEO).
GEO Preset (35 786 km, geostationary)

The GEO preset matches the geostationary orbit at 35 786 km altitude with a 12 GHz Ku-band carrier. Earth rotation is enabled and the satellite angular rate is locked to Earth's sidereal rotation, so the satellite hovers above a fixed longitude. The concept of "pass duration" doesn't apply in the usual sense.

Quantity

Value

Orbit radius r = Re + h

42 157 km

Period (locked to Earth)

23.93 hr (sidereal day)

Horizon half-angle arccos(Re/r)

81.3°

Footprint radius on Earth surface

~9 000 km

Earth surface area covered

~42%

Pass duration

continuous (if within footprint)

Either the observer is within the satellite's coverage footprint and sees it continuously, or they are outside the footprint and never see it. Three GEO satellites placed 120° apart in longitude cover essentially the entire Earth surface between latitudes ±81° — the geometric basis of commercial GEO communications (Inmarsat, Intelsat, DirecTV) and weather observation (GOES, Meteosat, Himawari).

What the simulator reports for the GEO preset: the readout shows stationary above horizon and the elevation, distance, and Doppler stay flat. Doppler is essentially zero because the satellite has no relative motion along the line of sight in the locked configuration.
Fast Low LEO Preset (300 km, Ku-band)

The "Fast Low LEO" preset places the satellite at 300 km altitude with a 12 GHz Ku-band carrier — below typical LEO (~500–600 km) and below the ISS altitude (~400 km), in the regime where atmospheric drag is significant and orbits decay quickly without active station-keeping.

Quantity

Value

Orbit radius r = Re + h

6 671 km

Mean motion n = sqrt(mu/r^3)

1.159 × 10-3 rad/s

Orbital period T = 2π/n

90.4 min

Orbital speed v = r · n

7.73 km/s

Horizon half-angle arccos(Re/r)

17.2°

Above-horizon arc (overhead)

34.4°

Geometric pass, overhead

~8.6 min

Two distinctive effects compared to the 550 km LEO preset:

  • Shorter passes. The horizon half-angle drops from 22.9° (at 550 km) to 17.2° (at 300 km) because the satellite hides behind Earth sooner. The maximum overhead pass shrinks from ~12 min to ~8.6 min.
  • Higher Doppler. At 12 GHz instead of 2.2 GHz, the Doppler scales by 12/2.2 ≈ 5.5× for the same range rate. Peak Doppler reaches roughly ±300 kHz at horizon, vs ±55 kHz for the S-band LEO case.
Why "fast"? Being closer to Earth means a smaller horizon angle (shorter passes) and a higher orbital speed (~7.73 km/s vs 7.59 km/s at 550 km). Combined with the higher carrier frequency, this preset produces the steepest Doppler curve of the four presets — useful for visualizing the tracking requirements of very-low-LEO mega-constellations.

Doppler Shift

Doppler shift depends on the line-of-sight range rate. If the satellite is approaching, the range rate is negative and the received frequency shifts upward. If it is receding, the received frequency shifts downward.

Doppler = -(range_rate / c) * carrier_frequency

The Doppler plot uses kHz so the frequency shift is easy to read for common L-band, S-band, Ku-band, and mmWave examples.

Simulation

The interactive simulator is below. Pick a preset (LEO, MEO, GEO, Fast Low LEO) to see how altitude, carrier frequency, and Earth rotation shape the distance, elevation, and Doppler curves for one pass. Drag the sliders or use Run / Step Fwd to watch the satellite move through the pass window.

550 km
2.20 GHz
-70 deg
0 deg
Off
auto
30 s
120x

Orbit view: Earth, observer, satellite, and line of sight

Green line means satellite is above the observer horizon; red line means below horizon.

Current values

 

Usage

  1. Choose a preset: LEO, MEO, GEO, and fast low LEO presets set altitude, carrier, satellite geometry, step size, and animation speed. The GEO preset also enables Earth rotation and Earth-synchronous motion to show geostationary behavior.
  2. Run the animation: Use Run/Stop to animate. Step Fwd and Step Bwd stop animation and move by one time step.
  3. Watch the orbit: The yellow satellite moves around Earth. The white marker is the observer. The dashed line is the line of sight.
  4. Toggle Earth rotation: When enabled, the observer rotates with Earth and the observer velocity is included in Doppler. When disabled, the observer marker remains fixed in the orbit view.
  5. Read the plots: The x-axis starts when the satellite rises above the observer horizon and stops when it falls below the horizon. The white vertical cursor marks the current simulation time.

Parameters

  • Altitude: Circular orbit altitude above Earth's surface. The Earth drawing uses a fixed scale, so changing altitude expands or shrinks only the orbit radius.
  • Carrier: Radio carrier frequency used for Doppler shift calculation.
  • Sat start: Initial satellite angular position in the 2D orbital plane.
  • Observer lon: Initial observer angle on the Earth cross-section.
  • Earth rotation: Enables or disables Earth rotation for the observer position and observer velocity in the Doppler calculation.
  • Pass window: Automatically computed time window from horizon rise to horizon set. If the satellite never crosses the horizon in the scanned cycle, the simulator falls back to the nearest useful scan window and reports that mode in the readout.
  • Step size: Time increment used by Step Fwd and Step Bwd. The plot uses this step unless a long span needs a coarser drawing grid for responsiveness.
  • Run speed: Ratio of simulated seconds per real second during animation.

Limitations

This is a 2D educational model. It does not include inclined 3D orbits, Earth's oblateness, atmospheric drag, terrain blockage, antenna patterns, refraction, or orbital perturbations. It is intended to show the core relationship among orbital motion, observer geometry, distance, elevation, and Doppler shift.