Web Simulation 

 

 

 

GPS Constellation and Receiver Geometry 

A GPS receiver measures signal travel times from several satellites to estimate its position and clock offset. This simulator shows all 32 satellite records in a bundled NAVCEN almanac, their motion around Earth, and which satellites can participate at a chosen receiver location.

The 3D constellation, world map, local sky view, and satellite table share the same simulation time. Green satellites are healthy and above the elevation mask; they are all used in the simulated geometry calculation.

Mathematical Foundation

GPS satellites orbit at roughly 20,200 km altitude with approximately 55° inclination. The orbital period is nearly 12 hours. The baseline constellation has six orbital planes; the operational constellation includes additional satellites. See GPS.gov: Space Segment.

This simulator uses each satellite's individual YUMA almanac elements. It solves Kepler's equation to obtain the satellite position rather than assigning every satellite an identical circular orbit.

a = (sqrtA)2,   n = √(μ / a3)
M = M0 + n Δt,   E − e sin E = M
r = a (1 − e cos E)

Here a is the semimajor axis, e is eccentricity, M is mean anomaly, and E is eccentric anomaly. With a = 26,560 km, the period 2π/n is about 11.97 hours. The orbital inclination, argument of perigee, and ascending node rotate this position into three dimensions.

Ω(t) = Ω0 + (Ω̇ − ωE) Δt − ωE toa

The node expression includes Earth rotation. Both views use Earth-fixed coordinates, so the receiver stays on the same place on the map while satellites move overhead. The orbit curves in 3D are instantaneous orbital paths in that rotating coordinate frame.

Visibility and Position Geometry

d = satellite position − receiver position
range = |d|,   elevation = asin((d · up) / |d|)

The receiver is on a spherical Earth of radius 6,371 km. A satellite participates when its almanac health is zero and its elevation reaches the selected mask. A satellite below zero elevation is blocked by Earth; one between zero and the mask is above the horizon but excluded.

ρi = |si − x| + c δt
Q = (HTH)−1,   PDOP = √(Qxx + Qyy + Qzz)

A receiver normally needs at least four independent measurements for three position coordinates and its clock offset. The geometry matrix H contains one line-of-sight direction and a clock column per participating satellite. PDOP measures how this geometry amplifies equal, independent range errors; smaller is better. It is dimensionless and is not a position error in meters.

Worked Position Example

How do the numbers in the almanac become a position? Start with G31 at the snapshot time and a receiver in Toronto. The simulation offset is zero, so the orbital calculation uses the G31 reference anomaly without a time increment.

Which values come from the navigation message?

YUMA is the name of a readable GPS almanac file format, not an acronym. LNAV (Legacy Navigation) is navigation data that GPS satellites broadcast as bits. This page reads a downloaded YUMA file; it does not decode LNAV radio bits. The table below separates corresponding LNAV fields from values supplied by the simulation or calculated afterward. Broadcast fields need decoding and scaling before they have the decimal units shown here.

Values in this example

Origin

Direct field or calculation?

e, toa, sqrtA, OmegaDot, Omega0, omega, M0

LNAV almanac pages in subframes 4 and 5; this page uses their YUMA snapshot values.

Broadcast parameters after decoding and unit conversion. The navigation message does not send their printed decimal strings.

G31 inclination i = 0.9552589719 rad

YUMA gives the full inclination. LNAV almanac sends an offset deltaI from 0.30 semicircles.

Directly available in YUMA; calculated from deltaI when starting with LNAV bits.

Satellite identity and time

The received PRN code identifies the transmitting satellite. LNAV carries a page SV ID, week information, and HOW TOW.

Decode the message and signal timing. The example's t = 0 s is a chosen offset from the YUMA applicability time.

mu, omegaE, c, RE

Model constants. RE = 6371 km is this simulator's spherical Earth assumption.

Supplied by the model, not read from this satellite's navigation message.

Toronto latitude/longitude and 250 microsecond clock bias

Receiver controls and a chosen clock error for the worked fix.

Inputs to this example, not navigation-message fields.

Four pseudoranges

A real receiver measures signal timing. This simulator generates noiseless values from the chosen receiver location.

Measurements in real GPS; synthetic calculations here. They are not sent as navigation-message fields.

a, n, M, E, v, u, r, Omega, satellite XYZ, receiver XYZ, range, and solved clock bias

Orbit propagation, coordinate conversion, and the receiver least-squares solve.

Calculated from the inputs above. Satellite and receiver XYZ are not broadcast as ready-made coordinates.

iYUMA = π · (0.30 + deltaILNAV) rad

