advancedcore concept~22 min

Carrier Phase & Ambiguity

The ruler with millimetre marks and no numbers on it

Why it matters

Carrier phase is the measurement behind every centimetre- and millimetre-level technique: RTK, PPP, network positioning, deformation monitoring, and precise orbit determination. Code ranging gets you metres; resolving the carrier ambiguity gets you centimetres.

Prerequisites

A ruler you can read but can't count

Last lesson we cornered a hard limit. The C/A code chip is about 293 metres long, so sliding the replica until it clicks pins your range to a few metres and no better. Respectable for finding a restaurant. Useless for landing a drone on a specific brick.

But the code is only the label stuck onto the signal. Underneath it, carrying it, is the raw carrier wave itself — a pure sinusoid oscillating 1,575,420,000 times a second, one full cycle every 19 centimetres. That is a ruler roughly fifteen hundred times finer than the code, and a receiver can read where it sits within a single cycle to about one percent of a wavelength — under two millimetres.

So why isn't every phone accurate to the millimetre? Because this exquisite ruler has a cruel defect: the millimetre marks are gorgeous, but none of the whole-centimetre lines are numbered. You can see you're at "something-point-4 of a cycle" with breathtaking precision. You just have no idea which cycle. Is the satellite 100,000,000 wavelengths away, or 100,000,001? The phase looks identical either way.

That missing whole number has a name — the integer ambiguity — and the entire art of precise GNSS is the art of pinning it down.

The idea, before any mathematics

Picture measuring the length of a long hallway with a strange tape measure. It has flawless millimetre ticks, but the metre numbers have rubbed off. You lay it down and read "…point 372 metres." Wonderfully precise — except you can't tell whether the hallway is 12.372 m or 13.372 m or 47.372 m long. The fractional part is certain; the whole part is a mystery.

Now suppose a friend paces the hallway and says, "it's roughly 12 metres, give or take one." Suddenly the mystery collapses. Only one of your candidate readings — 12.372 — falls inside "12, give or take one." The rough measurement didn't need to be precise. It only needed to be good enough to tell you which whole number to trust, and then your fine ruler finishes the job to the millimetre.

That friend is the code pseudorange. Coarse, but unambiguous. The fine tape is the carrier phase. Precise, but periodic. Neither is enough alone; together they are centimetres. That is the whole trick, and everything below is just making it rigorous.

Carrier phase doesn't measure distance. It measures a fraction of a wavelength, perfectly, plus a whole number of wavelengths that it flatly refuses to tell you.

Seeing it

Lay the candidate ranges out on a line. Because every candidate shares the same measured fraction, they form a comb of possibilities, one tooth every wavelength — all equally consistent with the phase you read. The true range is one specific tooth, and the phase alone gives you no way to say which.

Drop the coarse code measurement on top as a shaded band. Fixing the ambiguity means one thing and one thing only: shrink the band until exactly one tooth of the comb survives inside it. When a single candidate stands alone, you have committed to a whole number, and the range snaps to millimetre precision.

Try it yourself

The green tick is the truth. The grey comb is every other candidate, one wavelength apart. The shaded band is the code fix, with its width set by the code precision.

carrier wave (one crest per wavelength)code +/- 1.60 m-2 m-1 m0 m+1 m+2 mcandidate ranges, one wavelength apart (green = truth)
AmbiguityAMBIGUOUS
Carrier
Wavelength
19.0 cm
Code window
±1.60 m
Candidates in window
16
Carrier precision
1.9 mm
Fixed integer

The code band says roughly where you are; the carrier ticks say precisely where-within-a-cycle — but which tick? Tighten the code precision and watch candidates fall away until one survives: that is the integer ambiguity, fixed. Push the code loose again and switch to wide-lane: the comb spreads so far that a single tick stands alone even with a sloppy band. That is the real trick of centimetre positioning — use anything (better code, longer effective wavelength, geometry over time) to isolate one whole-cycle count, then let the millimetre-precise fraction finish the job.

Three experiments. First, tighten the code precision and watch candidates drop out of the band until only one remains — the panel flips to RESOLVED. Second, loosen the code again and switch to the wide-lane carrier: the comb's teeth spread almost a metre apart, so a single tooth stands alone even with a sloppy band — that's why wide-laning is a real workhorse of ambiguity resolution. Third, keep the band loose on L1 and hit resample a few times: watch the fix occasionally lock onto the wrong tooth (WRONG FIX). A confident answer for the wrong integer is the most dangerous failure in precise GNSS — an integer is either exactly right or badly, silently wrong.

Now the mathematics

Strip the observation to its bones. The carrier-phase measurement ϕ\phi, expressed in cycles, relates to the geometric range ρ\rho and the wavelength λ\lambda by:

