A Technical Primer: How GNSS Works
The incredible but imperfect mechanics of measuring pseudorange — and how we get closer to perfection
Once a technology has been around long enough, you start to take it for granted. It simply becomes a part of everyday life — as inconspicuous as the air we breathe.
In many ways, that’s already happened with GPS technology. Just a few decades ago, positioning measurements required knowing how to use a constellation of complex tools. Now, anyone can get a fairly accurate estimate of their position from a constellation of satellites in the sky — with only a simple receiver in hand.
It’s hard to overstate how impactful this technology has been. We no longer rely on paper maps or even Mapquest printouts to chart a course for a road trip; we simply let our phones tell us where we are and where we’re going. The same basic tools are now on the verge of enabling widespread autonomous driving. Likewise, surveyors no longer lean solely on manual measurements from compasses, theodolites, and sextants to create accurate maps or plan construction sites; they instead rely on communication between satellites and receivers.
Yet, as incredible as these modern positioning tools are, they are still far from perfect. Commercial applications, in particular, reveal that GPS can land you catastrophically far off the mark. Understanding that gap requires a closer look at what exactly GPS is doing when it tells you where you are. Only then can you discover what it takes to get from incredible accuracy to astounding precision.
In this article, we’ll take a look under the hood to explain exactly what’s going on inside your GNSS receiver. We’ll explain the math your receiver does every second to determine where it is in the world. You don’t have to follow the math to understand how your GNSS works, but seeing it offers a more complete view of what’s happening.
GPS or GNSS? An Important Distinction
Before we get into the mechanics involved in estimating position via GPS, an important distinction is in order. GPS, or the Global Positioning System, is only one of many satellite constellations. While GPS is owned, operated, and made publicly available by the U.S. government, other constellations are run by other countries — such as the Russian GLONASS, the European Galileo, and the Chinese Compass (often called Beidou).
More broadly known as global navigation satellite systems, or GNSS, these various constellations all provide navigation systems from orbit around the globe. There are also several regional systems (RNSS) that operate like a GNSS but are not global.
You don’t need to know all the constellations to understand how these systems work. What’s important is that we use a term that reflects the many different satellites involved, especially for global commercial applications. For that reason, we’ll use GNSS rather than GPS for the rest of this article.
What a GNSS Actually Tells You
Regardless of the GNSS system, they all work in roughly the same way. In fact, the basics are incredibly simple.
Each satellite broadcasts one or more radio signals that carry essentially the same information: “This is what time it is, and this is where I am.” The user equipment on the ground – the rover, receiver, drone, etc. – receives these signals. From there, receivers make three observations or measurements: pseudorange, Doppler shift, and carrier phase. These are collectively called the observables.
In this article, we’ll only cover pseudorange. Doppler shift provides very useful velocity information to GNSS receivers, and carrier phase provides a precise but ambiguous measurement of range. The latter is often used to measure differences in location with respect to an initial position and, in more advanced techniques, to achieve centimeter-level positioning.
Understanding Pseudorange
That leaves the main measurement of GNSS systems: pseudorange. What exactly is a pseudorange measurement? Well, it’s like half a range measurement.
To better understand this, let’s do a thought experiment. Imagine we have a transmitter and a receiver and both of them have perfect clocks. The transmitter can send a radio signal at an exact time Tt, and the receiver can determine the exact time, Tr, at which it received the signal. If we know both times and the speed of light, c, in the medium through which it propagated (that’s important later), then we can construct a range estimate, r, from those three things: (1)
r = c (Tr - Tt)
But what if the receiver doesn’t have a perfect clock? What if all it can do is determine the exact time of reception according to its own imperfect clock (tr)? In that case, the resulting estimate is a pseudorange, p: (2)
p = c (tr - Tt)
You can see that this is “like half a range measurement” in the sense that we know the true time of transmission at one end, but at the other end, we only know the time of reception according to a very inaccurate clock (though we may know the inaccurate time very precisely).
Equation 2 is the “recipe” by which a receiver constructs each of its pseudorange measurements. In this model, one end of the measurement — the time of transmission — is “perfect.” But the other end — the time of reception — is arbitrarily corrupted by the receiver clock error.
Note that the satellite clocks are not actually perfect, but they are good enough to be used as if they are, once the clock correction is known. The breakthrough that happened over the course of the late 1970s and early 1980s was the ability to put effectively perfect clocks in space. They aren’t actually perfect, but it’s part of the job of every GNSS operator to estimate the error of every individual spacecraft’s clock and send that information in the navigation data message.
Getting From Pseudorange to Real Position
But what good is a pseudorange measurement if it’s corrupted by an arbitrary amount of receiver clock error? To figure that out, we have to move from the recipe for how a receiver constructs a pseudorange to the model of how a receiver uses pseudorange.
This will take us deeper under the hood, from considering a single pseudorange to looking at the ensemble of pseudoranges measured from all of the satellites the receiver is tracking.
First, though, solving for receiver position requires an accurate estimate of the clock error. And for that, we’ll need not one satellite signal but many, along with a formula to account for clock error. Here, we’re going deeper under the hood to understand what’s happening inside the receiver.
Note that both reception times (Tr and tr) in the above equations refer to the same instant. They are just measured by different clocks. That is, though the two times are not numerically equal, they refer to the same event, and if we knew the correction for the receiver clock, we could make them numerically equal. So, we can rewrite the time of reception according to the imperfect receiver clock as the “true” time of reception plus a clock error: (3)
tr = Tr + δt
This is probably the most difficult conceptual step in understanding how GNSS position solutions work. Considering a numerical example may help. Imagine you have a clock. You would like this clock to be accurate to within less than a nanosecond, but the best you can do is to set the time by pushing a button when you see the second hand of a perfect clock sweep past the 12. If you’ve done a really good job setting your clock, when it reads exactly 01:00:00.000, the perfect clock may read 00:59:59.827.
Let’s decide to measure time in units of seconds since midnight. So, in this example, your clock’s time would be 3600.0 s, and the corresponding true time would be 3599.827 s. If we put these numbers into the above equation, we have: (4)
3600.0 = 3599.827 + δt
We can solve for δt = 0.173 s. That is, your clock leads true time by 173 ms. If your clock never drifts — time according to both clocks always advances at the exact same rate — then your clock’s error is 173 ms until you try to set it again.
This is the first step in our modeling. If we combine the first three equations, we start to see how this can be useful: (5)
p = c (Tr + δt - Tt)
= c (Tr - Tt) + cδt
= r + cδt
The pseudorange measurement is equal to the hypothetical range measurement plus the “range-equivalent clock error” c δt. Note that since the range is purely geometrical, we can model that as well. The range is just the distance between the transmitter and receiver, which we can write as: (6)
r = √((xr - xt)2 + (yr - yt)2 + (zr - zt)2)
Here, x, y, and z are Cartesian coordinates, and the subscripts r and t correspond to receiver and transmitter, respectively. Recall that the GNSS satellites are telling us what time it is and where they are, so the only unknown parameters of the pseudorange equation (Eq. 5) are the three components of receiver position and the receiver clock error.
Since we observe a pseudorange for each satellite, we notate the model to indicate which satellite a pseudorange is for. For instance, for satellite j: (7)
pj = c(Tr - Ttj)
= rj + c δt
= √((xr - xj)2 + (yr - yj)2 + (zr - zj)2) + cδt
Note that Tr doesn’t have a j superscript, because all the signals are measured on the same tick of the receiver clock. Importantly, the receiver clock error and the components of receiver position are independent of which satellite we are measuring, since the times are all measured at the same instant by the same clock, and the receiver position itself doesn’t depend on which satellite we’re talking about. Also, note that we dropped the generic t superscript in favor of the specific j superscript.
We can now list all these measurements for all N of the satellites: (8)
p1 = r1 + cδt
p2 = r2 + cδt
…
pj = rj + cδt
…
pN = rN + cδt
This gives us N equations in four unknowns — the three components of receiver position and the one receiver clock error. That’s it. Our receiver must simply solve a system of N ≥ four equations for the four unknowns to reveal (roughly) where it is.
The Complicating Factors of Pseudorange
The above will get you most of the way to an accurate receiver position. It’s good enough for many applications, but there are complications in calculating pseudorange that make a more precise estimate more difficult to achieve. This is where we meet the limits of GNSS positioning estimates and require additional corrections.
As the signal travels from the spacecraft to the receiver antenna, it is acted upon by atmospheric factors that tend to slow it down. This results in varying amounts of apparent delay as compared with what we would expect if the signal were unperturbed on its way.
These yet-unmodeled delays are often referred to as “errors,” and the GNSS community models them via the introduction of effective delays in the pseudorange model. The largest delays are due to the ionosphere and the troposphere, which can introduce several meters of error into the modeled pseudorange measurements. While these delays are typically modeled, there are many other smaller delays that can be safely ignored in most applications.
Ionospheric Delay
Of the bigger delays that are typically modeled or otherwise compensated, the ionospheric delay is the largest and the hardest to model. The ionosphere is a portion of the upper atmosphere (from about 80 to 600 kilometers altitude) that consists of neutral atoms as well as atomic nuclei and free electrons — a plasma. This plasma is a dispersive medium. That is, it affects different frequencies of electromagnetic radiation differently.
At the frequencies used by GNSS satellites, it causes an appreciable frequency-dependent phase advance and code delay. We model this as a slowly varying unknown delay that is proportional to the total electron content in the line of sight of the signal and inversely proportional to the square of the signal’s frequency. Since it varies between signal frequencies, the ionosphere delay can be observed locally, given enough time, or estimated remotely, as is the case for precise-point positioning (PPP) or other state-space representations (SSR) of GNSS error sources.
Troposphere Delay
Troposphere delay, meanwhile, occurs due to the neutral atmosphere along the signal path. Electromagnetic waves propagate more slowly through denser media than through empty space, and they are diffracted through density gradients. As the atmosphere gets more dense near the ground, the effect increases and leads to significant model errors if uncompensated.
The water vapor content in the air varies much more than the rest of the atmospheric constituents and is often modeled separately. You may encounter literature referring to “wet” (hydrostatic) and “dry” (non-hydrostatic) delays. Typically, the dry delay is larger than the wet but much more easily modeled by a climate model. The wet delay varies from day to day and place to place and may contribute tens of centimeters of unmodeled delays, which would otherwise project into positioning error.
Satellite Clock Error
I glossed over satellite clock error before, but we really ought to include it in the model. The control segment provides information that models satellite clock error. This is good enough for most applications and can be used directly in the pseudorange model. Other applications require somebody to model the difference between the broadcast spacecraft clock error and the actual spacecraft clock error. PPP systems do this.
Ephemeris Errors
Earlier, we mentioned that the satellite signals carry a message that conveys the location of the spacecraft as a function of time. This function is parameterized with a large set of numbers collectively called the “ephemeris.”
Ephemeris errors, that is, differences between where you model the spacecraft and where it actually is, can contribute meters of range error to the pseudorange solution. These ephemeris errors are often ignored, but in some applications, they too are modeled and corrected for. Typically, a rover cannot directly observe the ephemeris error for a given satellite. PPP systems provide a correction term for this, and real-time kinematic (RTK) systems effectively cancel out ephemeris error.
Multipath and Non-Line-of-Sight
In an ideal reception environment, the signals from the satellites would travel along a single path and impinge directly upon the receiver antenna. This is called the “direct path” signal.
In real environments, the signal that arrives at the receiver antenna is often a mixture of signals that
traveled slightly different paths because the carrier wave is also reflected off a nearby surface — the side of a truck, a building facade, or even the ground — before arriving at the receiver. This effect is known as multipath. It produces interference in the receiver that results in time-varying delays, signal fades, signal enhancements, and other unpredictable behaviors. When you are standing in sunlight but can also see reflections of the sun in objects in your environment, you’re experiencing solar multipath.
Non-line-of-sight reception is an extreme form of multipath in which there is no direct path signal, only a signal arriving via an indirect path. Imagine a receiver near a building on one side of the street. The building may block the line of sight to a satellite, but that satellite’s signal is reflected off the building across the street to arrive at the receiver. These non-line-of-sight signals all travel farther than the direct path, and thus take longer to arrive at the receiver.
Multipath and non-line-of-sight reception are difficult to detect, especially when standing still. They’re also difficult to mitigate and may affect the resulting navigation solution by arbitrary amounts. Most GNSS users have experienced using a GNSS receiver in a city and seeing the estimate on the wrong city block. This is often the result of non-line-of-sight reception.
Modern receivers use some clever tricks to detect and mitigate multipath before they form a pseudorange measurement. But they aren’t perfect, and GNSS engineers know they also need to account for multipath in the pseudorange model.
Signal Noise
Finally, if we are being really complete, we should account for the random noise inherent in making a pseudorange observation. In the literature, this is often represented by e, sometimes with a subscript or superscript. This term accounts for thermal noise in the receiver and transmitter, channel noise in the transmission of the signal, and many other effects. This is an unknowable quantity whose value is drawn randomly from a known distribution.
Including the noise term makes it possible to rigorously account for noise and produce optimal solutions (assuming that the distribution of the noise is correct). For many applications, it’s entirely possible to omit explicit consideration of noise and still arrive at a reasonable solution.
Modeling a More Precise GNSS Positioning Solution
The result of all these complicating factors is that we have to rewrite our pseudorange model: (9)
pj = √((xr - xj)2 + (yr - yj)2 + (zr - zj)2) + c(δtr - δtji)
+ c(dri - dji) + cδtrel + Trj + Irji + mrji + erji
Here, as before, r subscripts refer to the receiver and j superscripts refer to satellite j. The newly introduced i superscript indexes the various frequencies sent by each satellite, d is an instrument delay specific to a frequency transmitted by the satellite or an RF processing chain used by the receiver, cδrel is the net effect of all the relativistic delays, Trj is the troposphere delay, Irji is the ionosphere delay, mrji is the multipath delay, and erji is the random noise term.
This new model contains terms for the major sources of error in the basic pseudorange navigation solution. If you can measure or model each of these terms, then you can “correct” your pseudoranges to isolate the range part, which in turn will make your position solution better.
Lower-precision applications can compensate for much of the error in the pseudorange model with low-precision error models. For instance, almost every receiver in the world has a troposphere delay model built in. These models use latitude and day of year to evaluate a model of the Trj term in the pseudorange model. The residual error — the difference between the modeled value and the true value of the troposphere delay — is small enough for the application.
But in high-precision applications, especially those with time constraints, the receiver needs another source of information to account for the errors in its delay models. The normal methods receivers use to correct their models, as we mentioned above, are called PPP and RTK (or various proprietary embodiments of these methods). A future article will cover in more detail how RTK works, but here we’ll describe the pseudorange component in a nutshell.
If you have access to an RTK data stream, what you are actually providing to your receiver are the observables from a nearby base station at a known location. Your receiver will then take what are called double differences of its measurements vs. the base station measurements. For pseudorange, that looks like this: (10)
∇∆prsjk = (prj - prk) - (psj - psk)
Here, s indicates the base station receiver, and satellite k is the “reference” satellite. We’ve left out some of the notation which would indicate that the receiver chooses a new k for each satellite system. In any case, if you consider each term in Equation 9, you’ll see that almost all the errors simply cancel each other out. All the receiver delays are common for all the measurements taken by each receiver, so they drop out when performing the cross-satellite difference (inside the parentheses).
Since receiver r and base station receiver s are close to each other — typically within a few tens of kilometers at most — and therefore the signals travel nearly the same path through the atmosphere, the environmental delays drop out in the second, cross-receiver difference. If we trust the receiver to take care of multipath and to estimate any residual errors left over after the double differencing, then the only terms remaining are the “baseline” vector components, the difference in position between the base station at its known location and the receiver at an unknown location. And the double-differenced measurements that relate to this position difference are nearly free of the largest sources of error in GNSS positioning.
This is the first half of why RTK is so effective at estimating receiver position with such miraculous accuracy – the errors drop out. The second half will have to wait for a future article – carrier phase ambiguity resolution. Suffice to say that the denser the network of base stations, the more effectively you can achieve such accuracy from anywhere.
For now, you know what’s happening under the hood of your GNSS receiver — how all GNSS receivers form the pseudorange solution and a little of how and why RTK can turn an ordinary GNSS receiver into the centimeter-level positioning powerhouse required for the most rigorous applications.