Skip to content

Radar signal processing

Range from an echo's delay, speed from its Doppler turn: compress a chirp with a matched filter, then build a range–Doppler map across pulses.

Before this26.1 · 27.3 · 28.3 · 2 more
Chapter 33 · Lesson 1 of 2

First, the picture

A radar sends a long burst for energy, then squeezes each echo into a short peak. Watch the echoes of two targets 30 m apart below: one long smear turns into two separate peaks.

A long chirp, a short peak

Echoes of two targets at 4500 and 4530 m (amplitude 0.5 each, no noise); 10 µs, 10 MHz chirp.

Two echoes, each 1500 m long, overlapping from 4530 to 6000 m: no way to see two targets.

stage
raw
peaks at
—
−3 dB width
—
0.00 / 12.00 s
Describe this picture

Echoes of two targets at 4500 and 4530 m (amplitude 0.5 each, no noise) of a 10 µs, 10 MHz chirp, in two panels, one above the other. The first, the raw echo, shows ∣echo∣\lvert\text{echo}\rvert from 0 to 1.1 as a solid trace against range from 4300 to 6200 m, with two dotted vertical lines at the targets. The second, compressed, shows the matched filter’s output from 0 to 0.6 against range from 4400 to 4650 m, with filled diamonds at its two peaks and the same two dotted lines. The readouts are the stage, where the peaks are in metres and their −3 dB width. There is no control. The 12 s clip opens on the raw echo: two echoes, each 1500 m long, overlapping from 4530 to 6000 m, with no way to see two targets. From 3 s the template slides across the echo, as in 26.1, and the compressed trace builds behind it: correlated with the chirp, the energy gathers at each target’s range. From 8 s the two peaks are marked: at 4498.0 m and 4532.0 m, each about 13.3 m wide, with side lobes reaching −10.5 dB.

Delay gives range

A radar sends out a short burst of radio waves and listens. Anything in the way sends a little of it back: an aircraft, a car, a flock of birds. That faint copy is the echo, and the time it takes to come back tells me how far away the thing is.

Radio waves travel at the speed of light, c=3×108c=3\times10^8 m/s. On this page bare cc means that speed and nothing else. The burst goes out and comes back, so it covers the distance twice.

If the echo arrives a time tdt_\text{d} after the burst left, the target’s range, its distance from the radar, is

range=c td2.\text{range}=\frac{c\,t_\text{d}}{2}.

I call tdt_\text{d} the round-trip delay. Each microsecond of delay is 150 m of range, so an aircraft 4.5 km away echoes after 30 µs.

The radar’s waves ride on a carrier, here at f1=10f_1=10 GHz. Like the receivers of I/Q and complex baseband (27.3), the radar mixes each echo down from the carrier and keeps I and Q as one complex number. Everything on this page happens at complex baseband.

Every signal on this page is synthetic: a stated chirp, stated targets, and noise from the site’s seeded random generator. No recorded radar data is used.

Short burst or long burst

Two aircraft 30 m apart in range echo 0.2 µs apart. If the burst lasts 10 µs, their echoes overlap almost completely, and I can’t tell there are two. A burst only 0.1 µs long would keep them apart.

But a short burst carries little energy. A transmitter has a largest power it can put out, and energy is power times duration. At the same power the 10 µs burst carries 100 times the energy of the 0.1 µs one, and the echo from a far target is faint.

Measured in range, a burst TpT_\text{p} seconds long is cTp/2cT_\text{p}/2 long. I call TpT_\text{p} the pulse length. With Tp=10T_\text{p}=10 µs the echo is 1500 m long, so the echoes of any two targets closer than 1500 m overlap.

At the end of Matched filters and detection (26.1) a long chirp gave a narrow correlation peak. Radar uses that to get both: a long burst for the energy, and a narrow peak for telling targets apart.

The chirp

The radar sends a chirp, a tone whose frequency glides at a steady rate, as in “Reading a chirp” of Spectrograms & the STFT (15.5). At complex baseband this page’s chirp is