The YUMA record also has health, af0, and af1 fields related to broadcast almanac data. This worked orbit calculation does not apply those clock coefficients. For a more accurate satellite position, a receiver uses broadcast ephemeris from subframes 2 and 3 rather than this coarse almanac. See ICD-GPS-240D and IS-GPS-200N.

Input

Plugged-in value

G31 almanac

sqrtA = 5153.606445 m1/2, e = 0.01110029221, i = 0.9552589719 rad, M0 = 0.3127549389 rad

Orbit orientation

Omega0 = 2.716851125 rad, OmegaDot = -7.760323249e-9 rad/s, omega = 1.012188385 rad, toa = 589824 s

Receiver and constants

lat = 43.65 deg, lon = -79.38 deg, t = 0 s, mu = 3.986005e14 m3/s2, omegaE = 7.2921151467e-5 rad/s, RE = 6371 km

First compute the semimajor axis and mean motion. Solve Kepler's equation for eccentric anomaly E. Then convert E to true anomaly v, add the argument of perigee, and rotate the orbit into Earth-fixed coordinates.

a = (5153.606445)2 = 26,559,659.390 m
n = √(3.986005e14 / a3) = 0.000145859650225 rad/s
M = 0.3127549389 + n · 0 = 0.3127549389 rad
E − 0.01110029221 sin(E) = M → E = 0.316206725680 rad
v = atan2(√(1 − e2) sin(E), cos(E) − e) = 0.319676921107 rad
u = v + 1.012188385 = 1.331865306107 rad
r = a(1 − e cos(E)) / 1000 = 26,279.456047 km
Ω = 2.716851125 + (−7.760323249e-9 − 7.2921151467e-5)·0
    − 7.2921151467e-5 · 589824 = −40.293794118 rad
xs = r [cos(Ω)cos(u) − sin(Ω)sin(u)cos(i)]
ys = r [sin(Ω)cos(u) + cos(Ω)sin(u)cos(i)]
zs = r sin(u)sin(i)

These equations give G31 an Earth-fixed position of (2354.700, -15826.605, 20846.673) km. The large unwrapped node angle is valid because sine and cosine repeat every 2*pi.

The receiver position comes from the chosen latitude and longitude. This step converts an input location to Earth-fixed coordinates; it does not solve an unknown receiver position from measurements.

xr = 6371 cos(43.65°) cos(−79.38°) = 849.572 km
yr = 6371 cos(43.65°) sin(−79.38°) = −4530.901 km
zr = 6371 sin(43.65°) = 4397.591 km
range = |s − r| = 20,010.763 km

How would a receiver obtain that location from signals? The simulator has no measured pseudoranges. For this example it creates four ideal measurements from the Toronto input and adds a receiver clock bias of 0.00025 s. The speed of light is 299792.458 km/s, so every pseudorange exceeds its geometric range by 74.9481145 km.

PRN

Satellite ECEF (x, y, z), km

Range / synthetic pseudorange, km

G31

(2354.700, −15826.605, 20846.673)

20010.763 / 20085.711

G26

(4479.288, −24145.660, 9317.121)

20545.447 / 20620.395

G28

(12278.368, −10167.228, 21248.626)

21126.830 / 21201.779

G03

(−11578.838, −15183.923, 18290.413)

21470.043 / 21544.992

Now treat receiver ECEF x and clock bias distance b as unknowns. For each satellite, the predicted pseudorange is its distance to x plus b. The solver starts at the Earth's center with zero bias and updates all four unknowns by least squares.

rhoi = |si − x| + b,   b = c · deltaT
Hi = [(x − si) / |x − si|, 1]
(HTH) Delta = HT(rhomeasured − rhopredicted)

With the four values above, six updates give x = (849.572, -4530.901, 4397.591) km and b = 74.9481145 km, or deltaT = 250 microseconds. It recovers the Toronto input because the example measurements were generated from that same input without noise.

At the default settings, the live calculation panel below shows every input, intermediate value, satellite coordinate, and pseudorange used here. Select another PRN, move the receiver, or change time to follow the same calculation with new numbers.

Accuracy boundary: these are positions from the bundled YUMA almanac and spherical Earth model. A receiver needs broadcast ephemeris, satellite clock correction, and measured signal timing for a positioning solution. The simulator has none of those measurements, so it cannot report an exact physical satellite or receiver position. See IS-GPS-200N.
Snapshot, not live tracking: all 32 records come from the NAVCEN YUMA almanac downloaded September 17, 2026. Its time of applicability is September 19, 2026 at 19:50:24 GPS time (full week 2436). A future applicability time is possible. The displayed clock is GPS time, not UTC. Satellite health and membership remain those of the snapshot.

