I Built My Own Radio Scanner From Scratch
Decoding FM radio, CB truckers, aviation controllers, and NOAA weather using a HackRF One and 3,000 lines of Python.
β οΈ Pending Before Publish
- What transmissions actually confirmed received β specific examples?
- Screenshot of the spectrum/waterfall UI available?
- Antenna type and physical setup?
What Is Software-Defined Radio?
A traditional radio is a physical device. Turn a dial, and you're physically adjusting a circuit that filters out everything except the frequency you want.
Software-defined radio (SDR) flips this. The hardware does one thing: capture raw radio signals across a huge chunk of the spectrum simultaneously. The software does everything else β tuning, filtering, decoding, playing audio. Change the software, change what kind of radio you have.
The HackRF One is a USB dongle that can receive β and transmit β any frequency from 1 MHz to 6 GHz. AM radio. FM radio. CB. Aviation. Marine. Weather satellites. WiFi. Bluetooth. All in one device.
What Was Built
Instead of using existing SDR software, everything was built from scratch in Python: signal processing, spectrum display, audio output, scanning, voice detection, and automatic transcription.
The result is a fully custom radio scanner with:
- Live spectrum display β a graph showing signal strength across frequencies in real time
- Waterfall display β a scrolling history where bright colours show strong signals; patterns become visible over time
- Multiple demodulation modes β FM radio, narrow FM (walkie-talkies), AM (aviation), single sideband (amateur radio)
- Band presets β Australian UHF CB, aviation VHF 118β136MHz, marine VHF, amateur 2m/70cm, NOAA weather
- Voice activity detection β records only when someone is actually transmitting, not hours of static
- AI transcription β Whisper converts radio speech to text automatically, entirely locally
What You Can Actually Hear
With a decent antenna:
- FM radio stations β music, news, talk. Essentially perfect quality.
- CB radio (UHF 476β477 MHz in Australia) β truck drivers on highways, road conditions, the occasional heated exchange between truckies
- Aviation VHF (118β136 MHz) β pilots talking to air traffic control. "Approach, QFA123, descending through flight level 180, established ILS runway 34L." Real flight numbers you can track on FlightRadar24 while listening.
- Marine VHF β harbour control, vessel traffic, weather on channel 16
- NOAA weather satellites β with the right antenna (a V-dipole pointed at the sky), you can actually receive raw weather imagery directly from space
- Amateur radio repeaters β local ham operators having conversations
The aviation band is the most compelling. You're hearing real-time communications between specific aircraft and controllers, for flights you can watch on your screen.
How Voice Activity Detection Works
Radio channels are mostly silent. A CB channel might have 10 seconds of transmission every 5 minutes. Recording everything means hours of static.
The voice activity detection (VAD) uses two conditions simultaneously:
1. The signal-to-noise ratio must exceed a threshold (actual signal stronger than background noise)
2. The raw signal level must exceed a minimum floor
Both must be true. This two-condition approach reduces false triggers β a noise spike alone won't start recording unless the SNR is also elevated. When transmission ends, a hold time prevents cutting off someone mid-breath before saving the clip.
Automatic Transcription
Every recorded transmission gets transcribed using Whisper (SYSTRAN's faster-whisper, the efficient version), running entirely locally. No audio sent anywhere.
Transcription runs in a background thread so scanning continues uninterrupted. Quality varies: aviation ATC transcribes excellently β standardised language, clear speech. CB radio varies depending on signal quality and cab noise.
Why Build It From Scratch?
Excellent SDR software already exists: SDRSharp, GNU Radio, GQRX β all free, all capable.
The answer: building from scratch forces understanding at a level that using existing tools doesn't.
Writing an FM demodulator means understanding exactly what FM modulation is, why de-emphasis filters exist, what decimation is. The project notes read like an engineering diary β every bug, every DSP decision, every user feedback session and specific fix applied. That kind of record is one of the most valuable outputs of building something yourself.
The scanner is currently at v8, with all original TODO items complete. The engineering diary is one of the more honest accounts of real-world DSP debugging you'll find.
References
- HackRF One: Great Scott Gadgets. greatscottgadgets.com/hackrf
- libhackrf: GNU Radio project. github.com/greatscottgadgets/hackrf
- faster-whisper: SYSTRAN. github.com/SYSTRAN/faster-whisper
- sounddevice Python library. python-sounddevice.readthedocs.io