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.
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.