Back to all blogs
.

How to Detect and Compensate Doppler Shift

In this article, we learn how to estimate doppler shift in a signal and also how to compensate it.

In the previous article What is Doppler Shift , we learnt that the Doppler shift introduces a frequency offset to the transmitted signal caused by the relative motion between the transmitter and the receiver. In a real-world receiver, the received signal will be the noisy, shifted version arriving at your antenna.

To demodulate data correctly, a receiver must perform two critical tasks: Detection (estimating how much the frequency has shifted) and Compensation (undoing that shift so the signal is centered back at the expected frequency).


Detection: The FFT Method

The most common way to detect a Doppler shift is by analyzing the signal in the frequency domain. By taking the Fast Fourier Transform (FFT) of the received signal, we can identify the “bin” where the signal’s energy is concentrated.

If we know our signal was transmitted at ftf_t, but the FFT shows a peak at fpeakf_{peak}, the estimated Doppler shift f^d\hat{f}_d is:

f^d=fpeakft\hat{f}_d = f_{peak} - f_t

Frequency Resolution

Your ability to detect small shifts depends on your Frequency Resolution (Δf\Delta f). This is determined by your sampling rate (fsf_s) and the number of points in your FFT (NN):

Δf=fsN\Delta f = \frac{f_s}{N}

To detect a subtle 12 Hz shift from a walking pedestrian, you need a much larger NN (a longer observation window) than you would to detect a 10 kHz shift from a supersonic aircraft.


Compensation: Frequency Derotation

Once we have estimated f^d\hat{f}_d, we need to “undo” the damage. Since a frequency shift is essentially a phase that increases linearly over time, we can compensate for it by multiplying the received signal by a complex exponential with the negative of the detected shift.

For a complex baseband signal r(t)r(t), the compensated signal scorrected(t)s_{corrected}(t) is:

scorrected(t)=r(t)ej2πf^dts_{corrected}(t) = r(t) \cdot e^{-j 2\pi \hat{f}_d t}

This process is known as Frequency Derotation. It effectively “unwinds” the extra rotation added by the Doppler effect, bringing the signal back to its intended baseband position.

Doppler Figure 1 — Doppler shift estimation and compensation

The figure above illustrates the two-step process of recovering a signal affected by Doppler shift. In the Frequency Domain (top), we perform detection by identifying the spectral peak of the received signal (Green). While the signal was expected at ft=200f_t = 200 Hz, the FFT reveals a clear shift to fpeak=250f_{peak} = 250 Hz. By calculating the difference, we estimate a Doppler shift of +50+50 Hz.

In the Time Domain (bottom), we apply compensation by “rotating” the received signal by the estimated offset. Once the offset is applied, the compensated signal is close to the original transmitted signal.