Skip to main content

Finding Object Velocity and Range Using FMCW Radar


FMCW Radar: The Mathematical Foundation

How one radar waveform can reveal an object's range, velocity, and direction using frequency, phase, Fourier transforms, and antenna geometry.

An FMCW radar does not directly measure range, velocity, and angle. Instead, it measures changes in frequency and phase. Those measurements are transformed into physical quantities.


Dimension What changes? Information
Samples within a chirp Beat frequency Range
Chirp to chirp Doppler phase Velocity
Receiver to receiver Spatial phase Angle

1. Start With an FMCW Chirp

FMCW stands for Frequency-Modulated Continuous Wave. Instead of transmitting a single frequency, the radar continuously sweeps its frequency.

A simple up-chirp can be written as:

[ f(t) = f_c + St ]

where:

  • (f_c) = carrier frequency
  • (S) = chirp slope in Hz/s
  • (t) = time

The slope is:

[ S = \frac{B}{T_c} ]

where (B) is bandwidth and (T_c) is chirp duration.

Numerical Example

Suppose:

  • Carrier frequency = 77 GHz
  • Bandwidth = 1 GHz
  • Chirp duration = 50 Ξs

Then:

[ S = \frac{1\times10^9}{50\times10^{-6}} = 2\times10^{13}\text{ Hz/s} ]

So the radar's frequency increases by approximately 20 THz every second.

2. Range: Why Does the Beat Frequency Give Distance?

Electromagnetic waves travel approximately at the speed of light:

[ c \approx 3\times10^8\text{ m/s} ]

If an object is at distance (R), the signal must travel to the object and back.

The round-trip delay is therefore:

[ \tau = \frac{2R}{c} ]

Because the transmitted chirp is changing frequency with time, the delayed signal has a slightly different instantaneous frequency from the signal currently being transmitted.

Mixing the transmitted signal with the received signal produces the beat frequency:

[ f_b = S\tau ]

Substituting the delay:

[ f_b = S\frac{2R}{c} ]

Therefore:

[ \boxed{R=\frac{c f_b}{2S}} ]

Numerical Range Example

Assume:

  • (S=2\times10^{13}) Hz/s
  • Object range (R=30) m
  • (c=3\times10^8) m/s

The round-trip delay is:

[ \tau = \frac{2(30)}{3\times10^8} = 2\times10^{-7}\text{ s} = 200\text{ ns} ]

The beat frequency is:

[ f_b = (2\times10^{13})(2\times10^{-7}) = 4\times10^6 = \boxed{4\text{ MHz}} ]

Therefore, a target 30 m away produces approximately a 4 MHz beat frequency.

3. Why Do We Take an FFT for Range?

The ADC does not tell us directly:

'The target is 30 metres away.'

Instead, it gives us a sequence of voltage samples representing a signal that oscillates at approximately 4 MHz.

For example:

[ x[n] = A\cos(2\pi fb nTs) ]

The question becomes:

What frequencies are present in these samples?

The Fourier Transform answers exactly that question.

In practice, we use the Fast Fourier Transform (FFT), which is an efficient algorithm for calculating the Discrete Fourier Transform.

The DFT is:

[ X[k] = \sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N} ]

The FFT efficiently calculates these frequency components. A strong peak at frequency (f_b) means that the received signal contains a strong component at that beat frequency.

Important: The FFT is not magically calculating distance. It is finding frequency. We then use the relationship (R=cf_b/(2S)) to convert frequency into distance.

4. Range Resolution

An important property of FMCW radar is that range resolution is primarily determined by bandwidth.

[ \boxed{\Delta R = \frac{c}{2B}} ]

For (B=1) GHz:

[ \Delta R = \frac{3\times10^8}{2\times10^9} = \boxed{0.15\text{ m}} ]

So approximately 15 cm range resolution is possible under ideal assumptions.

More bandwidth → better range resolution.

5. Velocity: The Doppler Effect

Now imagine the target is moving. Motion changes the frequency of the returned wave. This is the Doppler effect.