q(t)=ejπ(Bch/Tp)(t−Tp/2)2,q(t)=e^{j\pi(B_\text{ch}/T_\text{p})(t-T_\text{p}/2)^2},

It runs for 0≤t<Tp0\le t<T_\text{p}. Its phase divided by 2π2\pi, differentiated, gives the frequency (Bch/Tp)(t−Tp/2)(B_\text{ch}/T_\text{p})(t-T_\text{p}/2). So the frequency glides from −Bch/2-B_\text{ch}/2 to Bch/2B_\text{ch}/2. The span it sweeps, BchB_\text{ch}, is the chirp’s bandwidth.

Here Bch=10B_\text{ch}=10 MHz and Tp=10T_\text{p}=10 µs, so the chirp sweeps from −5 MHz to 5 MHz in 10 µs. Its size is 1 throughout.

The radar samples at fs=20f_s=20 MHz, so the chirp is Nq=200N_q=200 samples, q[k]=q(k/fs)q[k]=q(k/f_s) for k=0k=0 to 199. One sample of delay, 0.05 µs, is c/2fs=7.5c/2f_s=7.5 m of range: one range bin.

An echo is a copy of the chirp, delayed by tdt_\text{d} and scaled by how strongly the target reflects. I give each target an amplitude; 1 is as strong as the noise will be later.

A long chirp, a short peak

To find a known pulse in a record, 26.1 slid the template along it and summed the products. The chirp is complex, so I use its conjugate q∗[k]q^*[k] from Complex numbers for signals (3.3). At the right lag each product is then A q[k] q∗[k]=AA\,q[k]\,q^*[k]=A, never turned away by the chirp’s phase.

I also divide by NqN_q, so that a lone echo of amplitude AA peaks at AA:

y[ℓ]=1Nq∑k=0Nq−1x[ℓ+k] q∗[k].y[\ell]=\frac{1}{N_q}\sum_{k=0}^{N_q-1}x[\ell+k]\,q^*[k].

This is the matched filter of the radar. Lag ℓ\ell is a delay of ℓ\ell samples, so the output at ℓ\ell belongs to range 7.5ℓ7.5\ell m.

The picture at the top of the page puts two targets 30 m apart, at 4500 m and 4530 m, each of amplitude 0.5, with no noise. It shows the raw echo and then the matched filter’s output.

Watch the raw panel first. The two echoes overlap over most of their length, and nothing in the trace marks where the second one starts. Then watch the compressed panel: each 1500 m echo has become a peak a dozen metres wide.

To place a peak between range bins, the instrument fits a parabola through the three highest values in dB. Both instruments on this page refine every peak this way.

Here each peak lands 2.0 m outward from its target, and the fit puts its height at 0.51, against the true 0.5. The other target’s side lobe lowers the sample on the inner side, so the parabola leans outward. Between them, at 4515 m, the output falls to 0.010, 34.0 dB below 0.5.

A target alone has side lobes no higher than −13.3 dB below its peak. The highest side lobes here lie outside the pair, near 4477 m and 4553 m. There one target’s first side lobe lines up with the other’s and adds to it, reaching −10.5 dB relative to 0.5.

Why the peak is narrow

Slide the chirp against itself by a shift t0t_0 and multiply, as the matched filter does:

q(t+t0) q∗(t)=ejπ(Bch/Tp)t02×ej2π(Bcht0/Tp)(t−Tp/2).\begin{aligned} q(t+t_0)\,q^*(t)&=e^{j\pi(B_\text{ch}/T_\text{p})t_0^2}\\ &\quad\times e^{j2\pi(B_\text{ch}t_0/T_\text{p})(t-T_\text{p}/2)}. \end{aligned}

The first factor does not depend on tt. The second is a tone at Bcht0/TpB_\text{ch}t_0/T_\text{p} hertz: a shifted chirp differs from the chirp by the same frequency all along.

The overlap lasts about TpT_\text{p}, so the tone makes about Bcht0B_\text{ch}t_0 turns while the products are summed. At t0=1/Bcht_0=1/B_\text{ch} it makes one whole turn, and the sum cancels: the output’s first zero. For t0t_0 much shorter than TpT_\text{p}, the output follows the sinc of From series to transform (8.1):

