Why an Accurate GPS Fix needs Four Satellites

Global Positioning System (GPS) receivers determine their position by measuring how long it takes signals from satellites to reach the receiver.
Each satellite continuously broadcasts its precise time and orbital position.
When a receiver captures a signal, it multiplies the time-of-flight by the speed of light to compute a pseudorange (an estimated distance).

Why not just three satellites?

With three satellites, in theory, you can trilaterate a position in 3D space:
each measured distance defines a sphere around a satellite, and the three spheres intersect at up to two points.
Usually, one point is far out in space, so it can be discarded.

Illustration of trilateration with three circles: each circle has a known center (C1, C2, C3) and radius (r1, r2, r3). The dotted lines represent the radii from each center to the true intersection point P, where all three circles meet.

The problem: receiver clock error

Your GPS receiver does not have an atomic clock like the satellites do.
Any tiny time offset in the receiver’s clock causes a huge error in the calculated distances — at the speed of light, a 1 µs error means a ~300 m position error.

This clock error is an extra unknown in the equations, meaning you now have 4 unknowns:

1. \( x \) — your east-west position
2. \( y \) — your north-south position
3. \( z \) — your altitude
4. \( d_0 \) — the clock bias (in distance units)

Each satellite gives you one equation, so you need **four satellites** to solve for all four unknowns.

The math

Let \( s_i = (s_{ix}, s_{iy}, s_{iz}) \) be the known position of satellite \( i \)
and \( x = (x, y, z) \) be the unknown receiver position.
Let \( \rho_i \) be the measured pseudorange to satellite \( i \),
and \( d_0 \) be the unknown clock bias in meters.

For each satellite:

\[
\| x – s_i \| = \rho_i – d_0
\]

Where:

\[
\| x – s_i \| \;=\; \sqrt{(x – s_{ix})^2 + (y – s_{iy})^2 + (z – s_{iz})^2}.
\]

Squaring both sides:

\[
(x – s_{ix})^2 + (y – s_{iy})^2 + (z – s_{iz})^2 = (\rho_i – d_0)^2
\]

This gives four nonlinear equations for four unknowns \((x, y, z, d_0)\):

\[
(x – s_{1x})^2 + (y – s_{1y})^2 + (z – s_{1z})^2 = (\rho_1 – d_0)^2
\]

\[
(x – s_{2x})^2 + (y – s_{2y})^2 + (z – s_{2z})^2 = (\rho_2 – d_0)^2
\]

\[
(x – s_{3x})^2 + (y – s_{3y})^2 + (z – s_{3z})^2 = (\rho_3 – d_0)^2
\]

\[
(x – s_{4x})^2 + (y – s_{4y})^2 + (z – s_{4z})^2 = (\rho_4 – d_0)^2
\]

Solving this system yields your position and the clock bias.
Once the clock bias is known, the receiver can adjust its clock and improve accuracy.