FMCW Radar Chirp Parameters — A Mathematical Tutorial

Oct 27, 2026 · Santana Burintramart

Overview

Every number in the table follows from six primitive settings plus the antenna layout: start frequency, slope, samples per chirp, sampling rate, chirps per frame and the number of transmitters. The rest (bandwidth, resolutions, maximum range and velocity) are derived quantities, and this tutorial derives each one.

The configuration is a 60 GHz TDM-MIMO FMCW radar with 3 Tx and 4 Rx, the layout of TI’s IWR6843ISK board (the screenshot looks like TI’s mmWave sensing estimator). Note that this is a different radar family from the Sense2GoL Pulse in your host app: that board is a 24 GHz single-channel Doppler radar with no chirps, so only the Doppler section below carries over to it directly.

Symbol Meaning Value
f0f_0 Start frequency 60.75 GHz
SS Chirp slope 200 MHz/µs = 2×10¹⁴ Hz/s
NsN_s ADC samples per chirp 96
fsf_s ADC sampling rate 10.785 Msps
NcN_c Chirps per frame (all Tx) 288
Ntx,NrxN_{tx}, N_{rx} Transmitters, receivers 3, 4
TfT_f Frame period 90 ms
cc Speed of light 299 792 458 m/s
λ\lambda Wavelength c/f0c/f_0 4.935 mm
TadcT_{adc} ADC sampling window Ns/fsN_s/f_s 8.90 µs
TcT_c Chirp repetition period (one Tx) ≈ 49.1 µs (derived)
NloopN_{loop} Chirps per Tx per frame Nc/NtxN_c/N_{tx} 96

1. The FMCW signal model

A chirp is a sinusoid whose frequency rises linearly with time. Mixing the echo with the transmitted chirp turns range into a constant beat frequency and velocity into a slow phase rotation, which is the whole trick of FMCW.

The instantaneous frequency of one chirp, for 0≤t≤Tramp0 \le t \le T_{ramp}, is:

ftx(t)=f0+Stf_{tx}(t) = f_0 + S\,t

Integrating 2πf2\pi f gives the transmitted phase and signal:

ϕtx(t)=2π(f0t+12St2),stx(t)=Atxcosϕtx(t)\phi_{tx}(t) = 2\pi\left(f_0 t + \tfrac{1}{2} S t^2\right), \qquad s_{tx}(t) = A_{tx}\cos\phi_{tx}(t)

A point target at range R(t)=R0+vtR(t) = R_0 + v t returns the signal delayed by the round-trip time:

τ(t)=2R(t)c=2(R0+vt)c,srx(t)=Arxcosϕtx(t−τ)\tau(t) = \frac{2R(t)}{c} = \frac{2(R_0 + v t)}{c}, \qquad s_{rx}(t) = A_{rx}\cos\phi_{tx}\big(t-\tau\big)

The mixer multiplies Tx and Rx, and the low-pass IF filter keeps the difference phase. With a complex (I/Q) receiver this is the IF signal:

sIF(t)=Aej[ϕtx(t)−ϕtx(t−τ)]s_{IF}(t) = A\, e^{\,j[\phi_{tx}(t) - \phi_{tx}(t-\tau)]}

Expanding the phase difference:

ϕtx(t)−ϕtx(t−τ)=2π(f0τ+Sτt−12Sτ2)\phi_{tx}(t) - \phi_{tx}(t-\tau) = 2\pi\left(f_0\tau + S\tau t - \tfrac{1}{2}S\tau^2\right)

The last term (residual video phase) is tiny: at R=7R = 7 m, τ=46.7\tau = 46.7 ns, so Sτ2/2≈2×10−7S\tau^2/2 \approx 2\times10^{-7} cycles. Dropping it and substituting τ\tau:

sIF(t)≈Aexp{j2π(2SR0c⏟fbt+2R0λ⏟range phase+2vλ⏟fDt′)}s_{IF}(t) \approx A \exp\!\left\{ j2\pi\left( \underbrace{\frac{2 S R_0}{c}}_{f_b}\, t + \underbrace{\frac{2 R_0}{\lambda}}_{\text{range phase}} + \underbrace{\frac{2 v}{\lambda}}_{f_D}\, t' \right)\right\}

Three things are encoded. The beat frequency fb=2SR/cf_b = 2SR/c gives range. The phase 4πR/λ4\pi R/\lambda changes by a measurable amount between chirps when the target moves, giving velocity. The same phase differs between antennas by the extra path length, giving angle. Sections 3 to 5 extract each one with an FFT, producing the classic radar data cube (samples × chirps × antennas → range × Doppler × angle).

Figure 1. Left: transmitted chirp and its delayed echo (delay exaggerated). Right: the resulting I/Q beat signal for a target at 5 m.
Figure 1. Left: transmitted chirp and its delayed echo (delay exaggerated). Right: the resulting I/Q beat signal for a target at 5 m.

2. Start frequency, slope and bandwidth

The 1780 MHz bandwidth is not the full ramp: it is only the part of the sweep that the ADC actually samples, SNs/fsS N_s / f_s.

Start frequency (60.75 GHz) sets the carrier and therefore the wavelength, which scales every phase-based quantity (velocity and angle):

λ=cf0=2.998×10860.75×109=4.935mm\lambda = \frac{c}{f_0} = \frac{2.998\times10^{8}}{60.75\times10^{9}} = 4.935\ \text{mm}

Strictly, the centre of the sampled sweep (f0+B/2≈61.64f_0 + B/2 \approx 61.64 GHz, λ≈4.864\lambda \approx 4.864 mm) is a slightly better value; the estimator uses f0f_0, and the 1.5 % difference does not change the table’s rounding much.

Slope (200 MHz/µs) is how fast the frequency rises. In SI units:

S=200MHzμs=200×106Hz/10−6s=2×1014Hz/sS = 200\ \tfrac{\text{MHz}}{\mu\text{s}} = 200\times10^{6}\ \text{Hz} \,/\, 10^{-6}\ \text{s} = 2\times10^{14}\ \text{Hz/s}

Slope converts range to beat frequency (fb=2SR/cf_b = 2SR/c), so a steeper slope pushes a given target to a higher IF frequency.

Samples per chirp (96) and sampling rate (10.785 Msps) fix the ADC window:

Tadc=Nsfs=9610.785×106=8.901μsT_{adc} = \frac{N_s}{f_s} = \frac{96}{10.785\times10^{6}} = 8.901\ \mu\text{s}

Bandwidth (1780 MHz) is the frequency swept during that window:

B=STadc=SNsfs=2×1014×8.901×10−6=1.780GHzB = S\,T_{adc} = \frac{S\,N_s}{f_s} = 2\times10^{14} \times 8.901\times10^{-6} = 1.780\ \text{GHz}

The physical ramp is longer than TadcT_{adc} (there is ADC start time before sampling and some excess ramp after), so the synthesiser sweeps a bit more than 1.78 GHz. That extra sweep costs time and spectrum but adds no resolution, because resolution depends only on what is sampled. The 60 to 64 GHz band limits f0f_0 + total sweep to 64 GHz.

3. Range: resolution 0.084 m, maximum 7.2 m

Range resolution comes only from bandwidth (c/2B=0.0842c/2B = 0.0842 m); maximum range comes from how high a beat frequency the IF chain and ADC can pass (≈0.9×fsc/2S=7.27\approx 0.9 \times f_s c/2S = 7.27 m).

3.1 Beat frequency

From section 1, a target at range RR produces

fb=Sτ=2SRc⇔R=cfb2Sf_b = S\,\tau = \frac{2 S R}{c} \quad\Longleftrightarrow\quad R = \frac{c\, f_b}{2S}

With S=2×1014S = 2\times10^{14} Hz/s, every metre of range adds 2S/c=1.3342S/c = 1.334 MHz of beat frequency.

3.2 Range FFT and resolution

The NsN_s samples of one chirp are x[n]=Aej2πfbn/fsx[n] = A\,e^{j2\pi f_b n/f_s}. Their DFT

X[k]=∑n=0Ns−1w[n]x[n]e−j2πkn/Ns,k=0,…,Ns−1X[k] = \sum_{n=0}^{N_s-1} w[n]\,x[n]\,e^{-j2\pi k n / N_s}, \qquad k = 0,\dots,N_s-1

peaks at bin k=fbNs/fsk = f_b N_s/f_s. The bin spacing in frequency is fs/Ns=1/Tadcf_s/N_s = 1/T_{adc}, so in range:

ΔRbin=c2S⋅fsNs=c2STadc=c2B\Delta R_{bin} = \frac{c}{2S}\cdot\frac{f_s}{N_s} = \frac{c}{2S\,T_{adc}} = \frac{c}{2B}

Two targets are resolvable when their beat tones differ by at least one cycle over the observation window, Δfb≥1/Tadc\Delta f_b \ge 1/T_{adc}. That gives the same answer:

ΔR=c2B=2.998×1082×1.780×109=0.0842m\Delta R = \frac{c}{2B} = \frac{2.998\times10^{8}}{2 \times 1.780\times10^{9}} = 0.0842\ \text{m}

Notice that slope and sample count cancel: only the swept bandwidth matters. A window (Hann, Blackman) lowers sidelobes but widens the main lobe, so the practical resolution is about 1.5 to 2 × c/2Bc/2B.

Figure 2. Two equal targets separated by 0.5, 1, 1.5 and 2 range bins (ΔR = 8.42 cm), with rectangular and Hann windows. Dotted lines mark the true ranges.
Figure 2. Two equal targets separated by 0.5, 1, 1.5 and 2 range bins (ΔR = 8.42 cm), with rectangular and Hann windows. Dotted lines mark the true ranges.

3.3 Maximum unambiguous range

The IF receiver is complex (I/Q), so beat frequencies from 0 up to fsf_s are distinguishable (a real-only receiver would be limited to fs/2f_s/2). The ideal limit is

Rmaxideal=fsc2S=10.785×106×2.998×1082×2×1014=8.08mR_{max}^{ideal} = \frac{f_s\,c}{2S} = \frac{10.785\times10^{6} \times 2.998\times10^{8}}{2\times 2\times10^{14}} = 8.08\ \text{m}

The IF anti-alias filter rolls off before fsf_s, so TI’s tools use about 90 % of it as the usable IF bandwidth:

Rmax=0.9fsc2S≈7.27m→7.2m (as displayed)R_{max} = 0.9\,\frac{f_s\,c}{2S} \approx 7.27\ \text{m} \;\;\rightarrow\;\; 7.2\ \text{m (as displayed)}

Equivalently, Rmax=0.9NsΔRR_{max} = 0.9 N_s \Delta R: of the 96 range bins of 8.4 cm, about 86 are usable. To see farther with the same chirp you either raise fsf_s (more samples, more bandwidth needed in the ADC) or lower the slope (but then BB shrinks unless the chirp gets longer).

Figure 3. Left: measured vs true range; the peak wraps to zero past f_s·c/2S = 8.08 m. Right: modelled IF-filter loss, about 2 dB at 7.27 m.
Figure 3. Left: measured vs true range; the peak wraps to zero past f_s·c/2S = 8.08 m. Right: modelled IF-filter loss, about 2 dB at 7.27 m.

4. Velocity: maximum 8.38 m/s, resolution 0.17 m/s

The 288 chirps are 96 loops of 3 chirps (one per Tx), so each antenna sees a chirp every ≈ 147 µs. That effective period sets vmax=λ/4T=8.38v_{max} = \lambda/4T = 8.38 m/s, and the 96 loops set Δv=2vmax/96=0.17\Delta v = 2v_{max}/96 = 0.17 m/s.

4.1 Phase across chirps

A target moving at radial velocity vv changes range by vTcv T_c between consecutive chirps, so the range phase 4πR/λ4\pi R/\lambda advances by

Δϕ=4πvTcλ\Delta\phi = \frac{4\pi\, v\, T_c}{\lambda}

This is far too small to move the beat frequency (Δfb\Delta f_b over a whole frame is under one bin), but the phase is easy to measure. Sampling the range-FFT peak across MM chirps gives a slow-time sinusoid y[m]=AejmΔϕy[m] = A\,e^{j m \Delta\phi}, whose frequency is the Doppler shift fD=2v/λf_D = 2v/\lambda.

4.2 Maximum velocity

Phase is only known modulo 2π2\pi, so unambiguous measurement needs −π<Δϕ<π-\pi < \Delta\phi < \pi:

|4πvTcλ|<π⇒vmax=λ4Tc\left|\frac{4\pi v T_c}{\lambda}\right| < \pi \quad\Longrightarrow\quad v_{max} = \frac{\lambda}{4\,T_c}

The ± range is available because the Doppler samples are complex; this is the Nyquist limit of slow-time sampling at 1/Tc1/T_c.

4.3 TDM-MIMO: why 288 chirps

With 3 Tx in time-division multiplexing, the frame is a loop of Tx1, Tx2, Tx3 repeated NloopN_{loop} times:

Nloop=NcNtx=2883=96,Tc,eff=NtxTcN_{loop} = \frac{N_c}{N_{tx}} = \frac{288}{3} = 96, \qquad T_{c,eff} = N_{tx}\,T_c

The same Tx/Rx pair is revisited only every Tc,effT_{c,eff}, so that is the slow-time sampling interval. Solving for it from the table:

Tc,eff=λ4vmax=4.935×10−34×8.38=147.2μs⇒Tc=49.07μsT_{c,eff} = \frac{\lambda}{4\,v_{max}} = \frac{4.935\times10^{-3}}{4\times 8.38} = 147.2\ \mu\text{s} \quad\Rightarrow\quad T_c = 49.07\ \mu\text{s}

So each chirp (idle time + ramp) lasts about 49 µs, of which only 8.9 µs is the ADC window. MIMO triples the antenna count but divides vmaxv_{max} by three.

Figure 4. Simulated range–Doppler map for three targets with this exact configuration. Red crosses mark the true range and velocity.
Figure 4. Simulated range–Doppler map for three targets with this exact configuration. Red crosses mark the true range and velocity.
Figure 5. Velocity aliasing: measured speed wraps with period 2·v_max = 16.76 m/s outside ±8.38 m/s.
Figure 5. Velocity aliasing: measured speed wraps with period 2·v_max = 16.76 m/s outside ±8.38 m/s.

4.4 Velocity resolution

The Doppler FFT over NloopN_{loop} samples has bin spacing 1/(NloopTc,eff)1/(N_{loop} T_{c,eff}) in frequency, which in velocity is

Δv=λ2NloopTc,eff=2vmaxNloop=2×8.3896=0.1746m/s\Delta v = \frac{\lambda}{2\,N_{loop}\,T_{c,eff}} = \frac{2\,v_{max}}{N_{loop}} = \frac{2\times 8.38}{96} = 0.1746\ \text{m/s}

The table rounds this to 0.17. Resolution depends on total observation time per frame, NloopTc,eff=14.1N_{loop} T_{c,eff} = 14.1 ms, the same “one cycle over the window” rule as range resolution.

Figure 6. Two targets at the same range, separated in velocity by 0.5, 1, 1.5 and 2 Δv (Δv = 0.175 m/s).
Figure 6. Two targets at the same range, separated in velocity by 0.5, 1, 1.5 and 2 Δv (Δv = 0.175 m/s).

4.5 Velocity-induced error

Moving targets also shift the beat frequency by fD=2v/λf_D = 2v/\lambda. At vmaxv_{max} that is 3.4 kHz against a range-bin width of 1/Tadc=1121/T_{adc} = 112 kHz, so the range error is under 0.03 bins and can be ignored. In TDM-MIMO, however, the Tx2 and Tx3 chirps see an extra phase of Δϕ\Delta\phi and 2Δϕ2\Delta\phi, which must be compensated before the angle FFT:

ŝt,r=st,re−jtΔϕ̂c,t=0,1,2\hat{s}_{t,r} = s_{t,r}\, e^{-j\,t\,\Delta\hat\phi_c}, \qquad t = 0, 1, 2

Figure 7. Azimuth error for a target at 10° versus its velocity. Without compensation the TDM phase reaches ±7° of error at v_max; compensation removes it.
Figure 7. Azimuth error for a target at 10° versus its velocity. Without compensation the TDM phase reaches ±7° of error at v_max; compensation removes it.

5. Angle: azimuth 14.5°, elevation 58°

3 Tx × 4 Rx form 12 virtual antennas: 8 in a horizontal row (azimuth resolution arcsin(2/8)=14.5°\arcsin(2/8) = 14.5°) and only 2 rows vertically (elevation ≈ 2/2 rad ≈ 57–58°).

5.1 Phase across antennas

A plane wave arriving at angle θ\theta from boresight reaches antenna kk, spaced dkd k along the array, with an extra path dksinθd k \sin\theta. For a radar the Tx-to-target and target-to-Rx paths both contribute, but in the far field each is a one-way delay, so the phase at virtual element kk is

ψk=2πλdksinθ=kω,ω=2πdsinθλ\psi_k = \frac{2\pi}{\lambda}\, d\, k\, \sin\theta = k\,\omega, \qquad \omega = \frac{2\pi d \sin\theta}{\lambda}

5.2 The virtual array

In MIMO, a Tx at position ptp_t and Rx at position qrq_r behave like a single element at pt+qrp_t + q_r (the sum of positions, from the sum of the two path lengths). Number of virtual channels:

Nvirt=Ntx×Nrx=3×4=12N_{virt} = N_{tx} \times N_{rx} = 3 \times 4 = 12

On the IWR6843ISK layout, the four Rx sit λ/2\lambda/2 apart, Tx1 and Tx3 are 2λ2\lambda apart horizontally, and Tx2 is raised λ/2\lambda/2 and offset. Tx1 and Tx3 therefore build one gap-free row of 8 elements at λ/2\lambda/2 spacing; Tx2 adds a second, elevated row of 4.

Tx Virtual elements Role
Tx1 x = 0, 1, 2, 3 (× λ/2), z = 0 Azimuth row
Tx3 x = 4, 5, 6, 7 (× λ/2), z = 0 Azimuth row (continues)
Tx2 x = 2, 3, 4, 5 (× λ/2), z = 1 (× λ/2) Elevation row
Figure 8. The 12-element virtual array in units of λ/2.
Figure 8. The 12-element virtual array in units of λ/2.

5.3 Unambiguous field of view

The angle FFT measures ω\omega modulo 2π2\pi, so |ω|<π|\omega| < \pi requires

|2πdsinθλ|<π⇒|sinθ|<λ2d→d=λ/2θmax=±90∘\left|\frac{2\pi d \sin\theta}{\lambda}\right| < \pi \;\Rightarrow\; |\sin\theta| < \frac{\lambda}{2d} \;\xrightarrow{\,d=\lambda/2\,}\; \theta_{max} = \pm 90^\circ

5.4 Angle resolution

An NN-element FFT resolves spatial frequencies one bin apart, Δω=2π/N\Delta\omega = 2\pi/N. Since ω=πsinθ\omega = \pi\sin\theta for d=λ/2d = \lambda/2:

Δ(sinθ)=2N,Δθ≈2Ncosθrad\Delta(\sin\theta) = \frac{2}{N}, \qquad \Delta\theta \approx \frac{2}{N\cos\theta}\ \text{rad}

Resolution is best at boresight and degrades toward the edges (the 1/cosθ1/\cos\theta term). At boresight:

Δθaz=arcsin(28)=14.48∘≈14.5∘\Delta\theta_{az} = \arcsin\!\left(\frac{2}{8}\right) = 14.48^\circ \approx 14.5^\circ

Δθel≈22rad=57.3∘≈58∘\Delta\theta_{el} \approx \frac{2}{2}\ \text{rad} = 57.3^\circ \approx 58^\circ

The elevation figure uses the small-angle form; with only two rows the approximation is rough (the exact arcsin(2/2)\arcsin(2/2) is 90°), and in practice two elevation rows give you a height estimate for a single target, not the ability to separate two. Interpolating with a zero-padded FFT gives finer peak positions but not better resolution.

Figure 9. Beam patterns of the 8-element azimuth row and the 2-element elevation column.
Figure 9. Beam patterns of the 8-element azimuth row and the 2-element elevation column.
Figure 10. Two targets separated in azimuth by 7°, 14.5° and 22°: they merge below the 14.5° resolution.
Figure 10. Two targets separated in azimuth by 7°, 14.5° and 22°: they merge below the 14.5° resolution.

6. Frame timing: 90 ms frames, 14 ms active

The radar transmits for only about 14 ms of every 90 ms frame (15.7 % duty cycle) and spends the rest processing, sending data and saving power.

Tactive=NcTc=288×49.07μs=14.13msT_{active} = N_c\,T_c = 288 \times 49.07\ \mu\text{s} = 14.13\ \text{ms}

Tidle=Tf−Tactive=90−14.13=75.9ms,D=TactiveTf=15.7%T_{idle} = T_f - T_{active} = 90 - 14.13 = 75.9\ \text{ms}, \qquad D = \frac{T_{active}}{T_f} = 15.7\ \%

fframe=1Tf=11.1Hzf_{frame} = \frac{1}{T_f} = 11.1\ \text{Hz}

The frame period does not appear in any resolution formula. It sets how often you get a new point cloud, and it bounds tracking: a target at vmaxv_{max} moves 8.38 × 0.09 = 0.75 m (about 9 range bins) between frames.

Raw data volume per frame, with 16-bit I and Q:

Ns×Nc×Nrx=96×288×4=110592complex samples≈442kB/frame≈4.9MB/sN_s \times N_c \times N_{rx} = 96 \times 288 \times 4 = 110\,592\ \text{complex samples} \;\approx\; 442\ \text{kB/frame} \;\approx\; 4.9\ \text{MB/s}

The processed data cube after the range, Doppler and angle FFTs is 96 range × 96 Doppler × 12 virtual antennas.

7. Verification: every row recomputed

All eleven derived values in the screenshot reproduce from the six primitives to within the table’s rounding.

Parameter Formula Computed Table
Wavelength c/f0c / f_0 4.935 mm not shown
ADC window Ns/fsN_s / f_s 8.901 µs not shown
Bandwidth SNs/fsS N_s / f_s 1780.3 MHz 1780 MHz
Range resolution c/2Bc / 2B 0.0842 m 0.084 m
Max range 0.9fsc/2S0.9 f_s c / 2S 7.27 m 7.2 m
Chirp period (per Tx) λ/(4vmaxNtx)\lambda / (4 v_{max} N_{tx}) 49.07 µs inferred
Max velocity λ/(4NtxTc)\lambda / (4 N_{tx} T_c) 8.38 m/s 8.38 m/s
Chirp loops Nc/NtxN_c / N_{tx} 96 288 / 3
Velocity resolution 2vmax/Nloop2 v_{max} / N_{loop} 0.1746 m/s 0.17 m/s
Virtual antennas NtxNrxN_{tx} N_{rx} 12 3 × 4
Azimuth resolution arcsin(2/8)\arcsin(2/8) 14.48° 14.5°
Elevation resolution 2 / 2 rad 57.3° 58°
Active time / duty NcTc/TfN_c T_c / T_f 14.13 ms / 15.7 % not shown

The chirp period is the one value not in the table; it is back-solved from vmaxv_{max}, so if you change the idle time in the configuration, both vmaxv_{max} and Δv\Delta v change with it.

Figure 11. Full pipeline output: three simulated targets (circles) and their estimated positions (crosses) from range, Doppler, azimuth and elevation processing.
Figure 11. Full pipeline output: three simulated targets (circles) and their estimated positions (crosses) from range, Doppler, azimuth and elevation processing.

8. Companion notebook

The notebook fmcw_chirp_parameters_simulation.ipynb simulates the full 3 Tx × 4 Rx TDM-MIMO radar with these exact settings and confirms every table value by simulation. It needs only numpy and matplotlib and runs in under a minute. All figures on this page come from it.

§ Simulation What it shows
0 Parameter calculator All table values recomputed, with assertions
1 Chirp and IF signal fbf_b = 1.334 MHz per metre of range
2 Two-target range FFT Targets merge below 1 ΔR (rect) or ~1.5 ΔR (Hann); ΔR depends only on B
3 Range sweep 0.5–12 m Range wraps at 8.08 m; IF filter loses ~2 dB at 7.27 m
4 TDM-MIMO data cube Builds the 3 × 96 × 4 × 96 cube and plots the virtual array
5 Range–Doppler map Three targets placed correctly; velocity wraps outside ±8.38 m/s
6 Two-target Doppler FFT Velocity resolution 0.175 m/s from 14.1 ms of observation
7 Beam patterns, angle FFT 8-element row resolves 14.5°, 2-element column ~57°
8 TDM phase error Uncompensated azimuth error reaches ±7° at vmaxv_{max}; compensation removes it
9 Full pipeline Range, velocity, azimuth and elevation recovered for three targets
10 Parameter explorer Change slope, loops, Tx count and see the trade-offs

The simulation uses the convention positive velocity = receding (range increasing). Your Sense2GoL host app uses the opposite sign (approaching = positive), so flip the sign if you compare the two.