advancedcore concept~26 min

Precise Point Positioning (PPP)

No base station, no friend to borrow from — just one receiver, a model of every error, and patience

Why it matters

PPP delivers precise positioning anywhere on Earth — mid-ocean, polar, airborne — where no base station could ever stand. It is the backbone of scientific GNSS, offshore survey, and precise agriculture over wide areas, and its fusion with integer fixing (PPP-RTK) is the state of the art that GNerd's own engine is built around.

Prerequisites

The friend you can't always bring

RTK gave you centimetres by borrowing a stationary friend's errors and subtracting them. It is brilliant — until you are in the middle of the Pacific, on an ice sheet, in a glider over the Andes, or simply too far from any base for its errors to still resemble yours. The one assumption RTK cannot survive is distance, and some of the most important places on Earth are nothing but distance.

So ask the uncomfortable question: can a single receiver, standing alone with no friend anywhere in range, still find itself to centimetres? With RTK's whole strategy — cancel what you share — the answer is plainly no. There is no one to share with.

PPP wins by refusing the premise. It does not try to cancel the errors it cannot measure. It sets out to know them.

The idea, before any mathematics

RTK and PPP are two philosophies pointed at the same six-error mess on your carrier phase.

  • RTK says: I don't need to know the errors, I just need someone wrong in the same way. Subtract their measurements from mine and the errors delete themselves.
  • PPP says: There is no one else. So I will account for each error on its own terms — measure it, model it, or have someone compute it for me — until only my position is left unexplained.

That reframing changes everything downstream. The satellite clock and orbit errors that RTK cancelled for free? PPP cannot cancel them, so it needs them handed to it, precomputed to the centimetre by a global analysis centre tracking the whole constellation from a worldwide network. These are the precise products. The ionosphere RTK differenced away? PPP removes it with a dual-frequency trick instead. The troposphere? PPP simply adds it to the list of things it solves for.

RTK borrows a neighbour's errors and subtracts them. PPP has no neighbour, so it builds a model of every error until only its own position is left standing.

And here is the sting in the tail, the thing that gives PPP its entire character. Without a base to difference against, the integer ambiguity no longer conveniently cancels into a clean small integer. PPP is left estimating each ambiguity as an ordinary real number — a float. A single snapshot cannot tell a bias apart from a position offset; only the slow drift of the satellites across the sky gives the estimator the leverage to separate them. That takes time. PPP's signature is not a lever you pull — it is a clock you wait on.

Seeing it

Picture the position error on a graph against elapsed time. In the first minute it sits up near a metre: the estimator genuinely cannot yet distinguish "I am a metre east" from "that satellite's ambiguity is a metre long." As the minutes pass, the satellites arc across the sky, each changing the direction it pulls on your solution. That changing geometry is the only new information arriving — and slowly it pries position loose from the ambiguities. The error curve bends downward and flattens onto a floor. Where that floor sits is decided before you ever turned on the receiver: it is set by the quality of the precise products you were handed.

Try it yourself

There is no base station in this picture. Drag the clock forward and watch the solution converge; toggle the product quality and watch the floor move.

1 cm10 cm1 m10 m0 min10 min20 min30 minproduct floor 0.2 cmelapsed observing timeCONVERGED — cm-level
SolutionCONVERGED
Position error
2.2 cm
Product floor
0.2 cm
Products
precise
Base station
none

There is no base station. PPP cannot difference the errors away, so it models them: apply global precise orbit and clock products, then estimate your position, the receiver clock each epoch, and one float ambiguity per satellite all at once. At 1–2 minutes the batch cannot yet tell your position apart from those ambiguities — the error sits near a metre. Drag the clock forward and watch the satellites sweep: the changing geometry finally pries position loose from the biases and the curve converges toward the centimetre level. Now switch precise products off. The shape is the same, but the whole curve settles on a much higher floor — because the solution can only ever be as good as the orbit and clock products you fed it. That floor is the entire reason open, high-quality correction products matter.

Start at 1–2 minutes: the error is near a metre and the panel reads CONVERGING. Now drag elapsed time forward. The satellites sweep, the geometry changes, and the curve bends down toward the centimetre level — no base station ever involved. Then switch precise products off to fall back on broadcast ephemeris. The curve has the same shape, converges on the same schedule, but settles on a floor an order of magnitude higher. That is the lesson in one toggle: PPP can only ever be as good as the orbit and clock products you feed it. The accuracy is purchased not on the receiver but in the global product stream.

Now the mathematics

Take the same carrier phase (in metres) receiver rr measures to satellite ss that we wrote for RTK:

Φrs=ρrs+c (δtr−δts)+Trs−Irs+λNrs+ε\Phi_r^s = \rho_r^s + c\,(\delta t_r - \delta t^s) + T_r^s - I_r^s + \lambda N_r^s + \varepsilon

RTK made these terms vanish by subtraction. PPP has nobody to subtract, so it dismantles the sum one term at a time.

