← BACK TO PROJECTS RFAI MONITOR
Software-Defined Radio · Local AI

Every transmission. Understood.

RFAI captures radio transmissions over a wide frequency range, transcribes them with local Whisper, classifies intent, and fingerprints individual transmitters — all on-device. No cloud. No subscriptions. From electromagnetic signal to searchable intelligence in seconds.

Local AI · No cloud HackRF One · Airspy · RTL-SDR 1 MHz – 6 GHz Apache 2.0
🎯 Try Live Demo → View on GitHub How it works ↓
qalarc.com/projects/demos/rfai-monitor/app/ 🟢 LIVE
📡
Launch Live Demo
Real Svelte UI · Synthetic data · No SDR needed · Opens in new tab
📡 Dashboard 📋 Log Room 💬 Chat 📊 Analysis 🔬 TX ID
ℹ️
About this demo: The embed above runs the actual Svelte UI in your browser with synthetic data baked in (200+ transmissions, 18 operators, 7 bands). It's read-only — backend mocked via Service Worker. No SDR connected, no live transmissions. For the full live system: clone github.com/fivelidz/rfai-monitor and run ./start-showcase.sh.

The pipeline

Six layers from raw electromagnetic signal to searchable, queryable insight. Each layer adds understanding — no information leaves your machine.

🔊
CAPTURE
SDR samples up to 20 Msps. VAD + squelch detect voice. Auto-record to WAV.
✍️
TRANSCRIBE
faster-whisper streams partial transcripts within seconds. ROCm GPU support.
🧠
UNDERSTAND
Entities (callsigns, Q-codes, locations) + intent classification + urgency score.
🔗
CORRELATE
MFCC + CTCSS biometrics cluster transmissions by probable physical radio.
🚨
ALERT
Urgency scoring flags emergency traffic. Kokoro TTS spoken readback.
🗄️
ARCHIVE
SQLite + FTS5. Every transmission queryable forever, full-text search.

7 pages in the app

The web UI runs locally at localhost:4310 after ./start-showcase.sh. Live data via Server-Sent Events.

📡
Dashboard
Live transmission feed, band activity chart, MIC DEMO button for showcase without SDR.
📋
Log Room
Searchable transmission history. Filter by band, intent, urgency, date range. Flag for retention.
💬
Chat Room
IRC-style view. Bands as channels. Live bubble streams partial transcripts. Transmit panel with TTS.
📻
Scanner
Spectrum waterfall + VFO + hardware config. Band presets, gain, squelch. Requires SDR.
📊
Analysis
Multi-model intent classification bakeoff — Claude vs phi4 vs qwen vs keyword.
🔬
Transmitter ID
Cluster browser. Identity tiers. CTCSS tone, dominant band, transmission count.
ℹ️
About
Full architecture, tech stack, frequency coverage, transmitter ID tiers, roadmap.

Frequency coverage

Australian band presets out of the box. Custom VFO covers 1 MHz – 6 GHz.

476–477 MHz
UHF CB
NFM · 40 channels
Trucking, tradies, convoys.
118–137 MHz
Aviation VHF
AM · 25 kHz
ATC, ATIS, 121.5 guard.
156–174 MHz
Marine VHF
FM · ITU channels
Ch16 distress.
144–148 MHz
2m Amateur
FM · simplex+repeater
146.52 calling.
88–108 MHz
FM Broadcast
WFM
Commercial radio.
26–28 MHz
HF CB
AM · 40 channels
Long-range, skip.
162 MHz
NOAA / BOM
FM
Weather alerts.
430–440 MHz
70cm Amateur
FM / digital
APRS, repeaters.
1 MHz – 6 GHz
Custom VFO
WFM/NFM/AM/SSB
Any frequency.

Technology stack

Hardware

HackRF One1 MHz – 6 GHz, 20 Msps, half-duplex TX/RX
Airspy Mini12-bit IQ — enables RF fingerprinting Tier 2b
RTL-SDR v3Budget option · 500 kHz – 1.75 GHz · 8-bit

Signal Processing

libhackrf · ctypesDirect hardware access — no GNU Radio dep
numpy · scipyFFT, FIR decimation, demod chains (WFM/NFM/AM)
SoapySDRHardware abstraction — drives HackRF/Airspy/RTL-SDR

AI / ML

faster-whisperCTranslate2-optimised. tiny.en → small. ROCm GPU.
Kokoro-82MTTS readback + transmit synthesis. am_michael voice.
Ollama (local LLMs)Intent classification — phi4, qwen, gemma + keyword fallback
HDBSCANVoice + CTCSS biometric clustering — radio hardware ID

Backend

FastAPI · uvicornREST + Server-Sent Events on port 4310
SQLite + FTS5Zero config full-text search. WAL mode.
watchdog · inotifySentinel protocol watches audio dirs

Frontend

Svelte 5 · SvelteKitReactive SPA · adapter-static build
Server-Sent EventsStreaming partial transcripts via SSE
MediaRecorder APIBrowser mic capture for transmit panel

Transmitter fingerprinting

RFAI identifies individual physical radios — not just voices — using a multi-tier biometric system.

T0
Verified callsign
Whisper extracts formal callsign (VK2ABC) from transcript. High confidence — operator stated identity on air.
T1
Spoken handle
Pattern matching extracts self-reported aliases. Medium confidence.
T2
Hardware cluster
18-d feature vector — MFCC + CTCSS + pitch + spectral. HDBSCAN clusters by radio.
T2b
IQ RF fingerprint SOON
Carrier offset + phase noise + turn-on transient. Hardware ID without voice or CTCSS. Needs Airspy.

Roadmap

✅ DoneP0–P6 — Foundation, Intelligence Core, Web UI
HackRF live capture · WFM/NFM/AM demod · faster-whisper STT · Kokoro TTS · entity extraction · intent classification · SQLite + FTS5 · 7-model bakeoff · Svelte SPA with 7 pages · MIC DEMO mode · transmit panel · transmitter fingerprinting
🔧 In ProgressP7 — UI Polish
Light/dark theme switcher · inline audio playback · compact message density · frequency filter pills · CB/Marine channel lookup · live flag SSE broadcast
📋 NextP8 — RF Fingerprinting Tier 2b
Airspy Mini · raw IQ · carrier frequency offset · phase noise signature · turn-on transient · combined IQ + voice + CTCSS fingerprint
📋 NextP9 — Multi-band Correlation
Cross-band operator tracking · channel-hop detection · convoy/group session stitching · temporal patterns
🔮 FutureP10 — qalarc.com Public Demo
You're looking at it. Project landing live. Future: replay mode with pre-recorded session, shareable permalinks.

Legal · privacy

Reception is legal in AU
Radiocommunications Act 1992 permits reception of public radio (CB, amateur, aviation, marine) for personal use.
🔒
All AI runs locally
No audio, transcripts or metadata leave your machine. Whisper, Kokoro, Ollama all local.
⚠️
Transmitting requires licence
UHF CB allows licence-free ≤5W. Amateur bands need ACMA licence. Reception is unlicensed.
🚫
No private comms
Cellular, DECT, encrypted services not targeted. Reception of private comms prohibited.

Run it locally

# Clone the repo git clone https://github.com/fivelidz/rfai-monitor # Install dependencies (if not already installed) pip install fastapi uvicorn faster-whisper sounddevice numpy scipy # Start all 3 services on ports 4310/4311/4312 cd rfai-monitor && ./start-showcase.sh # Open in browser xdg-open http://localhost:4310