∣y(t0)∣≈∣sinc(Bcht0)∣.\lvert y(t_0)\rvert\approx\lvert\mathrm{sinc}(B_\text{ch}t_0)\rvert.

A delay of 1/Bch1/B_\text{ch} is c/2Bchc/2B_\text{ch} of range. Textbooks call it the range resolution:

c2Bch=3×1082×107=15.0 m.\frac{c}{2B_\text{ch}}=\frac{3\times10^8}{2\times10^7}=15.0\ \text{m}.

It is a convention, and it is worth knowing what it measures. It is the distance from the peak to its first zero, and the width of the peak at −3.9 dB, where sinc(12)=2/π\mathrm{sinc}(\tfrac12)=2/\pi. At −3 dB the peak is 13.3 m wide.

The instrument’s “−3 dB width” readout measures it on a fine grid, not on the samples 7.5 m apart. The samples beside the peak sit at −3.9 dB, so joining them to the peak with straight lines would cut the corners and give only 12.1 m.

Two targets c/2Bchc/2B_\text{ch} apart are at the edge. If their echoes arrive in step and only 15 m apart, the two peaks blur into one bump with no dip. At 30 m, as in the instrument, each peak sits on the other’s first zero, and the dip between them is deep.

Compression and its gain

The chirp is TpT_\text{p} long, and its peak is about 1/Bch1/B_\text{ch} wide. The ratio, BchTp=100B_\text{ch}T_\text{p}=100, is how much the matched filter squeezes the pulse: 1500 m of echo becomes a peak of 15 m. Squeezing a long pulse into a short peak is pulse compression.

The squeeze also raises the echo above the noise. 26.1 showed that a matched filter multiplies the SNR per sample by the pulse’s number of samples, NqN_q. Here that is 200, or 23.0 dB.

Books quote BchTp=100B_\text{ch}T_\text{p}=100, 20.0 dB, as the compression gain. That count holds when the receiver keeps only the chirp’s 10 MHz of band. This page samples at twice the band and its noise fills all 20 MHz, so the count of samples, 200, is the one that applies.

Speed from the turn between pulses

Now let’s ask how fast a target moves. Write the carrier as the spinning point ej2πf1te^{j2\pi f_1t} of Complex exponentials & phasors (3.4); the real wave is its real part. The echo comes back delayed, so its carrier is ej2πf1(t−td)e^{j2\pi f_1(t-t_\text{d})}.

Mixing down to baseband, as in 27.3, removes ej2πf1te^{j2\pi f_1t}. What is left of an echo of amplitude AA is

A q(t−td) e−j2πf1td.A\,q(t-t_\text{d})\,e^{-j2\pi f_1t_\text{d}}.

The delay moves the chirp, and it also turns the echo’s phase by −2πf1td-2\pi f_1t_\text{d}.

That phase is very sensitive. The wavelength c/f1c/f_1 is 3 cm. A target that moves 1.5 cm closer shortens the round trip by 3 cm, and the phase makes a whole turn.

Let the target move toward the radar at a steady radial velocity vrv_\text{r}, its speed along the line from the radar, counted positive when it approaches. Its range is then the start range minus vrtv_\text{r}t. Put that range into tdt_\text{d}, and the phase grows by 2π(2vrf1/c)2\pi(2v_\text{r}f_1/c) every second.

A phase that grows at a steady rate is a frequency, as the carrier offset was in “A carrier offset spins the constellation” of 27.3. This one is the Doppler shift:

fD=2vrf1c=2vrc/f1.f_\text{D}=\frac{2v_\text{r}f_1}{c}=\frac{2v_\text{r}}{c/f_1}.

At 20 m/s it is 1333.3 Hz.

Within one pulse that is far too slow to see. In 10 µs, 1333.3 Hz turns the phase by 0.013 of a turn, under 5°.

Many pulses: fast and slow time

