Real-time RF spectrum monitoring with drone detection, voice alerts, and signal analysis. Built for HackRF One and RTL-SDR.
Author: Ihor Kolodyuk
- Live spectrum table β split-screen: suspicious left, known signals right, grouped by type
- Signal grouping β same-type signals merged with count, strongest power, nearest distance
- Drone detection β 45 RF signatures (DJI OcuSync/O3/O4, HDZero, Walksnail, ELRS, Crossfire, analog FPV)
- Voice alerts β TTS HAL 9000 voice with signal type + distance announcements
- Signal classification β Artemis 3 database (432 signatures) + spy database (47) + drone database (45)
- Suppress mode β HackRF TX jammer for Cellular, Bluetooth, GPS (hotkey: s)
- Distance estimation β FSPL-based distance calculation per signal type
- Instant hotkeys β background key listener thread for q/r/m/v/s/+/- (no scan delay)
- RTL-SDR support β auto-detects HackRF or RTL-SDR, adapts scan method
- Voice decoding β DSD (DMR, D-STAR, NXDN), multimon-ng (POCSAG, DTMF, Morse)
- Duty scan mode β continuous monitoring with configurable interval
# Install dependencies
sudo apt-get install -y hackrf rtl-sdr dsdcc multimon-ng sox
pip3 install edge-tts numpy
# Clone
git clone https://github.com/ihorman/rflord.git
cd rflord
# Run the monitor
python3 rflord.py
# Or with custom interval
python3 rflord.py --interval 60# Default β full scan, 120s interval, voice alerts
python3 rflord.py
# Faster updates
python3 rflord.py --interval 60
# Install as system command
sudo cp rflord.py /usr/local/bin/rflord
sudo chmod +x /usr/local/bin/rflord
rflord --interval 60# Single scan with full report
python3 scanner.py --focus full
# Camera-focused scan (900 MHz, 1.2 GHz, 2.4 GHz, 5.8 GHz)
python3 scanner.py --focus cameras
# Continuous duty monitoring
python3 scanner.py --duty --interval 120
# Specific frequency range
python3 scanner.py --band 2400:2500
# Force device
python3 scanner.py --device hackrf
python3 scanner.py --device rtlsdr# Decode voice at frequency
python3 voice_decode.py scan 155.0 # Auto-detect mode
python3 voice_decode.py scan 130.0 --mode am # AM (air band)
python3 voice_decode.py scan 446.0 --mode dmr # DMR digital
python3 voice_decode.py scan 446.0 --mode pocsag # POCSAG pagers# Capture and decode FPV video
python3 fpv_decode.py capture --freq 5800 --standard NTSC --output frame.png
python3 fpv_decode.py capture --freq 1280 --standard PAL --spectrogram --output frame.png| Color | Meaning |
|---|---|
| π΄ RED | Top 3 strongest suspicious signals |
| π‘ YELLOW | Other suspicious signals |
| π’ GREEN | Known/identified signals |
| π£ MAGENTA | Drone activity detected |
| β‘ CW | Continuous carrier (possible beacon) |
| Code | Description |
|---|---|
| DP/USB | DisplayPort/USB interference harmonic |
| USB-noise | USB 2.0 clock noise (480 MHz harmonics) |
| DAB | Digital Audio Broadcasting |
| CW | Continuous wave carrier |
| TETRA | Public safety radio |
| WiFi/BT | WiFi or Bluetooth |
| Digital | Digital modulation (bursty) |
| Analog | Analog signal |
rflord.py β Clean table monitor (main UI)
scanner.py β Full scanner with detailed reports
drone_rf_db.py β Drone RF signature database (45 signatures)
drone_dsp.py β Drone signal DSP analysis (OFDM detection)
voice_decode.py β Voice decoder (DSD + multimon-ng)
rf_analysis.py β Distance estimation + territory classification
fpv_decode.py β FPV video frame decoder
tv_capture.py β TV frame capture (analog + digital)
- Hardware: HackRF One or RTL-SDR
- System: hackrf_transfer, rtl_sdr, rtl_power, dsdccx, multimon-ng, sox, aplay/paplay
- Python: numpy, edge-tts
- Audio: PipeWire or PulseAudio
- Scans all RF bands using hackrf_sweep (1 MHz - 6 GHz)
- Classifies each signal against known databases
- Identifies drone activity using 45 RF signatures
- Estimates distance using Free-Space Path Loss
- Classifies territory (city/suburban/countryside)
- Captures IQ samples for deeper analysis
- Tries voice decode (DSD, multimon-ng) on narrowband signals
- Announces findings via TTS voice alerts
- Drones: DJI OcuSync/O3/O4, HDZero, Walksnail, ELRS, Crossfire, TBS Tracer, FrSky, Spektrum
- Analog video: NTSC/PAL FPV transmitters (900 MHz, 1.2 GHz, 2.4 GHz, 5.8 GHz)
- Digital voice: DMR, D-STAR, dPMR, YSF, NXDN, P25
- Data: POCSAG, FLEX, EAS, DTMF, Morse, AFSK
- Cellular: GSM 900/1800, 3G, 4G LTE
- Broadcast: FM, DAB, DVB-T
- WiFi IP cameras are indistinguishable from normal WiFi traffic
- Cameras recording locally have no RF emission
- DJI drones use encrypted video β cannot decode content
- Narrowband signals (<50 kHz) are not video transmitters
- 900 MHz band is GSM cellular in most locations
MIT
Ihor Kolodyuk