GNSS Doppler is a measurement of a received carrier's frequency shift relative to a reference, not a direct reading of vehicle speed. It contains satellite–receiver motion along the line of sight and clock-frequency effects. A receiver can combine suitable observations from several satellites, with satellite motion and clock models, to estimate its three-dimensional velocity and receiver clock drift.
This explains why a stationary receiver can observe non-zero Doppler, why one satellite cannot supply an unconstrained vehicle-speed estimate, and why a velocity field and a per-satellite Doppler field are different outputs. For an integrator interpreting logs, the important distinction is between an observation, the model used to interpret it, and the resulting velocity solution.
What changes the measured frequency
A tracking channel follows one satellite signal. Relative motion changes its received frequency, while differences between the transmitting and receiving frequency references also enter the observation. ESA-hosted Navipedia's basic-observables explanation identifies relative antenna motion and the receiver clock-frequency contribution. Clock drift is the rate of change of clock offset; it is not the clock offset itself.
Satellite motion matters even when the receiving antenna is fixed to the ground. As a satellite moves, its distance to that antenna generally changes. The signal therefore need not arrive at the nominal transmitted frequency. A non-zero Doppler value is not, by itself, evidence that the platform moved, that its position is wrong, or that an interference event occurred.
Use a declared convention before converting units. In the convention below, D is received-minus-reference Doppler in hertz and q is positive for an increasing apparent range:
q = −λD
Here λ is the wavelength of the particular signal, in metres. This conversion produces a range-rate-like observation in metres per second, not the receiver's speed over ground. A receiver log can define its sign differently; the minus sign is part of this stated convention, not an instruction to negate every manufacturer's Doppler field.
Separate satellite motion, receiver motion and clocks
A useful first-order teaching model is:
qᵢ ≈ uᵢ · (vₛ,ᵢ − vᵣ) + c(ḃᵣ − ḃₛ,ᵢ) + ηᵢ
The index i identifies a satellite/signal observation. The unit vector uᵢ points from receiver to satellite. The vectors vₛ,ᵢ and vᵣ are satellite and receiver velocities expressed consistently in a common coordinate frame. The receiver and satellite clock offsets use clock time minus the chosen system time. Their drifts ḃ are in seconds per second, so multiplying them by the speed of light c produces metres per second. The remaining term ηᵢ groups measurement noise and unmodelled rate effects.
The geometric term is a projection: only the relative motion along that satellite's sight line enters this scalar observation. The receiver-clock term is common in this simplified single-clock model; the satellite-clock term is satellite-specific. GNSS-SDR documents this Doppler/range-rate construction, including its sign and wavelength conversion.
This is not a complete navigation implementation. Operational processing must use consistent transmit/reception times, satellite states and reference frames, and handle Earth rotation and the corrections required by its model. RTKLIB's Doppler-residual implementation provides a concrete code-level example with relative velocities, a receiver clock-rate state and an Earth-rotation term. Those details must not be replaced by subtracting a satellite's orbital speed as a scalar.
Consider a hypothetical stationary-receiver calculation. Assume the satellite's geometric contribution along the sight line is −500 m/s, receiver velocity is zero, clock-rate contributions are zero, and other effects are omitted. Then q = −500 m/s. At GPS L1's nominal 1575.42 MHz, λ is approximately 0.1903 m, giving D of about +2.63 kHz under the convention above. The frequency comes from the stated geometry, not a vehicle travelling at 500 m/s. The carrier frequency is documented in the GPS signal plan; the assumed range rate is an invented teaching input, not a measured satellite pass or receiver result.
Why one satellite is not a speedometer
Even if satellite motion and clock terms were perfectly removed, one observation would constrain one projection of receiver velocity. It would not identify motion perpendicular to that direction.
For a purely illustrative vector example, let that direction be u = (1, 0, 0), with clock effects already removed. Receiver velocities (6, 0, 0) m/s and (6, 8, 0) m/s have the same projection of 6 m/s. Their total speeds are different: 6 m/s and 10 m/s. The one projection cannot distinguish them. The axes here are hypothetical calculation axes, not an antenna layout or a recommended satellite geometry.
In a real single-observation case, an unknown receiver clock drift adds another ambiguity. A model, constraint or external sensor could supply missing information, but that is additional information—not a property of the one Doppler number. Likewise, several frequencies from one satellite do not provide several independent sight-line directions.
How several observations support a velocity estimate
Using satellite state information and an approximate receiver position, processing can form a sight line for each usable observation and account for the satellite-motion contribution. The simplified model then supplies equations in three receiver-velocity components and one common clock drift.
An unconstrained, single-epoch solution of those four unknowns needs at least four suitable scalar observations whose geometry gives a full-rank system. Four observations in degenerate geometry are not enough merely because the count is four. Additional observations allow an overdetermined fit and residual checks; their quality and weighting still matter.
The technical analysis “How does a GNSS receiver estimate velocity?” describes least-squares and Kalman-filter approaches using simultaneous Doppler measurements. A filtered solution may also use prior states or other sensors. Extra clock/bias states, inter-system treatment and constraints change the unknowns and observation requirements. Thus “four satellites” describes the simple model above, not every receiver's minimum operating condition or integrity guarantee.
The estimated vector can be expressed in Earth-centred Earth-fixed coordinates or transformed into a local frame. Speed is a magnitude of the selected components; it is not another name for one component or one satellite's Doppler. Horizontal speed, three-dimensional speed, vertical velocity and course over ground answer different questions.
Compare three ways of obtaining velocity
The comparison below separates the computation and its time meaning rather than assigning an unconditional accuracy ranking.
| Method | Information used | Important interpretation or condition |
|---|---|---|
| Position differencing | Change between two computed position vectors divided by the elapsed time | Gives an interval-average estimate; position errors, their correlation, the interval and any filtering affect the result |
| Doppler-based estimation | Per-satellite carrier-frequency observations with satellite-motion, clock and geometry models | Estimates velocity without simply subtracting consecutive position outputs; tracking, modelling and estimator filtering affect its time response and errors |
| Time-differenced carrier phase (TDCP) | Changes in continuous accumulated carrier-phase observations between epochs | A constant ambiguity cancels in the time difference; slips or changing biases break that assumption, and the resulting time support depends on the differencing method |
For example, under an invented position-difference calculation, the true antenna remains stationary while two one-second-spaced position solutions have east errors of +1 m and −1 m. Differencing them creates an apparent east velocity of −2 m/s. This is arithmetic showing how errors enter a derived velocity, not a typical GNSS error or a claim that all position differences behave this way. Correlated errors and different processing can change the outcome.
TDCP differences the measurements, not two final position outputs. Cancelling a constant ambiguity does not require first fixing that ambiguity to an integer, but it does require a valid continuous phase relationship. The cycle-slip guide explains what breaks that relationship. Ji and colleagues' original velocity-method study compares observation-based methods under identified static/dynamic and open/urban conditions. Its experimental results should not be turned into an accuracy ordering for every receiver and environment.
Read the velocity message's method and time, not only its rate
A documented product example makes the distinction concrete. NovAtel's OEM7 BESTVEL documentation distinguishes a Doppler-derived velocity from velocities based on changes between position solutions. It identifies a velocity type and a latency field; when latency is present, the stated time of validity is the log time tag minus that latency. It also distinguishes direction of motion over ground from the direction a vehicle is pointed.
Those definitions belong to the documented NovAtel configurations. A message named “velocity”, a high logging rate or a zero-looking delay in another interface does not establish the same algorithm or epoch convention. A rate in hertz says how often records are delivered; it does not, by itself, say whether each value represents an epoch estimate, an interval average or a filtered state.
Keep observations and navigation outputs interpretable
For a satellite observation, preserve its satellite and signal identity, Doppler units and sign, measurement epoch and relevant tracking status. NovAtel's RANGE log, for example, names an instantaneous carrier-Doppler field in hertz separately from accumulated carrier phase in cycles and channel-status fields. Do not interpret the word “Doppler” in accumulated Doppler range as an already computed vehicle velocity.
For a velocity output, identify the reference frame, component directions, reference point, time system, epoch/latency and solution-validity fields. GNSS-SDR's PVT output documentation illustrates separate ECEF and local east/north/up velocity components and receiver clock-drift information. An antenna's velocity is not automatically a vehicle-origin or remote sensor's velocity, especially when the platform rotates. Keep the specified point of reference in a comparison.
The existing pseudorange and carrier-phase guide explains the underlying observations; this article adds the frequency-to-velocity mechanism. Use the receiver interface guide to carry the required fields and timing into an integration record. Nothing here assigns raw Doppler export, a velocity-accuracy figure or diagnostic logging to a ResiNav model.
The practical conclusion is to evaluate the right quantity: one satellite's frequency/range-rate observation, an estimated velocity vector, or a velocity derived across an interval. Compare them only after their geometry, clock treatment, units, frame, epoch and validity are understood. A stationary platform with changing Doppler is entirely compatible with a valid near-zero velocity solution.
NEXT STEP
Turn available platform information into an engineering review.
Use the Technology centre to frame the discussion, review relevant application scenarios, then send the available platform and receiver details for confirmation.