The Doppler frequency for a monostatic radar is:

[ \boxed{f_D = \frac{2v}{\lambda}} ]

where:

  • (v) = radial velocity
  • (\lambda) = wavelength

The wavelength is:

[ \lambda = \frac{c}{f_c} ]

Numerical Velocity Example

For a 77 GHz radar:

[ \lambda = \frac{3\times10^8}{77\times10^9} \approx 3.896\text{ mm} ]

Suppose a car is approaching at (v=20) m/s.

[ f_D = \frac{2(20)}{0.003896} \approx \boxed{10.27\text{ kHz}} ]

6. Why Do We Take Another FFT for Velocity?

This is where FMCW radar becomes especially interesting.

We already used the samples within one chirp to determine range.

Now we look at the same range bin across many chirps.

Suppose the radar transmits chirps every (T_c) seconds.

The Doppler signal across chirps can be approximated as:

[ x[m] = Ae^{j2\pi fDmTc} ]

Notice what happened:

[ \text{Fast time} \rightarrow f_b \rightarrow \text{Range} ] [ \text{Slow time} \rightarrow f_D \rightarrow \text{Velocity} ]

Because the Doppler signal is also a frequency component, we again use an FFT.

First FFT: frequency across ADC samples → range.
Second FFT: frequency across chirps → velocity.

Numerical Slow-Time Example

Suppose chirps are separated by:

[ T_c=50\ \mu s ]

For (v=20) m/s we calculated:

[ f_D\approx10.27\text{ kHz} ]

The phase change between consecutive chirps is:

[ \Delta\phi = 2\pi fD Tc ]

Therefore:

[ \Delta\phi = 2\pi(10270)(50\times10^{-6}) \approx 3.23\text{ rad} ]

So the complex radar signal rotates by roughly 3.23 radians per chirp.

That phase rotation is the mathematical origin of Doppler estimation in the slow-time dimension.

7. Range-Doppler Map

After the first FFT, every chirp contains a set of range bins. Stack those chirps together:

[ \begin{bmatrix} \text{chirp 1}\ \text{chirp 2}\ \text{chirp 3}\ \vdots\ \text{chirp M} \end{bmatrix} ] [ \Downarrow ] [ X[\text{range},\text{chirp}] ]

Then perform another FFT along the chirp dimension.

[ X[n,m] \xrightarrow{\text{FFT in }n} X[kR,m] \xrightarrow{\text{FFT in }m} X[kR,k_D] ]

The result is a range-Doppler map.

Axis Physical meaning
X-axis Range
Y-axis Velocity / Doppler
Brightness Signal strength

8. Angle: Why Can Two Antennas Tell Direction?

Now consider two receiving antennas separated by distance (d).

A wave arriving at an angle does not reach both antennas at exactly the same time.

The path difference is approximately:

[ \Delta r = d\sin\theta ]

A path difference creates a phase difference:

[ \Delta\phi = \frac{2\pi}{\lambda}\Delta r ]

Substituting:

[ \boxed{ \Delta\phi = \frac{2\pi d\sin\theta}{\lambda} } ]

Solving for angle:

[ \boxed{ \theta = \sin^{-1} \left( \frac{\lambda\Delta\phi}{2\pi d} \right) } ]

Numerical Angle Example

Suppose:

  • Radar frequency = 77 GHz
  • (\lambda\approx3.896) mm
  • Antenna spacing (d=\lambda/2)
  • Target angle (\theta=30^\circ)

Then:

[ \Delta\phi = \frac{2\pi(\lambda/2)\sin(30^\circ)} {\lambda} ]
[ \Delta\phi = \pi(0.5) = \boxed{\frac{\pi}{2}\text{ rad}} ]

So a target at 30° produces approximately a 90° phase difference between the two receivers.

9. Why Only Two Receivers Are Limited

With two antennas, we essentially get one spatial phase measurement:

[ \Delta\phi = \phi2-\phi1 ]

That gives us an estimate of one angle.

But with more antennas, we obtain many spatial measurements:

[ \phi1,\phi2,\phi3,\ldots,\phiN ]

This allows us to perform spatial beamforming or a spatial FFT to obtain a more precise angular spectrum.

More antennas → more spatial samples → better angular discrimination.

10. Why MIMO Helps

MIMO stands for Multiple Input Multiple Output.

Multiple transmitters and receivers can create a larger virtual antenna array.

For example, with:

[ N{Tx}\times N{Rx} ]

appropriately arranged channels, the radar can obtain many virtual spatial samples.

This improves angular resolution and allows the radar to distinguish targets that are close together in angle.

11. Putting Everything Together

We can now see why the same raw radar data contains all three measurements.

Range

[ \boxed{f_b=S\frac{2R}{c}} ] [ \boxed{R=\frac{cf_b}{2S}} ]

Find the beat frequency using an FFT across samples within a chirp.

Velocity

[ \boxed{f_D=\frac{2v}{\lambda}} ] [ \boxed{v=\frac{\lambda f_D}{2}} ]

Find the Doppler frequency using an FFT across chirps.

Angle

[ \boxed{ \Delta\phi = \frac{2\pi d\sin\theta}{\lambda} } ] [ \boxed{ \theta = \sin^{-1} \left( \frac{\lambda\Delta\phi}{2\pi d} \right) } ]

Compare the phase received by spatially separated antennas.

12. The Mathematical Picture

The most useful way to think about FMCW radar is as a multidimensional signal-processing problem.

[ \boxed{ \text{Fast Time} \xrightarrow{\text{FFT}} \text{Range} } ] [ \boxed{ \text{Slow Time} \xrightarrow{\text{FFT}} \text{Velocity} } ] [ \boxed{ \text{Spatial Dimension} \xrightarrow{\text{Phase / FFT}} \text{Angle} } ]

Therefore, the radar data cube can conceptually be represented as:

[ \boxed{ X[\text{range},\text{velocity},\text{angle}] } ]

In real radar systems there are many additional complications: noise, clutter, multiple targets, acceleration, phase noise, leakage, range-Doppler coupling, antenna calibration, windowing, CFAR detection, and more.

13. Numerical Example

Consider a 77 GHz FMCW radar with:

  • Bandwidth (B=1) GHz
  • Chirp duration (T_c=50) Ξs
  • Target range (R=30) m
  • Target velocity (v=20) m/s
  • Two receivers separated by (d=\lambda/2)
  • Target angle (\theta=30^\circ)

Step 1 — Chirp slope

[ S= \frac{B}{T_c} = \frac{10^9}{50\times10^{-6}} = 2\times10^{13}\text{ Hz/s} ]

Step 2 — Range

[ f_b = S\frac{2R}{c} = (2\times10^{13}) \frac{60}{3\times10^8} = \boxed{4\text{ MHz}} ]

Step 3 — Wavelength

[ \lambda = \frac{3\times10^8}{77\times10^9} \approx \boxed{3.896\text{ mm}} ]

Step 4 — Doppler

[ f_D = \frac{2(20)}{0.003896} \approx \boxed{10.27\text{ kHz}} ]

Step 5 — Angle

[ d=\frac{\lambda}{2} ] [ \Delta\phi = \frac{2\pi d\sin30^\circ}{\lambda} = \boxed{\frac{\pi}{2}} ]

The radar therefore observes approximately:

Measurement Observed quantity Physical result
Fast-time FFT 4 MHz beat frequency 30 m range
Slow-time FFT 10.27 kHz Doppler 20 m/s velocity
Rx phase difference π/2 rad 30° angle

14. Summary

FMCW radar turns distance into frequency, motion into Doppler frequency, and direction into spatial phase difference; FFTs are used because they efficiently reveal the frequency components hidden inside the sampled radar signal.

  %% Simple FMCW Radar: Fast-Time FFT + Slow-Time FFT
clear;
clc;
close all;

%% Radar parameters
c  = 3e8;              % Speed of light (m/s)
fc = 77e9;             % Carrier frequency (Hz)

