"Give me a wave that changes with time and a few antennas spaced a wavelength apart, and I will hand you how far, how fast, and which way for every object in the dark, the fog, and the driving rain. Ask me for a photograph and I will disappoint you."
A Ranging AI Agent
Prerequisites
This chapter assumes the forward-model discipline of Chapter 2: a sensor returns a physically transformed, information-losing proxy, and radar's proxy is deeply non-photographic. It leans hard on the sampling, frequency, and aliasing vocabulary of Chapter 3, because every radar quantity in this section is either a frequency you estimate or a phase you unwrap, and every "maximum unambiguous" limit is an aliasing limit in disguise. The Fourier and time-frequency machinery of Chapter 7 is the toolbox the whole radar signal chain runs on. You need the speed of light \(c \approx 3\times10^{8}\,\text{m/s}\) and comfort with complex exponentials. The detailed FMCW hardware pipeline (mixer, ADC, windowing, the two-dimensional FFT) is developed in Section 44.2; here we build only the three physical dimensions a radar measures and the resolution-versus-ambiguity trades that govern them.
Why radar earns a chapter of its own
Radar is the sensor that keeps working when vision and lidar quietly fail. Millimeter-wave energy passes through fog, rain, dust, and darkness with little attenuation, and, uniquely among the ranging sensors in this part, radar measures velocity directly from a single snapshot rather than by differencing frames. That is why every production automotive stack carries radar as its bad-weather backbone and why radar underpins contactless vital-sign sensing (Section 44.6). The cost is a strange, sparse, low-angular-resolution data product that looks nothing like an image: a handful of detections, each tagged with range, radial velocity, and a coarse angle, sitting in a sea of clutter and multipath. To build AI on radar you must first understand what those three numbers are, how the physics sets their precision, and why radar's angle is the weak dimension that four-dimensional imaging radar (Section 44.4) spends enormous engineering to improve. This section builds those three axes, range, Doppler, and angle, and the ambiguity limits that a data scientist ignores at their peril.
Range: distance as a frequency, not a stopwatch
What a modern automotive radar measures for range is not a round-trip time but a beat frequency. Pulsed radar can time an echo the way the lidar of Chapter 42 times a photon, but at automotive ranges the required timing precision is brutal, and short pulses need enormous peak power. The frequency-modulated continuous-wave (FMCW) trick sidesteps both. The transmitter emits a chirp: a sinusoid whose frequency ramps linearly by a bandwidth \(B\) over a sweep time \(T_c\), a slope \(S = B/T_c\). The echo from a target at range \(R\) is a delayed copy of that chirp, delayed by the round-trip time \(\tau = 2R/c\). Mixing the echo against the currently transmitted chirp produces a low-frequency beat tone whose frequency is proportional to that delay, and therefore to range:
$$f_b = S\,\tau = \frac{2 B R}{c\,T_c}, \qquad R = \frac{c\,T_c\,f_b}{2B}.$$Why this reframing matters is that range estimation becomes spectral estimation: run a Fourier transform on the beat signal and each peak is a target at a known distance. That single fact makes the entire apparatus of Chapter 7 the native language of radar. How it sets precision follows the classic Fourier resolution limit: two tones are separable only if they differ by more than one over the observation window. Working that through, range resolution depends on bandwidth alone:
$$\Delta R = \frac{c}{2B}.$$A 4 GHz sweep, typical of a 77 GHz automotive sensor, yields \(\Delta R \approx 3.75\) cm. Nothing about transmit power, antenna size, or integration time changes this: only sweeping more bandwidth separates two targets in range. That is the first lever a radar engineer reaches for, and the first number a perception model inherits.
Every radar limit is a resolution-versus-ambiguity pair
Radar has no free lunch; each measurement axis comes with two numbers that pull against each other. Resolution is the smallest difference you can tell apart, set by how long or how wide your observation is. Maximum unambiguous value is the largest quantity you can measure before it aliases and folds back, set by how finely you sample. For range, resolution is \(c/2B\) (widen the sweep) while the maximum unambiguous range is set by the ADC sample rate that captures the beat tone. For velocity, resolution improves with a longer frame while the unambiguous velocity shrinks as chirps get slower. For angle, resolution improves with a wider antenna array (aperture) while ambiguity appears if the elements sit more than half a wavelength apart. Whenever a radar dataset shows a target at an impossible speed or a ghost at a mirrored angle, an ambiguity limit was crossed. Knowing which one is half of radar debugging, and it is the same aliasing story Chapter 3 told for any sampled signal.
Doppler: velocity from phase across a burst of chirps
What makes radar special among ranging sensors is that it reads radial velocity directly. A moving target shifts the carrier frequency by the Doppler effect, \(f_D = 2 v_r / \lambda\), where \(v_r\) is the line-of-sight (radial) speed and \(\lambda\) the wavelength. At 77 GHz, \(\lambda \approx 3.9\) mm, so even a 1 m/s walk produces a measurable shift. Why a single chirp cannot read it is that within one short sweep the Doppler-induced frequency change is tiny compared to the range beat tone; it hides inside the range bin. The fix is to transmit a burst of \(N\) identical chirps spaced by \(T_c\) and watch how the phase of a target's range peak evolves from chirp to chirp. A target moving \(v_r\) per second advances its round-trip distance by a sliver each chirp, rotating the peak's phase by a constant increment. That phase progression is itself a tone, and a second Fourier transform across chirps, the "Doppler FFT," resolves velocity. This two-transform structure is the range-Doppler map developed fully in Section 44.3.
How the trades fall out: velocity resolution improves the longer you observe, so it depends on the total frame time \(T_f = N T_c\), giving \(\Delta v = \lambda / (2 T_f)\). The maximum unambiguous velocity, by contrast, is set by how often you sample the target's phase, once per chirp, so \(v_{\max} = \lambda / (4 T_c)\). Faster chirps (small \(T_c\)) widen the velocity window but, for a fixed number of chirps, shorten the frame and blur resolution. This is a genuine bind: seeing fast objects and finely separating slow ones are competing goals traded through the chirp timing.
The highway closing-speed alias that read as a stopped car
An automotive team validating a 77 GHz front radar chased an intermittent phantom: on the highway, an oncoming vehicle in the opposing lane occasionally reported as nearly stationary. The range was right, the angle was right, the velocity was nonsense. The cause was a Doppler ambiguity. Their waveform set \(v_{\max} \approx \pm 25\) m/s to keep the frame short for low latency, but a 30 m/s ego speed closing on a 20 m/s oncoming car gave a 50 m/s relative radial speed. That folded past \(+25\) into an aliased reading near a small negative value, indistinguishable from a slow-moving obstacle in the same lane. The fix was not more compute but waveform design: interleaving two chirp rates so the true velocity is the one consistent across both, a standard automotive de-aliasing scheme. The lesson for anyone training on radar tensors: an out-of-range velocity is often a real fast object wearing a disguise, and a model that learns to trust the raw Doppler bin will inherit the alias. Ground-truth labels must be de-aliased before they teach anything.
Angle: direction from an antenna array, the weak dimension
What gives radar its third axis, the direction to a target, is not one antenna but several. A wavefront arriving from angle \(\theta\) reaches neighboring receive antennas at slightly different times, imprinting a progressive phase shift across the array. For elements spaced \(d\) apart, the phase step between adjacent elements is \(\Delta\phi = 2\pi d \sin\theta / \lambda\). Estimating \(\theta\) is, once again, estimating the frequency of a tone, this time a spatial tone across antennas, so a third FFT (the "angle FFT") or a higher-resolution estimator like MUSIC recovers direction. Why angle is radar's weak dimension is aperture. Angular resolution scales as \(\Delta\theta \approx \lambda / (N_{\text{ant}} d)\): to rival a camera's fraction-of-a-degree acuity you would need hundreds of antennas physically spanning a wide aperture, which is expensive and bulky. A typical automotive radar with a dozen-odd virtual channels resolves angle to only a degree or several, which is why radar detections are sharp in range and velocity but smeared in cross-range.
How engineers cheat the antenna count is the central idea behind modern imaging radar: MIMO. With \(N_{\text{tx}}\) transmit and \(N_{\text{rx}}\) receive antennas emitting separable (for example, time- or code-multiplexed) waveforms, the receiver synthesizes a virtual array of \(N_{\text{tx}} \times N_{\text{rx}}\) elements from far fewer physical ones. Three transmitters and four receivers manufacture a twelve-element aperture; the 4D imaging radars of Section 44.4 push this to hundreds of virtual channels to approach lidar-like angular density while keeping radar's weather and velocity advantages. The half-wavelength spacing rule from the key-insight callout governs the design: pack elements too far apart and the spatial tone aliases into grating lobes, ghost targets at mirrored angles that a naive detector will happily report as real. The code below turns these three axes into the concrete numbers a system designer signs off on.
import numpy as np
c = 3e8 # speed of light (m/s)
fc = 77e9 # carrier frequency (Hz)
lam = c / fc # wavelength ~ 3.9 mm
# Range axis: set by chirp bandwidth
B = 4e9 # sweep bandwidth (Hz)
dR = c / (2 * B) # range resolution (m)
# Doppler axis: set by chirp timing and frame length
Tc = 60e-6 # chirp duration incl. idle (s)
N_chirps = 128 # chirps per frame
Tf = N_chirps * Tc # frame time (s)
dv = lam / (2 * Tf) # velocity resolution (m/s)
v_max = lam / (4 * Tc) # +/- unambiguous velocity (m/s)
# Angle axis: set by the (virtual) array aperture
N_tx, N_rx = 3, 4
N_virt = N_tx * N_rx # virtual array elements via MIMO
d = lam / 2 # half-wavelength element spacing
# Boresight angular resolution (rad -> deg), small-angle form.
dtheta = np.degrees(lam / (N_virt * d))
print(f"range resolution : {dR*100:5.1f} cm")
print(f"velocity resolution: {dv:5.2f} m/s")
print(f"unambiguous |v| : {v_max:5.1f} m/s")
print(f"virtual elements : {N_virt}")
print(f"angular resolution : {dtheta:5.1f} deg (boresight)")
# range resolution : 3.8 cm
# velocity resolution: 0.25 m/s
# unambiguous |v| : 16.2 m/s
# angular resolution : 9.5 deg (boresight)
Code 44.1.1 makes the asymmetry that defines radar tangible: 3.8 cm of range precision beside 9.5 degrees of angular blur. That single comparison explains most of what looks odd in raw radar data and drives the representation choices of the rest of this chapter. Setting up and inverting these three transforms by hand is real work, and a library collapses it.
Right tool: from raw cube to range-Doppler-angle in a few lines
Turning a raw radar ADC cube into range, Doppler, and angle spectra by hand means writing windowing, three FFT stages, per-axis calibration, and a CFAR detector, easily 150 to 300 lines before a single object appears. The open-source pyradar-style toolchains and vendor SDKs (for example Texas Instruments' mmwave processing stack, or the community OpenRadar library) reduce the core to a handful of calls: range_fft = np.fft.fft(adc, axis=range_axis), doppler_fft = np.fft.fft(range_fft, axis=chirp_axis), then OpenRadar.dsp.aoa_capon(...) or a bundled MUSIC routine for angle, and OpenRadar.dsp.ca_cfar(...) for detection. That is roughly 200 lines of hand-rolled DSP down to about a dozen. You still own the two things only you know: the waveform parameters that set the axes (Code 44.1.1) and the extrinsic calibration that places detections in the vehicle frame; the library owns the FFTs, the window functions, and the CFAR bookkeeping.
Exercise: design a waveform, then break it
You are specifying a 77 GHz radar for a low-speed warehouse robot that must separate two pallets 8 cm apart in range and detect forklifts closing at up to 8 m/s, all at 20 Hz frame rate. (1) What minimum sweep bandwidth \(B\) meets the 8 cm range-separation requirement? (2) Choose a chirp time \(T_c\) so that \(v_{\max} \geq 8\) m/s, and state the resulting velocity resolution for a 128-chirp frame; check the frame fits inside the 50 ms budget. (3) Your MIMO array has 3 transmit and 4 receive antennas at half-wavelength spacing; estimate the boresight angular resolution and argue whether it can separate two pallets side by side at 5 m. (4) A colleague widens the element spacing to \(1.5\lambda\) to gain aperture "for free." Explain, using the grating-lobe mechanism, what phantom detections this introduces and why they are dangerous near a human co-worker. The aliasing framing is in Chapter 3.
Self-check
1. Two radars observe the same scene. Radar A sweeps 1 GHz of bandwidth, radar B sweeps 4 GHz, and everything else is identical. Which resolves two closely spaced targets in range, and by roughly what factor? Which quantity, if any, differs in their velocity resolution?
2. A target reports a physically impossible radial velocity larger than the sensor's specified \(v_{\max}\). Is this a hardware fault, a real fast object, or a software bug, and which single waveform parameter would you change to disambiguate it?
3. Radar delivers centimeter range accuracy but only several degrees of angular accuracy from the same measurement. State the physical quantity that sets each, and explain in one sentence why MIMO improves the weaker one without adding physical antennas.
What's Next
In Section 44.2, we open up the FMCW and mmWave signal chain that turns these three physical axes into data. We follow a chirp from the voltage-controlled oscillator through the mixer, the analog-to-digital converter, and the windowed multi-dimensional FFT, and we confront the practical realities this section idealized away: phase noise, antenna calibration, interference between sensors, and the constant false-alarm-rate detection that decides which spectral peaks become the sparse point cloud your models will consume.