intermediatecore concept~20 min

Single Point Positioning

Turning a fistful of noisy pseudoranges into one honest fix

Why it matters

SPP is the position your phone computes right now. It is the baseline every precise technique (DGNSS, RTK, PPP) improves upon, and it is where pseudorange, geometry (DOP), and coordinate frames finally combine into a working solution with a stated uncertainty.

Prerequisites

Seven satellites walk into a receiver

A receiver locks onto seven satellites and asks each one, politely, "how far away are you?" It gets back seven confident answers — and no two of them quite agree on where the receiver is. One would place it a metre north. Another, half a metre east. A third insists on somewhere in between.

None of them is lying on purpose. Each pseudorange carries a little noise, a little leftover atmosphere, a little bad luck. The receiver's job is not to pick a favourite satellite and believe it. Its job is to find the one position that makes all seven stories as nearly true as possible — and then to say, out loud, how confident it is.

That act of principled compromise is Single Point Positioning. It is the fix your phone is computing right now, and it is the moment everything you have learned so far clicks into one machine.

The idea, before any mathematics

You already have all the pieces:

  • From pseudorange, you know each measurement is a true range plus one shared clock bias — so the unknowns are position and clock.
  • From dilution of precision, you know the geometry of the satellites decides how gently or violently measurement error turns into position error.

SPP is what happens when you stop studying those ideas separately and let them run together. With more satellites than unknowns, there is generally no position that satisfies every pseudorange exactly. So we ask a softer, wiser question: which position and clock make the leftover disagreements as small as possible, all at once?

The "leftover disagreements" have a name — residuals — and minimizing the sum of their squares is the whole method. Least squares is not a trick pulled from a hat; it is simply the mathematical spelling of "believe everyone a little, no one completely."

A single measurement gives you an answer. A pile of noisy measurements gives you an answer and an argument about how much to trust it. SPP settles the argument.

Seeing it

Imagine each satellite drawing its pseudorange circle around itself, exactly as in trilateration. With honest, noise-free ranges the circles kiss at a single point. Add noise and they no longer do — they overlap in a small, fuzzy region, a little arena of plausible positions.

The least-squares fix is the point that sits most snugly inside that fuzzy region: pulled toward every circle, owned by none. And the shape of the fuzzy region — round and tight when satellites are well spread, long and nervous when they bunch up — is precisely the error ellipse. Geometry sets the shape; noise sets the size.

Try it yourself

The green receiver is the true position. Blue satellites broadcast pseudoranges that are corrupted by a shared clock bias and per-satellite noise. The orange crosshair is the least-squares estimate, wrapped in its 1σ error ellipse. The bars show each satellite's residual — how far its measurement sits from the best-fit prediction.

306090306090metersABCDE
Satellites:5
Position error
2.32 m
Estimated clock bias
+9.87 m
HDOP / GDOP
0.89 / 1.00
RMS residual
0.91 m
Iterations
7
Status
converged
Residuals (predicted − measured)
A
+1.29 m
B
-0.83 m
C
+0.10 m
D
+0.63 m
E
-1.18 m

Drag the true receiver and the satellites, then watch the orange fix chase the truth. Turn noise to zero and the estimate lands dead-on with zero residuals. Add noise and it can’t satisfy every measurement at once — the residuals fight to a compromise, and the fix wanders inside its 1σ ellipse. Herd the satellites into one corner and that ellipse balloons (bad DOP); spread them out and add more, and it tightens.

Three experiments worth running:

  1. Set noise to zero. The estimate lands dead-on the truth, every residual is zero, and the clock bias is recovered exactly. This is the trilateration/pseudorange world you already know.
  2. Add noise, then press Resample a few times. The fix jitters around the truth — and notice it stays inside the ellipse. The ellipse is not decoration; it is a promise about where the answer will land.
  3. Herd the satellites into one corner, then spread them out and add more. Watch HDOP and the ellipse balloon, then shrink. Redundancy and good geometry are two different goods, and the fix wants both.

Now the mathematics

Stack the pseudorange equations from pseudorange. With unknowns x=(x,y,b)\mathbf{x} = (x, y, b) — position and clock bias — the least-squares problem is:

minx  i(psi+bρi)2\min_{\mathbf{x}} \; \sum_{i} \left( \lVert \mathbf{p} - \mathbf{s}_i \rVert + b - \rho_i \right)^2

