How It Works

– watching now

Dispatch460 captures Milford Fire and EMS radio on two channels — 154.340 MHz and 155.130 MHz — and turns each transmission into searchable, mapped, transcribed text within seconds. Here's the full pipeline, from antenna to web page.

On-premises capture RSPduo dual-tuner SDR CH1 154.340 + CH2 155.130 MHz GNU Radio FM + squelch Two recorders, per-channel File queue WAV + sidecar, pending/done Processing pipeline Queue worker Sequential, chronological Static gate Mutes loud noise bursts Whisper large-v3 Self-hosted, fine-tuned Filter non-speech Drops sounds, hallucinations Detect + correct Dispatch flag, street names Geocode OpenStreetMap / Nominatim Cloud PostgreSQL + S3 Records + audio, on AWS Django web app Live feed, badges, map

On-premises capture

RSPduo dual-tuner SDR

A single SDRplay RSPduo software-defined radio captures both frequencies at once using its two independent tuners — CH1 (154.340 MHz) and CH2 (155.130 MHz).

GNU Radio FM + squelch

Two recorder processes demodulate the FM signal and use a signal-strength squelch to record only when a transmission is active, saving each to an audio file.

Processing pipeline

File queue

Completed recordings land in a shared queue as audio files with metadata sidecars, decoupling capture from processing so neither step blocks the other.

Queue worker

A single worker drains the queue in chronological order, processing one transmission at a time to avoid overloading the transcription model.

Static gate

Loud noise bursts (open-squelch static, louder than the voice) are detected and muted before transcription — cleaning the audio users hear and improving accuracy.

Whisper large-v3

Whisper is an open-source speech-recognition model from OpenAI that converts spoken audio into text. Dispatch460 runs a fine-tuned version — trained further on real Milford radio traffic so it accurately recognizes local street names, unit designations, and dispatch terminology a general model would miss. Running it self-hosted, on local hardware rather than a cloud API, keeps audio processing on-premises and avoids per-transcription costs.

Filter non-speech

Transmissions that are only sounds (horns, tones, Morse ID) or transcription artifacts are filtered out so they don't clutter the feed.

Detect + correct

Automated detection flags real dispatches (alert tones plus dispatch keywords), and a correction dictionary fixes known transcription errors in local street names.

Geocode

Dispatch addresses are geocoded via OpenStreetMap / Nominatim to place each call on the map.

Cloud

PostgreSQL + S3

Transcriptions and metadata are stored in a PostgreSQL database (AWS RDS); the audio files are stored in Amazon S3.

Django web app

A Django application on AWS serves the live feed, channel badges, and map — updating within seconds of each broadcast.