Simulation

Choose a receiver position, then press Run. Inspect a satellite by clicking its marker or table row. The magenta selection can be inspected even when it does not participate.

10 deg
0.00 h


32 almanac satellites · snapshot propagation · Earth-fixed views

● Participating● Excluded⊕ Receiver● Inspected
3D constellation · drag to rotate / scroll to zoom
2D world map / satellite subpoints
Receiver sky / elevation
Participating / all--
Above horizon--
PDOP--
Geometry status--
PRNStatusElevationAzimuthRange km

Dashed amber: approximate mask boundary. Magenta map curve: inspected satellite's next 2 hours. All satellites appear on the map and in the table; Earth can hide far-side satellites in 3D.

Navigation data for every satellite

The live columns follow an idealized GPS L1 C/A LNAV schedule: each subframe lasts 6 seconds, and almanac pages cycle through 25 frames. HOW TOW is the count carried in the handover word for the next subframe. Each satellite transmits its own clock and ephemeris subframes, then constellation data. The YUMA fields to the right are a fixed snapshot; the simulator has no precise ephemeris or actual transmitted bits. See IS-GPS-200N.

PRNGPS TOW (s)SubframeFrame / 25HOW TOWOn air now (model)HealthEccentricityTime of applicability (s)Inclination (rad)Node rate (rad/s)√A (m1/2)Right ascension (rad)Argument of perigee (rad)Mean anomaly (rad)Clock bias af0 (s)Clock drift af1 (s/s)YUMA weekSnapshot GPS week

Usage

  1. Select a receiver preset or enter latitude and longitude. North and east are positive. Clicking an empty place on the map also moves the receiver.
  2. Press Run to advance time. Satellites, orbit orientation, receiver links, map positions, sky positions, membership, range, and PDOP update together. At +24 hours, time wraps to the starting epoch and playback continues. Press Stop to pause.
  3. Use Step Fwd or Step Bwd for the selected time increment. Either button first stops animation. The time slider also pauses playback; Reset time returns to the almanac epoch while retaining receiver settings.
  4. Drag the 3D view to rotate it. Use the upper-left buttons to zoom or switch to isometric, polar, front, and side views. Toggle Orbits or Links to reduce clutter.
  5. Choose a PRN from the Satellite dropdown, click a satellite in 3D, click a dot on the map, or click a PRN in a table to inspect it. These selections stay synchronized. Its marker turns magenta; its participation status remains explicit in the table and detail strip.
  6. Read the live position calculation at the end of the simulation. It lists the inspected satellite's almanac inputs and Earth-fixed coordinates, then shows four synthetic pseudoranges and the recovered receiver coordinates.
  7. Raise the elevation mask and watch satellites leave the participating set. Fewer than four usable satellites, or singular geometry, produces No 3D fix and no PDOP value.

Parameters

Control

Range

Effect

Latitude / longitude

−90 to 90° / −180 to 180°

Receiver location on the spherical Earth.

Elevation mask

0 to 60°

Minimum elevation of a participating satellite.

Run speed

60 to 3,600×

Simulated seconds per real second.

Step size

1, 5, 15, or 60 minutes

Forward or backward time increment.

Time offset

−24 to +24 hours

Offset from almanac applicability. At +24 hours, playback wraps to 0 hours and continues automatically. Forward steps also wrap; backward steps stop at −24 hours.

Limitations

  • This is an educational almanac propagation, not precise broadcast ephemeris or a live satellite health service. It shows every record in the bundled snapshot, not retired satellites or a continuously refreshed fleet.
  • The receiver position is an input. The simulator evaluates measurement geometry but does not acquire signals or solve a measured position. All healthy satellites above the mask participate; actual receivers may select or weight measurements differently.
  • The worked receiver fix uses synthetic, noiseless pseudoranges generated from the chosen input location and a 250 microsecond clock bias. Recovering that input does not establish real positioning accuracy.
  • Earth is spherical, the receiver is at sea level, and there is no terrain, building blockage, atmospheric delay, multipath, clock correction, signal transit rotation correction, or measurement noise. PDOP alone does not establish real positioning accuracy.
  • Satellite markers and the receiver marker are enlarged. The map is equirectangular; the dashed coverage boundary uses a representative 26,560 km orbital radius. Exact participation uses each satellite's propagated position.

Land outlines: Natural Earth, public domain. All simulation libraries and data are stored locally in GPS/.