Back to all work
Flagship · Solo build · June 2026

X-Band Doppler Radar Speed Gun

RF → analog → DSP → embedded → readout, carried by one engineer

A fully self-contained, handheld radar speed gun that measures vehicle speed in real time, from a 10.525 GHz X-band module, through a custom analog signal-conditioning chain, into a real-time 1024-point FFT pipeline, and onto an embedded microcontroller driving a live OLED readout. It runs standalone on a USB power bank, no computer required. One signal, carried all the way from physics to a number on a screen.

RF / MicrowaveAnalogDSPEmbeddedUI
The Doppler radar speed gun build on a breadboard
The build, Pico 2, HB100 X-band module, two-stage analog amp, and the OLED reading “RADAR GUN.” Tap to enlarge.
Why it stands out

End-to-end, multi-domain, solo

Most student projects live in one domain, just embedded, or just a circuit. This one crosses RF → analog → DSP → embedded → UI, built and debugged solo from physics first principles to a working physical device. Each subsystem was validated independently before integration, mirroring real product development, and the result is a tangible, demonstrable instrument with measurable accuracy, not a simulation.

How it works

From Doppler shift to speed

A moving object reflects the radar's wave back at a slightly shifted frequency, higher when approaching, lower when receding. That shift is directly proportional to speed, so measuring it gives the velocity. At X-band, the math works out to a clean constant:

f_d = 2·v·f₀ / c  →  31.36 Hz per mph at 10.525 GHz

Illustration of the Doppler return, wavefronts compress as a source approaches the sensor and stretch as it recedes.

Signal chain
RF
HB100
10.525 GHz X-band
Analog
Amp + Bias
µV → ADC level
Sample
ADC
8 kHz · RP2350
DSP
1024-pt FFT
~7.8 Hz / bin
Convert
Velocity
31.36 Hz / mph
Output
OLED
live readout
The numbers

Key specs

RF frequency10.525 GHz (X-band)
Doppler sensitivity31.36 Hz / mph
Sample rate8 kHz
FFT size1024-point
Resolution~7.8 Hz/bin (≈0.25 mph)
Max speed~128 mph (Nyquist)
MCURP2350 · dual Cortex-M33
DisplaySSD1306 OLED · I²C
PowerUSB power bank · standalone
Analog design

Conditioning a µV signal

The HB100's baseband output is tiny, microvolts to millivolts. A multi-stage amplifier boosts it to usable ADC levels, with 100 nF AC coupling to strip DC offset and a 10 kΩ / 10 kΩ divider to 3.3 V biasing the AC signal for single-supply sampling. I verified the whole amplifier in LTspice before building, a two-stage non-inverting design (~101× per stage) around an LM358-class op-amp model, then prototyped and debugged it on a breadboard.

Process

A phased build

PHASE 01
Analog hardware
Built and debugged the RF front end and multi-stage amplifier on a breadboard, biasing, AC coupling, and signal tracing, after verifying the design in LTspice.
PHASE 02
Python DSP prototype
Digitized the conditioned signal through the PC sound card and validated the FFT → velocity pipeline in NumPy: peak detection, magnitude thresholding, low-frequency bin masking, moving-average smoothing.
PHASE 03
Embedded port
Ported the pipeline onto the Pico 2 in C/C++ with ArduinoFFT, fitting it into MCU memory/compute and driving the OLED, fully standalone on a power bank.
Proof & process

From simulation to silicon

Tap any image to enlarge.

Footage

Demos & bench tests

Bench tests and demos, embedded below. If a clip doesn't load, set its Google Drive sharing to “anyone with the link.”

OLED speed screen, the live speed readout
X-band, correct 10.5 GHz return
Ka-band, harmonics error (debugging)
Radio waves, bench testing
Methodology

Debugging discipline

Debugged the full chain stage by stage, power-rail verification, continuity testing, and signal tracing, and used Audacity to capture and analyze the conditioned signal during bring-up, isolating components to get true in-circuit readings.

Trajectory

What's next

Porting the DSP into custom digital logic on an FPGA (Tang Nano 9K), moving the signal processing from software into hardware, toward hardware-level DSP and digital design.

Stack
C/C++ (Arduino)Python · NumPyRP2350 / Pico 2PlatformIOArduinoFFTHB100 X-bandSSD1306LTspiceAudacity