So the radar sends pulse after pulse: Np=64N_\text{p}=64 of them, one every TPRI=100T_\text{PRI}=100 µs. TPRIT_\text{PRI} is the pulse repetition interval, and its inverse, fPRF=1/TPRI=10f_\text{PRF}=1/T_\text{PRI}=10 kHz, is the pulse repetition frequency, or PRF.

From one pulse to the next, the echo’s phase turns by 2πfDTPRI2\pi f_\text{D}T_\text{PRI}. At 20 m/s that is 0.133 of a turn, enough to see. Read once per pulse, the echo’s phase is a tone at fDf_\text{D}, sampled at fPRFf_\text{PRF}.

Let me arrange the samples in a table, one row per pulse mm and one column per range bin nn. Along a row, time steps by 0.05 µs: that is fast time, and it measures range. Down a column, time steps by 100 µs: that is slow time, and it measures the turn.

Over 64 pulses, 6.4 ms, the fastest target on this page moves about 0.22 m. That is far less than a 7.5 m range bin, so each target stays in its column.

Targets on a range–Doppler map

The plan has two steps. First, run the matched filter along each row; call its output y[m,n]y[m,n] for pulse mm at range bin nn. Then take a DFT down each column:

Y[k,n]=∑m=0Np−1w[m] y[m,n]×e−j2πkm/Np.\begin{aligned} Y[k,n]&=\sum_{m=0}^{N_\text{p}-1}w[m]\,y[m,n]\\ &\quad\times e^{-j2\pi km/N_\text{p}}. \end{aligned}

This is “Rows first, then columns” of The 2-D DFT (28.3), with a different transform along each axis.

The window w[m]w[m] is the Hann window of Window functions compared (15.2), from “Five windows, one trade”. It keeps a strong target’s side lobes from hiding a weak one, at the price of a wider peak.

Bin kk is the Doppler frequency kfPRF/Npkf_\text{PRF}/N_\text{p}, with kk from −32 to 31 after the usual shift. Turned into speed, the bins are

c fPRF2f1Np=3×10121.28×1012=2.34 m/s\frac{c\,f_\text{PRF}}{2f_1N_\text{p}}=\frac{3\times10^{12}}{1.28\times10^{12}}=2.34\ \text{m/s}

apart: the velocity resolution. It is also half a wavelength, 1.5 cm, divided by the 6.4 ms the pulses last.

Plot ∣Y[k,n]∣\lvert Y[k,n]\rvert in dB, with range across and speed up the side, and you have a range–Doppler map. Each target is one peak, at its range and its speed.

The next picture has three targets: at 3000 m moving at 20 m/s, at 4500 m at −35 m/s, and at 4530 m at 10 m/s. Their amplitudes are 1, 0.5 and 0.5, and complex noise of power 1 is added, from the site’s generator with seed 331. Their Doppler shifts are 1333.3 Hz, −2333.3 Hz and 666.7 Hz.

Per sample, the first target’s echo is as strong as the noise, 0.0 dB, and the other two are 6.0 dB weaker.

Targets on a range–Doppler map

64 pulses, 10 kHz PRF, three synthetic targets in complex noise of power 1 (seed 331).

64 pulses of raw echo: noise everywhere, each echo at or below the noise per sample.

target
—
range
—
velocity
—
0.00 / 14.00 s
Describe this picture

64 pulses at a 10 kHz PRF, three synthetic targets in complex noise of power 1 (seed 331), in one panel that changes through three stages. Range runs across, from 2.5 to 5 km. In the first two stages the pulse number, 0 to 63, runs up the side; on the map, the velocity, from −75 to 75 m/s. The shading is a grey ramp in dB, from −15 to 30, with values outside that range drawn at its ends. Each peak found on the map is ringed and labelled with its range and velocity. The readouts are the target, its range in metres and its velocity in whole metres per second. The 14 s clip opens on the raw pulses, the size of each sample: noise everywhere, each echo at or below the noise per sample. From 3 s the matched filter sweeps down the pulses, one row at a time, leaving three stripes at 3000, 4500 and 4530 m, one per target, the last two only 30 m apart. From 8 s the DFT sweeps across, column by column, and the map forms: each stripe becomes a peak at its speed, 20 m/s, −35 m/s and 10 m/s, 34.7 dB to 39.7 dB above the floor. When the clip ends, a full-width slider, “Target 1 velocity”, sets the first target’s speed from −70 to 70 m/s in steps of 1 (arrow keys 1, Page Up and Page Down 10). The caption then gives where its peak moves on the map. The setting is kept in the link, as map.v.

