>
section 2 of 168 min read

2. The Doppler Whistle: Velocity from Frequency Shift

2.1 The intuition we already have

You are standing next to a railroad track. A train comes toward you blowing its whistle. As it approaches, the whistle's pitch sounds higher than its true frequency. As it passes and recedes, the pitch drops. The same physical whistle, the same physical hand on the lever, but the listener perceives a different frequency depending on whether the source is approaching or receding. This is the Doppler effect, named after Christian Doppler who described it in 1842 for sound and starlight.

The reason is mechanical. The crests of a sound wave (or any wave) are emitted at fixed intervals at the source, but if the source moves toward you, each new crest is emitted from a position closer to you than the previous one. The crests pile up in your direction. From your perspective, the time between crests, which is the period of the wave, is shorter, which means the frequency is higher. If the source moves away, crests stretch out, period increases, frequency drops. The fractional shift in frequency equals the ratio of the source's velocity along the line of sight to the wave's propagation speed.

2.2 Doppler in radar: a double bounce

Radar Doppler is the same effect but with a twist. The radar transmits at frequency f0f_0, the wave bounces off a moving target, and the echo comes back. The target acts as a moving receiver of the outgoing wave (which already gives one Doppler shift) and then as a moving transmitter of the reflected wave (which gives a second shift in the same direction). The two shifts add up.

For a target with radial velocity vrv_r (positive for approaching), the round-trip Doppler shift is

fd=2vrλ=2vrf0cf_d = \frac{2 v_r}{\lambda} = \frac{2 v_r f_0}{c}

Two factors of vr/cv_r/c, doubled because of the round trip. Sign convention: positive vrv_r means the target is moving toward the radar; in that case fdf_d is positive, meaning the echo is at higher frequency than the transmit. A receding target gives fd<0f_d < 0 and a lower-frequency echo.

Number sanity. A 10-GHz X-band radar has λ=3\lambda = 3 cm. A target moving at 100 m/s (a fast jet at low altitude, say) gives fd=2×100/0.03=6700f_d = 2 \times 100/0.03 = 6700 Hz. A pedestrian walking at 1.5 m/s in front of a 77-GHz automotive radar (λ4\lambda \approx 4 mm) gives fd=2×1.5/0.004=750f_d = 2 \times 1.5 / 0.004 = 750 Hz. A baseball pitched at 45 m/s past a 24-GHz sports radar (λ=1.25\lambda = 1.25 cm) gives fd=2×45/0.0125=7200f_d = 2 \times 45 / 0.0125 = 7200 Hz. These are easy frequencies to measure with cheap audio-band electronics. That is the entire reason police radar guns and sports radars work cheaply.

The direction of motion is encoded in the sign of the Doppler shift. A simple amplitude detector, however, only sees magnitude, not sign; it cannot distinguish approaching from receding. Modern Doppler radars solve this by using quadrature (I/Q) detection, mixing the echo against both cos(2πf0t)\cos(2\pi f_0 t) and sin(2πf0t)\sin(2\pi f_0 t) to recover both the in-phase and quadrature components of the complex baseband signal. The sign of the imaginary part tells you the sign of fdf_d. We met I/Q in Chapter 7 for SSB and we will meet it again whenever a radar wants to know which way a target is going.

2.3 Why radial velocity, not full velocity

Pay attention to the word radial. A target moving across the beam at a thousand meters per second produces zero Doppler shift if its motion is perpendicular to the line of sight. The Doppler shift only sees the component of velocity along the line connecting radar and target.

plaintext
                                 v

                                 ┃ (full velocity)
                              v  ↗
                       v_r     ↗ │
                        ↗ ↗ ↗ ↗   ↘ v_⊥
                       ↗            ↘
                      ↗               ↘
                  ┌──────┐
                  │radar │
                  └──────┘
   v_r = v cos(θ)   →   only this component shows up in Doppler

A target flying tangentially to the radar at high speed shows up as stationary in Doppler. This is the reason a single-radar system can be fooled by a target moving carefully along an arc that keeps its radial velocity small. Multistatic radars with several geographically separated receivers can recover the full velocity vector, which is why some military radar networks share data across stations.

2.4 Continuous-wave radar: pure Doppler, no range

The simplest Doppler radar transmits a continuous unmodulated tone, the receiver mixes the echo with the original tone, and the difference frequency is fdf_d. That is it.

plaintext
   TX: cos(2π f_0 t)            (continuous, unmodulated)


   antenna → target (moving) → echo: cos(2π (f_0 + f_d) t + φ)

   mixer × cos(2π f_0 t):
       output = (1/2) cos(2π f_d t + φ) + (1/2) cos(2π (2f_0 + f_d) t + φ)
       low-pass filter:
       output = (1/2) cos(2π f_d t + φ)
       
   Spectrum analyzer reads f_d → v_r = f_d λ / 2.