B  = 1e9;              % Bandwidth = 1 GHz
Tc = 50e-6;            % Chirp duration = 50 us

S = B/Tc;              % Chirp slope (Hz/s)

%% Target
R = 30;                % Target range = 30 m
v = 20;                % Target velocity = 20 m/s

lambda = c/fc;

%% Sampling parameters
Fs = 20e6;             % ADC sampling frequency = 20 MHz
Ns = 1000;              % Samples per chirp
Nc = 128;               % Number of chirps

Ts = 1/Fs;

%% Create data matrix
% Rows    = fast time (samples within chirp)
% Columns = slow time (different chirps)

radarData = zeros(Ns, Nc);

%% Generate received beat signal
for m = 1:Nc

    % Time within this chirp
    t = (0:Ns-1).' * Ts;

    % Target range changes because target is moving
    Rm = R - v*(m-1)*Tc;

    % Round-trip delay
    tau = 2*Rm/c;

    % Beat frequency caused by range
    fb = S*tau;

    % Doppler frequency
    fd = 2*v/lambda;

    % Beat signal
    radarData(:,m) = exp(1j*2*pi*(fb + fd)*t);

end


%% ============================================================
%  FAST-TIME FFT
%  Samples within ONE chirp -> Range
% =============================================================

% Take FFT along rows
rangeFFT = fft(radarData, [], 1);

% Keep only positive frequencies
rangeFFT = rangeFFT(1:Ns/2, :);

% Frequency axis
fRange = (0:Ns/2-1).' * Fs/Ns;

% Convert beat frequency to range
rangeAxis = c*fRange/(2*S);


%% Plot Fast-Time FFT
figure;

plot(rangeAxis, abs(rangeFFT(:,1)));

xlabel('Range (m)');
ylabel('Magnitude');
title('Fast-Time FFT → Range');
grid on;

xlim([0 50]);


%% ============================================================
% SLOW-TIME FFT
% Same range bin across MANY chirps -> Velocity
% =============================================================

% Pick the range bin containing the target
[~, rangeBin] = max(abs(rangeFFT(:,1)));

% Extract this range bin across all chirps
slowTimeSignal = rangeFFT(rangeBin, :);

% FFT across chirps
dopplerFFT = fftshift(fft(slowTimeSignal, Nc));

% Doppler frequency axis
PRF = 1/Tc;

fDoppler = (-Nc/2:Nc/2-1) * PRF/Nc;

% Convert Doppler frequency to velocity
velocityAxis = lambda*fDoppler/2;


%% Plot Slow-Time FFT
figure;

plot(velocityAxis, abs(dopplerFFT));

xlabel('Velocity (m/s)');
ylabel('Magnitude');
title('Slow-Time FFT → Velocity');
grid on;

xlim([-30 30]);


%% ============================================================
% RANGE-DOPPLER MAP
% =============================================================

% FFT across slow-time/chirp dimension
RD = fftshift(fft(rangeFFT, Nc, 2), 2);

figure;

imagesc(velocityAxis, rangeAxis, abs(RD));

xlabel('Velocity (m/s)');
ylabel('Range (m)');
title('Range-Doppler Map');

colorbar;
axis xy;

ylim([0 50]);
xlim([-30 30]);


Contact Us

Name

Email *

Message *

Popular Posts

OFDM Symbols and Subcarriers Explained

This article explains how OFDM (Orthogonal Frequency Division Multiplexing) symbols and subcarriers work. It covers modulation, mapping symbols to subcarriers, subcarrier frequency spacing, IFFT synthesis, cyclic prefix, and transmission. Step 1: Modulation First, modulate the input bitstream. For example, with 16-QAM , each group of 4 bits maps to one QAM symbol. Suppose we generate a sequence of QAM symbols: s0, s1, s2, s3, s4, s5, …, s63 Step 2: Mapping Symbols to Subcarriers Assume N sub = 8 subcarriers. Each OFDM symbol in the frequency domain contains 8 QAM symbols (one per subcarrier): Mapping (example) OFDM symbol 1 → s0, s1, s2, s3, s4, s5, s6, s7 OFDM symbol 2 → s8, s9, s10, s11, s12, s13, s14, s15 … OFDM sym...