Because the range term is non-linear, we linearize about a current guess and iterate (Gauss–Newton). Collect the Jacobian rows into the design matrix HH, whose row for satellite ii is the familiar direction-plus-clock triple:

Hi=[  xxidiyyidi1  ]H_i = \left[ \; \frac{x - x_i}{d_i} \quad \frac{y - y_i}{d_i} \quad 1 \; \right]

Each step solves the normal equations for the update Δx\Delta\mathbf{x} from the residual vector r\mathbf{r}:

(HTH)Δx=HTr\left( H^{\mathsf{T}} H \right) \Delta\mathbf{x} = -\,H^{\mathsf{T}} \mathbf{r}

Here is the payoff that ties the course together. If each pseudorange has noise variance σ2\sigma^2, the covariance of the estimate is:

cov(x)=σ2(HTH)1=σ2Q\operatorname{cov}(\mathbf{x}) = \sigma^2 \left( H^{\mathsf{T}} H \right)^{-1} = \sigma^2 Q

That matrix Q=(HTH)1Q = (H^{\mathsf{T}}H)^{-1} is exactly the DOP cofactor matrix from dilution of precision — the same HH, the same inverse. Take the square roots of its diagonal and you get HDOP and TDOP; take the position sub-block and you get the error ellipse. In one line:

σposition=DOP×σmeasurement\sigma_{\text{position}} = \text{DOP} \times \sigma_{\text{measurement}}

The design matrix does double duty: it finds the position and it grades the position. Pseudorange supplied the rows; DOP read their geometry; SPP simply refused to keep them in separate chapters.

How this appears in engineering

Real SPP is this skeleton wearing a coat of corrections. Before the solve, each raw pseudorange is cleaned up: the satellite clock offset is removed with broadcast parameters, ionospheric and tropospheric delays are modeled and subtracted, and relativistic and instrumental terms are applied. Satellites low on the horizon are trusted less, so production solvers use weighted least squares — replacing HTHH^{\mathsf{T}}H with HTWHH^{\mathsf{T}} W H, where WW downweights noisy, low-elevation measurements.

Two engineering habits fall directly out of the residuals you can see in the interactive. First, a single satellite with a wildly larger residual than the rest is a fault flag — the seed of receiver autonomous integrity monitoring (RAIM). Second, the reported covariance is what lets a receiver print a believable accuracy number instead of a comforting fiction. A fix without an uncertainty is half an answer.

Check your understanding

  • With exactly three satellites in 2D, the residuals are forced to zero no matter how noisy the measurements are. Why? And what does that tell you about how much a "small residual" is worth when you have only the minimum number of satellites?
  • The covariance is σ2(HTH)1\sigma^2 (H^{\mathsf{T}}H)^{-1}. Which factor does satellite geometry control, and which does receiver/atmosphere quality control?
  • You add an eighth satellite directly on top of an existing one. Does the fix improve much? Explain using the design matrix HH.
  • Weighted least squares trusts high-elevation satellites more. In terms of noise variance σi2\sigma_i^2, why is that the statistically correct thing to do?

Where to go next

You can now compute a standalone position and state how much to trust it — the honest baseline of all of GNSS. Every precise technique from here is a campaign to shrink that error ellipse: differential GNSS cancels the correlated errors two nearby receivers share, RTK exploits the ultra-precise carrier phase to fix positions to centimetres, and precise point positioning (PPP) replaces broadcast corrections with high-accuracy orbit and clock products to reach that precision with a single receiver.

But all of them still start exactly where you are now: a design matrix, a stack of residuals, and the quiet discipline of least squares.

Common misconceptions

  • A position fix is exact. It is an estimate: with noisy measurements the solution is the best compromise, and it carries an uncertainty described by the error ellipse.
  • Adding satellites cannot hurt. Adding well-placed satellites helps; adding a badly placed cluster barely improves geometry and can leave the fix nearly as uncertain.
  • Zero residuals mean a perfect position. With exactly three satellites in 2D the residuals are forced to zero regardless of noise — small residuals are only meaningful when the problem is over-determined.

Key takeaways

  • SPP solves for position and clock jointly from pseudoranges by least squares.
  • Residuals are what remains after the single best-fit; they cannot all be zero when the problem is over-determined and the measurements are noisy.
  • The 1-sigma error ellipse is the DOP geometry scaled by the measurement-error level.
  • More, better-spread satellites reduce DOP and tighten the fix — geometry and redundancy both matter.

Continue exploring