Watch the middle stage. Three vertical stripes stand out of the noise, one per target’s column. Then watch the last: each stripe gathers into one peak, at its own speed.

The instrument refines each peak’s speed with the same parabola through three dB values, down the peak’s column, so it can fall between Doppler bins. Range it reads to the nearest bin, 7.5 m. A peak’s level is its brightest cell, and the floor in the caption is the median of all the cells on the map shown.

Notice the two targets 30 m apart. On the map they also differ in speed, by 45 m/s, so they sit far apart up the side, though close in range.

Drag the first target from −70 to 70 m/s and watch its peak climb the map. The bins are 2.34 m/s apart, so the measured speed is shown in whole metres per second, and at every setting it reads what you set.

How fast and how far before it folds

Slow time samples the Doppler tone at fPRFf_\text{PRF}. A complex tone at ff and one at f+fPRFf+f_\text{PRF} give the same samples, as in “Where a tone lands” of Sampling & aliasing (10.1). So the map can only show Doppler shifts from −fPRF/2-f_\text{PRF}/2 to fPRF/2f_\text{PRF}/2.

In speed that is the unambiguous velocity:

±c fPRF4f1=±3×10124×1010=±75.0 m/s.\pm\frac{c\,f_\text{PRF}}{4f_1}=\pm\frac{3\times10^{12}}{4\times10^{10}}=\pm75.0\ \text{m/s}.

A target faster than that folds to the other side of the map. One approaching at 80 m/s shows up at −70 m/s.

Range has a limit too. The radar files each echo under the last pulse it sent. An echo must therefore come back before the next pulse goes out, which gives the unambiguous range:

c TPRI2=3×108×10−42=15.0 km.\frac{c\,T_\text{PRI}}{2}=\frac{3\times10^8\times10^{-4}}{2}=15.0\ \text{km}.

A target at 16 km echoes 106.7 µs after its pulse, 6.7 µs after the next one, and shows up at 1 km.

The PRF sets both limits, in opposite directions. A higher PRF widens the speeds the map can show and shortens the ranges. Their product, c2/8f1c^2/8f_1, stays fixed: 15 km times 75 m/s.

The instrument’s slider stops at ±70 m/s, inside the limit. In this page’s set-up the map shows 2.5 to 5 km out of a record that reaches 7.5 km, well inside 15 km.

The maths behind it · separable transforms

The pulses form a matrix, 64 rows by 1000 range bins. The map transforms it along the rows by the matched filter and down the columns by the DFT matrix. That is 28.3’s separable transform with two different kernels, one per axis.

Worked example

1. Doppler. A target approaches at 20 m/s and the carrier is 10 GHz. Then fD=2×20×1010/(3×108)=1333.3f_\text{D}=2\times20\times10^{10}/(3\times10^8)=1333.3 Hz. From pulse to pulse the echo turns by 2π×1333.3×10−4=0.8382\pi\times1333.3\times10^{-4}=0.838 rad, 0.133 of a turn.

2. Range and resolution. A delay of 30.2 µs is 3×108×30.2×10−6/2=45303\times10^8\times30.2\times10^{-6}/2=4530 m. The range resolution is c/2Bch=15.0c/2B_\text{ch}=15.0 m, and the velocity resolution cfPRF/(2f1Np)=2.34cf_\text{PRF}/(2f_1N_\text{p})=2.34 m/s.

3. Limits. The unambiguous velocity is ±cfPRF/(4f1)=±75.0\pm cf_\text{PRF}/(4f_1)=\pm75.0 m/s, and the unambiguous range is cTPRI/2=15.0cT_\text{PRI}/2=15.0 km.