ϕ=ρλ+N\phi = \frac{\rho}{\lambda} + N

where NN is an unknown integer number of whole cycles. The receiver observes ϕ\phi but can only ever read its fractional part directly; the integer NN is the ambiguity. The wavelength itself comes from the carrier frequency,

λ=cf=299,792,458 m/s1,575.42 MHz0.1903 m\lambda = \frac{c}{f} = \frac{299{,}792{,}458\ \text{m/s}}{1{,}575.42\ \text{MHz}} \approx 0.1903\ \text{m}

and a phase-tracking noise of 0.010.01 cycle therefore corresponds to only 0.01×0.1903 m1.9 mm0.01 \times 0.1903\ \text{m} \approx 1.9\ \text{mm} of range. That is the prize.

The full observable also carries the receiver and satellite clock offsets, the ionosphere, the troposphere, and hardware biases — the same troublemakers from earlier lessons. The elegant move is to make most of them cancel by differencing. Take two receivers, AA and BB, both tracking the same satellite ss: the single difference removes the satellite clock, because both receivers see it identically. Now bring in a second satellite tt and form the double difference,

Δϕ=(ϕAsϕBs)(ϕAtϕBt)\nabla\Delta\phi = \left(\phi_A^{\,s} - \phi_B^{\,s}\right) - \left(\phi_A^{\,t} - \phi_B^{\,t}\right)

which cancels both receiver clocks and both satellite clocks at once. What's left is almost pure geometry — plus a double-differenced ambiguity ΔN\nabla\Delta N that is a genuine integer. That integer-ness is the gift: instead of estimating a real number, you get to round to the nearest whole number — and if you round to the right one, the solution is exact, not merely fitted. That is the difference between a float solution (centimetres, ambiguities left as reals) and a fixed solution (millimetres, ambiguities snapped to integers).

How this appears in engineering

This is the machinery under RTK (real-time kinematic) and PPP (precise point positioning). RTK double-differences against a nearby base station and fixes integers in real time for centimetre accuracy; PPP uses precise satellite orbit and clock products to reach comparable accuracy from a single receiver, at the cost of a longer convergence time.

Two engineering realities dominate. First, fixing the integers is a search, not a formula: methods like LAMBDA decorrelate the ambiguities and search the integer lattice for the best candidate, then apply a ratio test before trusting the fix — because a wrong fix is worse than no fix. Extra frequencies (L2, L5), the wide-lane combination, and simply watching the geometry change as satellites move all feed that search with more constraints.

Second, the integer only holds while lock holds. If the receiver briefly loses the signal — a bridge, a tree, a sharp maneuver — the cycle count jumps by an unknown integer: a cycle slip. Robust processing watches for slips (often via multi-frequency combinations that should stay smooth), flags them, and re-fixes the ambiguity, all against the precise timescale the phase accumulates over. Miss a slip, and your millimetres quietly become decimetres.

Check your understanding

  • The carrier gives ~2 mm precision but code ranging gives metres. Why can't you simply use the carrier alone and skip the code entirely?
  • A double difference cancels four clock-like terms. Name them, and explain what desirable property the leftover ambiguity has.
  • Switching to the wide-lane combination makes ambiguity fixing easier. In terms of the candidate comb, what physically changes?
  • Your solution reports a fixed answer that is confidently 14 cm from truth. What most likely happened, and why is this failure more dangerous than a noisy float solution?

Where to go next

You now hold the measurement behind every precise GNSS technique on Earth. Code told you roughly where; the carrier's fraction told you exactly where within a cycle; differencing and integer fixing told you which cycle. Point that machinery at a base station streaming corrections and you have RTK; point it at precise orbit-and-clock products and you have PPP — the technique the GNerd engine itself runs. Both are next as the foundations arc climbs from how a fix works to how a fix gets precise.

Common misconceptions

  • Carrier phase measures range directly. It measures a fraction of a cycle plus an unknown integer; the range only appears once the integer is resolved.
  • You resolve the ambiguity by measuring harder. A single clean epoch on one frequency is not enough — resolution comes from geometry over time, extra frequencies, or differencing.
  • Once fixed, the ambiguity stays fixed forever. A loss of lock (cycle slip) resets the integer, and the receiver must fix it again.

Key takeaways

  • The carrier wavelength (~19 cm on L1) is the fine ruler; phase tracking reads ~1% of it.
  • The measured phase is fraction + unknown integer N — the integer ambiguity.
  • Double differencing cancels receiver and satellite clocks, leaving an integer ambiguity.
  • A longer effective wavelength (wide-laning) spreads candidates and eases fixing.
  • A cycle slip resets the integer; robust processing detects and repairs slips.

Continue exploring