Live & Operational

About AIRadioScan

Hey there, welcome to AIRadioScan. This whole site is basically one giant, ongoing experiment in mashing up old-school radio tech with modern AI.

What is this?

I wanted to see what would happen if I threw local AI at the chaos of police scanner traffic. Instead of just hosting a standard live audio feed where you have to listen closely through the static, this setup actively "listens" for you. It ingests the raw RF spectrum, runs the audio through local AI to generate real-time transcripts, and automatically groups related dispatches onto the Live Incident Wall.

Since this is a live experiment running on consumer hardware, it's always a work in progress. You might catch the AI hallucinating a weird word or struggling with heavy radio static—that's just part of the fun of pushing the limits of this tech.

Technical Overview

Signal → text → incident

Capture

Two RTL-SDR receivers on separate hosts, each hopping a bank of VHF channels inside a single 2.048 MHz tuner window — so every channel is watched at once, with no scan delay. Squelch and PL/DPL tone decoding happen at the radio; audio moves over TLS-encrypted MQTT.

Conditioning

A spectral noise gate scores every recording on voice-band energy before anything else runs, so squelch tails and dead carrier never reach the transcriber.

Transcribe

Whisper large-v3, with a local faster-whisper instance on an RTX 3060 doing the heavy lifting at roughly 6–9× realtime, plus cloud and CPU tiers behind it so a single outage never creates a blind spot.

Repair

Whisper likes to latch onto a phrase and repeat it, so a loop detector collapses runs while protecting the genuine double-reads dispatch actually uses. A 2,418-street Yakima County gazetteer then repairs place names phonetically — "nay cheese" becomes Naches, "Kewich" becomes Cowiche.

Extract

Deterministic parsing pulls apparatus and unit IDs, addresses, cross streets, incident natures and determinant codes. Licence plates read over the air are detected and deliberately excluded — they carry a registered owner's address and have no business in an incident.

Group

Transmissions become incidents by rule, never by vibes: a call is opened only by a dispatch that names a unit, a nature and a location, and later traffic attaches only when it shares a hard entity. Time can reject a link, never justify one. Every attachment stores the entity that earned it.

Narrate

A local Llama 3.1 8B writes the summary — but only ever over one already-assembled incident, and only from what was actually said. The model never decides what belongs together.

Monitored channels

FreqAssignmentService
154.2575Upper Valley Fire DispatchFire
154.3100Yakima City Fire DispatchFire
154.3850Fire District 5Fire
154.4300Yakima Fire OperationsFire
154.7650Upper Valley Fire TacFire
155.5300Sheriff — Eagle DispatchPolice
156.0000Sheriff — ElephantPolice
156.0150Yakima PD DispatchPolice
156.2100Yakima PD BackupPolice

By the numbers

9Channels
2Receivers
2,503Transmissions
47Incidents
2,418Streets Mapped
24/7Uptime Target

Counts as of 17 Sep 2026 · times in Pacific

Who's Behind It?

I'm Chad, the guy keeping the servers from catching fire. I'm an amateur radio operator, and you can find me on the airwaves under the call sign KA7HAK.

If you have questions, want to talk radio setups, or caught a hilarious AI transcription fail on the live wall, I'd love to hear from you.

✉  chad@airadioscan.com
← Back to AI Radio Scan