FMCW Radar — Object Tracking media

Project

FMCW Radar — Object Tracking

Built an FMCW radar system to detect and track objects in real time using TI's mmWave evaluation module.

PythonTI AWR6843AOPmmWave StudioCode Composer StudioFFTSignal ProcessingUniflash

Timeline · February 2026 — Present

GitHub: N/A

Summary

This project uses Frequency Modulated Continuous Wave (FMCW) radar to measure the range and velocity of a moving object. The hardware is TI's AWR6843AOP mmWave evaluation module which is a small board with on-chip transmit and receive antennas that sends out frequency chirps and listens for reflections. The processing pipeline I built takes the raw return signals and turns them into a range-Doppler map that updates in real time, showing where the object is and how fast it's moving.

How It Works

The radar transmits a linear frequency sweep (a "chirp"). When that chirp bounces off a target and comes back, there's a frequency difference between what's currently being transmitted and what's being received—the beat frequency. That beat frequency is directly proportional to range: farther target, higher beat frequency.

To extract it, I run a Range FFT across the ADC samples from each chirp. That gives a spectrum where each peak corresponds to a target at a specific distance. I apply a window function before the FFT to keep the sidelobes down so nearby targets don't bleed into each other.

Velocity comes from the Doppler FFT. Across successive chirps in a frame, a moving target's return signal shifts in phase. Running an FFT across chirps at each range bin pulls out that phase shift as a Doppler frequency, which maps directly to radial velocity. The result is a 2D range-Doppler map.

From there, I threshold the map to pick out the object's return and track its position frame to frame.

Toolchain

The TI ecosystem has a few moving parts. Code Composer Studio handles the firmware on the radar module. Uniflash is used to flash the firmware onto the EVM. mmWave Studio configures the chirp parameters and handles raw data capture from the board. The actual signal processing pipeline runs in Python on the laptop side.

Challenges

Getting all four tools to cooperate with the EVM was honestly one of the more tedious parts of the project. Driver issues, firmware version mismatches, and serial port configuration took longer than I'd like to admit, as well as the general learning curve of teaching myself the basics of RF and signal processing.

Additionally, reducing chatter when using the radar was challenging, since the radar picked up reflections from everything near me. On the range-Doppler map these show up as strong returns at zero or near-zero Doppler (since they're stationary), but they smear into the bins around them.

Future Plans

In the future, I'd like to implement further hardware to the radar, including developing my own launch monitor for golf shots, or a three axis gimbal to continuously allow the radar to track moving objects