GNSS — position from satellite time-of-flight

GNSS (GPS, Galileo, GLONASS, BeiDou) gives an absolute position fix anywhere with a clear sky. Each satellite broadcasts its position and a precise time; the receiver measures how long the signal took to arrive, converts that to a range, and trilaterates. The subtlety — and the reason you need a 4th satellite — is the receiver's own clock error.

Symbols used on this page are defined in the Nomenclature → frames, position & motion.

Pseudoranges & the clock unknown

The receiver can't measure true range because its clock is offset from GNSS time by an unknown bias $b$. What it measures is a pseudorange:

$$ \rho_i = \lVert \mathbf{p} - \mathbf{s}_i\rVert + c\,b + \varepsilon_i $$

where $\mathbf{p}$ is the unknown receiver position, $\mathbf{s}_i$ the $i$-th satellite position, $c$ the speed of light, and $\varepsilon_i$ noise (atmosphere, multipath). There are 4 unknowns $(x,y,z,b)$ — hence a minimum of 4 satellites.

First, the geometry. Each pseudorange puts you on a circle around a satellite. Because the receiver clock bias adds the same error to every range, all the circles inflate together and no longer meet at a point — turn "solve for δt" on and they snap back into agreement. That common-mode structure is precisely what makes the clock separable, and why you need one extra satellite:

Solving by least squares

The equations are nonlinear in $\mathbf p$, so the receiver linearizes about a guess $\mathbf p_0$ and iterates (Gauss–Newton). With unit line-of-sight vectors $\hat{\mathbf e}_i$, the design matrix is

$$ G = \begin{bmatrix} -\hat{\mathbf e}_1^\top & 1\\ \vdots & \vdots\\ -\hat{\mathbf e}_n^\top & 1\end{bmatrix}, \qquad \Delta\mathbf x = (G^\top G)^{-1}G^\top \Delta\boldsymbol\rho $$

updating $(x,y,z,b)$ until convergence.

Geometry is everything — GDOP

The Geometric Dilution of Precision maps ranging error into position error, and depends only on satellite geometry:

$$ \text{GDOP} = \sqrt{\operatorname{tr}\big((G^\top G)^{-1}\big)},\qquad \sigma_{\text{pos}} \approx \text{GDOP}\cdot\sigma_{\text{range}} $$

Satellites spread across the sky → small GDOP → sharp fix. Satellites clustered together → large GDOP → the intersection of range circles is a long, ill-conditioned sliver. Drag the spread slider and watch the fix quality change:

Strengths & failure modes

PropertyConsequence
Absolute, drift-freeBounds IMU drift when fused
Very weak signal (~ −160 dBW)Trivially jammed by cheap transmitters
Unauthenticated civil signalCan be spoofed with counterfeit signals
Line-of-sight to skyUnavailable indoors, underground, deep urban canyons
Why alt-PNT exists. GNSS's fragility to jamming/spoofing/occlusion is exactly why systems pair it with an IMU (via an EKF) and increasingly with alternative references. GNSS is an excellent — but assailable — one input among many.

Related: IMU · EKF · Star Tracker. The receiver's least-squares/EKF solve is the same estimation machinery used throughout this site.