The satellite clock and orbit (δts\delta t^s and the part of ρs\rho^s that depends on the satellite's true position) are removed by substitution: the precise products give δts\delta t^s and the satellite coordinates to the centimetre, so those terms are computed, not estimated.

The ionosphere IrsI_r^s is frequency-dependent, and that is its undoing. Measure on two frequencies f1,f2f_1, f_2 and form the ionosphere-free combination

ΦIF=f12 Φ1−f22 Φ2f12−f22\Phi_{\text{IF}} = \frac{f_1^2\,\Phi_1 - f_2^2\,\Phi_2}{f_1^2 - f_2^2}

which is constructed precisely so the 1/f21/f^2 ionospheric term cancels to first order. The ionosphere is gone — paid for with a noisier combined observable and the need for dual-frequency hardware.

The troposphere TrsT_r^s is not frequency-dependent, so no combination removes it. PPP instead estimates it: a wet-delay parameter (times a mapping function for elevation) joins the unknowns and is solved alongside everything else.

What is left is position, the receiver clock δtr\delta t_r, that troposphere term, and the ambiguity. Stripped to the essentials this course solves in 2-D, each satellite contributes a code and a carrier observation,

Ps(t)=ρs(t)+b(t)+νΦs(t)=ρs(t)+b(t)+as+ε\begin{aligned} P_s(t) &= \rho_s(t) + b(t) + \nu \\ \Phi_s(t) &= \rho_s(t) + b(t) + a_s + \varepsilon \end{aligned}

where b(t)=c δtrb(t)=c\,\delta t_r is the receiver clock at epoch tt (one unknown per epoch), and as=λNsa_s=\lambda N_s is the carrier ambiguity in metres (one unknown per satellite, constant while tracking holds). The code PsP_s carries no ambiguity and anchors the absolute level; the carrier Φs\Phi_s is a hundred times tighter but drags the unknown asa_s along with it.

Stack every epoch of a session into one batch least-squares system. The unknowns are the static position (x,y)(x,y), the clock b(t)b(t) at each epoch, and the ambiguity asa_s for each satellite. Here is the crux: with a single epoch the carrier equations are rank-deficient — a shift in position can be perfectly disguised as a change in the ambiguities, and the estimator cannot tell which happened. Only when the satellites move do the geometry rows change while the ambiguities stay fixed, breaking the tie. That is why PPP converges rather than snapping into place, and why nothing speeds it up except better geometry, more satellites, or — the real answer — fixing the ambiguities to integers.

Because PPP leaves asa_s as a float, it never gets RTK's clean integer snap on its own. Resolve those ambiguities to integers using extra products (satellite phase biases) and you get PPP-RTK: PPP's global reach with RTK's fast integer fix. That fusion is the current summit of precise GNSS.

How this appears in engineering

The precise products are the whole game. The IGS and its analysis centres publish satellite orbit and clock products at a spectrum of latencies — final (best, days late), rapid, ultra-rapid, and real-time streams delivered as SSR corrections over NTRIP. Choosing a product is choosing a point on the accuracy-versus-latency curve, and — recalling time systems — respecting the exact time scale and reference each product is expressed in, or you reintroduce the very errors you paid to remove.

The modelling list in a production PPP engine is longer than the propagation terms above: solid-Earth tides and ocean loading move the ground under the antenna by decimetres; phase wind-up from relative antenna rotation shifts the carrier; satellite and receiver antenna phase-centre offsets must be applied; and relativistic clock terms matter at this precision. Every one is a term PPP models because it has no friend to difference it away. This is the deterministic, explicitly-corrected, product-driven pipeline the GNerd engine is built around — which is exactly why open, high-quality correction products are a strategic concern and not a footnote.

Check your understanding

  • RTK and PPP both start from the same carrier-phase equation. State the one-sentence difference in how each disposes of the satellite-clock error.
  • A colleague is puzzled that PPP "has nothing to lean on" without a base station. What does it lean on instead, and what happens to accuracy if that thing degrades?
  • Why can the ionosphere be removed by a dual-frequency combination but the troposphere cannot, and what does PPP do about the troposphere as a result?
  • Two PPP sessions use identical hardware and sky but different orbit/clock products. One converges to 3 cm, the other to 40 cm. Explain, and name the technique that would also shorten the time either one takes to converge.

Where to go next

You have now climbed both branches of precise GNSS: RTK, which cancels shared errors against a local base, and PPP, which models every error against global products with no base at all. Their fusion — PPP-RTK — keeps PPP's go-anywhere reach while borrowing RTK's integer fix to collapse the convergence wait, and it is where high-end positioning is converging today. From here the frontier is less about new equations and more about the products: faster, cheaper, more open orbit, clock, and bias streams for every constellation. That product layer — deterministic, traceable, explicitly corrected — is the ground GNerd's own engine stands on.

Common misconceptions

  • PPP is just SPP with better maths. SPP uses broadcast products and models little; PPP depends on precise external products and models every error explicitly — a different class of technique.
  • PPP is instant like RTK. PPP must converge over tens of minutes because its carrier ambiguities are estimated as real numbers, not fixed to integers (unless you add PPP-RTK).
  • With no base station, PPP has nothing to depend on. It depends heavily on the quality of the global orbit and clock products — that external product quality is the accuracy floor.

Key takeaways

  • PPP models errors explicitly instead of differencing them against a base station.
  • It requires precise, externally computed orbit and clock products; their quality is the floor.
  • The ionosphere-free combination removes the ionosphere; the troposphere is estimated.
  • Carrier ambiguities are solved as floats, so the solution must converge over time.
  • PPP-RTK adds integer fixing to collapse the convergence time back toward RTK's.

Continue exploring