Online Simulator for ASK, FSK, and PSK Signal Generation

Interactive Digital Signal Processing (DSP) Tutorial and Simulator for ASK, FSK, and BPSK modulation techniques. Try our new Digital Signal Processing Simulator!   •   Interactive ASK, FSK, and BPSK tools updated for 2025. Start Now Digital Modulation Visualizer: ASK, FSK, & BPSK Simulator Learn and visualize binary modulation techniques (ASK, FSK, BPSK) in real-time with adjustable carrier and sampling parameters. Perfect for DSP students and engineers. ðŸ“Ą ASK Simulator ðŸ“ķ FSK Simulator 🎚️ BPSK Simulator 📚 More Topics ASK Modulator FSK Modulator BPSK Modulator Demodulation More Topics 1. ASK (Ampli...

UGC NET Electronic Science Previous Year Question Papers with Solutions

Download Papers and Solutions Exam Pattern Preparation Tips FAQs More Home / Engineering & Other Exams / UGC NET 2026 PYQ 📊 Exam Highlights: Electronic Science (88) Feature Details Junior Research Fellowship (JRF) ₹37,000 + HRA per month Eligibility M.Sc/M.Tech in Electronics (55%) Validity of Certificate JRF (3 Years) | Lectureship (Lifetime) ðŸ“Ĩ Download UGC NET Electronics PDFs Complete collection of previous year question papers, answer keys and explanations for Subject Code 88. Start Downloading 📂 View All Question Papers June 2026 - Question Paper Download PDF June 202...

Flat vs Frequency Selective Online Simulator

Flat vs Frequency Selective Online Simulator Channel Type Without Fading Flat Fading Multipaths Nakagami m SNR(dB) Run Simulation Input Signal Signal After Fading Constellation Diagram BER vs SNR Explore Advanced Flat vs Frequency-Selective Fading Simulator Want to see these equations in action? Visualize it. Launch Simulator Tool Interactive Rayleigh Fading Simulator Want to see Rayleigh fading in action? Visualize it. Launch Simulator Tool Return to DSP Simulations Main Page →

Theoretical BER vs SNR for binary ASK, FSK, and PSK (with MATLAB Code + Simulator)

📘 Overview & Theory ðŸ§Ū MATLAB Codes ðŸ§Ū Q-function 📚 Further Reading Bit Error Rate (BER) Equations In ASK, noise directly affects the signal amplitude, making it the most vulnerable since the data is carried in amplitude changes. In FSK, data is represented by frequency variations, and because noise typically impacts amplitude more than frequency, FSK is more robust than ASK. In PSK, data is encoded in the signal phase, and BPSK specifically uses 180-degree phase shifts, creating the greatest separation between signal points and therefore achieving the lowest bit error rate (BER) for the same power level. BER formulas for ASK, FSK, and PSK modulation schemes. ASK BER = 0.5 × erfc(0.5 × √SNR) FSK BER = 0.5 × erfc(√(SNR / 2)) PSK BER = 0.5 × erfc(√SNR) ...

AM Modulation Online Simulator

Amplitude Modulation Simulator s AM (t) = A c [1 + k a m(t)] cos(ω c t) where, ω = 2πf & k a = Amplitude Sensitivity Modulation index, Ξ = k a A m Message Frequency (fm): Carrier Frequency (fc): Carrier Amplitude (Ac): Modulation Index (m = Am / Ac): Interactive AM Demodulation Online Simulator Want to see these equations in action? Visualize it. Launch Simulator Tool Interactive AM Power Simulator Visualize it. Launch Simulator Tool Return to DSP Simulations Main Page →

Chirp Signal Simulator

Chirp Signal Simulator Starting Frequency (Hz) Ending Frequency (Hz) Amplitude phase Up-Chirp (unchecked = Down-Chirp) Generate Chirp Demodulate Return to DSP Simulations Main Page →