This is CW radar. It cannot give you range, because there is nothing in the transmitted waveform that tells you when a particular crest was launched, so there is no way to time-of-flight it. But it gives you velocity, with extreme precision, and from very simple hardware. Police speed radar is exactly this. So is the speed gun behind home plate at a baseball game. So is the motion sensor that turns on outdoor security lights. So is contactless heart-rate monitoring of a patient lying still in bed: their chest oscillates by a few millimeters per heartbeat, which produces a tiny modulated Doppler return at typical heart frequencies of around 1 Hz.

CW radar's biggest practical headache is TX-RX leakage. The transmitter is on, broadcasting at f0f_0, while the receiver is also on, listening for f0+fdf_0 + f_d where fdf_d might be a kilohertz. The TX is 100 dB stronger than the echo. They cannot share an antenna directly without sophisticated isolation. Solutions: separate TX and RX antennas with shielding between them, ferrite circulators, or active leakage cancellation that subtracts a sample of the TX from the RX.

2.5 FMCW: the trick that gives range from a CW-like radar

Pure CW gives velocity but no range. Pure pulse gives range but bad Doppler. FMCW (frequency-modulated continuous-wave) blends them: transmit continuously, but sweep the frequency linearly over time. A swept tone is a chirp.

plaintext
   Transmitted frequency f_TX:                Echo frequency f_RX (delayed by τ):
        ╱                                            ╱  
       ╱                                            ╱   ↑
      ╱                                            ╱    f_b (beat)
     ╱                                            ╱     ↓
    ╱   slope = B/T_chirp                        ╱
   ╱                                            ╱
   ─┴──────────────────► t                     ─┴──────────────────► t

Sweep from f0f_0 to f0+Bf_0 + B over TchirpT_{chirp} (slope B/TchirpB/T_{chirp}). A target at range RR delays the echo by τ=2R/c\tau = 2R/c. At any instant, the echo's frequency is what the transmitter was emitting τ\tau ago, which is lower than the current TX frequency by Bτ/TchirpB\tau/T_{chirp}. Mixing echo with current TX yields the beat frequency:

fb=BTchirpτ=2RBcTchirpR=cTchirpfb2Bf_b = \frac{B}{T_{chirp}} \cdot \tau = \frac{2 R B}{c\, T_{chirp}} \quad\Rightarrow\quad R = \frac{c\, T_{chirp}\, f_b}{2 B}

Cars use slopes around 101210^{12} to 101310^{13} Hz/s, giving beats from kHz to tens of MHz, easy to FFT in a cheap microcontroller. The genius of FMCW: range is converted into a frequency, which an FFT recovers directly. A car radar samples a few microseconds of beat-frequency signal, runs an FFT, and reads off all targets' ranges from the spectrum. Each FFT bin is a range bin; each peak is a target.

2.6 FMCW with Doppler: the trick gets one more layer

If the target is moving, both the round-trip delay τ\tau and the Doppler shift fdf_d contribute to the beat frequency. With a single chirp slope, fb=(B/Tchirp)τ+fdf_b = (B/T_{chirp})\tau + f_d, and you cannot separate range from velocity. The trick is to sweep the chirp both ways: an upward chirp gives fb,up=(B/T)τ+fdf_{b,up} = (B/T)\tau + f_d and a downward chirp gives fb,down=(B/T)τ+fdf_{b,down} = -(B/T)\tau + f_d. Adding gives 2fd2 f_d, subtracting gives 2(B/T)τ2(B/T)\tau. You recover both range and Doppler.

plaintext
   Triangular FMCW:
            ╱╲      ╱╲      ╱╲
           ╱  ╲    ╱  ╲    ╱  ╲
          ╱    ╲  ╱    ╲  ╱    ╲
         ╱      ╲╱      ╲╱      ╲
   f_TX ─┴────────────────────────► t
 
   On up-ramps: f_b_up   = (B/T)·τ + f_d
   On down-ramps: f_b_down = (B/T)·τ - f_d  [opposite sign, sign convention]
 
   sum   → 2(B/T)·τ → range
   diff  → 2 f_d   → velocity

A more modern variant uses a fast-chirp radar, where each chirp is short enough that the target effectively does not move during it. Range is recovered from the FFT within a chirp, Doppler from the FFT across chirps. This is the architecture of almost every automotive 77-GHz radar sold today, including the chips inside Tesla, Bosch, Continental, and Aptiv units. We will see the math in Section 6.

FM is to AM as FMCW is to pulse. In Chapter 7 we saw that frequency modulation is more robust than amplitude modulation in noisy channels. The same principle reappears in radar: FMCW puts the range information into a frequency rather than into the timing of an amplitude pulse, which makes it easier to extract from noise with simple FFTs and easier to integrate over long time windows. FMCW radar is the natural sibling of FM radio.