4. How far the first target stands out. Its echo starts at 0.0 dB per sample. The matched filter adds 10log⁡10200=23.010\log_{10}200=23.0 dB.

The Hann-weighted DFT over 64 pulses adds 10log⁡10((∑w)2/∑w2)=10log⁡10(322/24)=16.310\log_{10}\big((\textstyle\sum w)^2/\sum w^2\big)=10\log_{10}(32^2/24)=16.3 dB, 1.8 dB less than the 18.1 dB of no window. The target sits 0.47 of a bin from the nearest bin, which costs 1.2 dB, the sag of “Between two bins, the peak bar sags” in 15.2.

In all, 0.0+23.0+16.3−1.2=38.10.0+23.0+16.3-1.2=38.1 dB above the noise’s average power on the map. On the map itself the peak is 28.9 dB and the median of the cells on screen is −10.8 dB, 39.7 dB below it. The median sits 1.6 dB under the average, as “More data, same scatter” of The periodogram (25.1) found for noise like this.

Where you’ll meet this

Air-traffic control radars find aircraft by range and bearing, and weather radars do the same with rain. A Doppler weather radar reads each patch of rain’s radial velocity, which shows the wind inside a storm.

Cars use radar at 77 GHz. Their sensors send a rapid series of chirps and mix each echo with the outgoing chirp, a method called FMCW. One FFT along each chirp and one across the chirps give the same range–Doppler map as on this page.

A police speed gun sends a steady tone and measures only its Doppler shift. Synthetic-aperture radar flies past a scene, keeps the phase of every echo, and builds a sharp image from many pulses.

I left out the echoes from the ground and sea, called clutter, and the filters that remove them. I also left out the rule for setting a detection threshold on the map, CFAR, which is 26.1’s threshold set from the local noise, and the antennas. For more, see M. A. Richards, Fundamentals of Radar Signal Processing (2nd ed., 2014), chapters 4, 5 and 8, and M. I. Skolnik, Introduction to Radar Systems (3rd ed., 2001), chapter 3.

Echoes that come back along several paths, smearing one pulse into the next, are the starting point of Channels and equalisation (33.2).

The maths behind it · hypothesis tests

Deciding whether a map cell holds a target is 26.1’s hypothesis test, done cell by cell. A CFAR detector estimates the noise level from the cells around each one, then sets the threshold for a chosen false-alarm rate: a Neyman–Pearson test.

Reference card

QuantityFormulaNotes
Rangec td/2c\,t_\text{d}/2150 m per µs of delay
Range binc/2fsc/2f_s7.5 m at 20 MHz
Chirpejπ(Bch/Tp)(t−Tp/2)2e^{j\pi(B_\text{ch}/T_\text{p})(t-T_\text{p}/2)^2}sweeps −Bch/2-B_\text{ch}/2 to Bch/2B_\text{ch}/2
Matched filter1Nq∑kx[ℓ+k] q∗[k]\frac{1}{N_q}\sum_kx[\ell+k]\,q^*[k]a lone echo peaks at its amplitude
Range resolutionc/2Bchc/2B_\text{ch}peak to first zero; −3 dB width 13.3 m here
Compression ratioBchTpB_\text{ch}T_\text{p}SNR gain NqN_q samples
DopplerfD=2vrf1/cf_\text{D}=2v_\text{r}f_1/cvrv_\text{r} positive approaching
Turn per pulsefDTPRIf_\text{D}T_\text{PRI} turnsread across pulses
Velocity resolutioncfPRF/(2f1Np)cf_\text{PRF}/(2f_1N_\text{p})one Doppler bin
Unambiguous velocity±cfPRF/4f1\pm cf_\text{PRF}/4f_1faster targets fold
Unambiguous rangecTPRI/2cT_\text{PRI}/2the PRF trades it against speed

End of lesson 33.1

Where to go next.

Phasorium
LibraryEvery lesson, in order

Parts

About Phasorium
Look