Simulated traffic only

From raw radio
to a live ATC picture.

Six tools I designed and built that turn software defined radio signals into surveillance, voice, datalink and a standards gap review. Everything on this page is live and hands-on. Click an aircraft, flip a bit, tune a radio, break a separation.

Airspace control deck
Click any aircraft in the sky for its details
6Tools designed, built and documented
11Pages in the ATC Toolkit workstation
24Engineering issues logged and fixed
14ATC information areas reviewed
3Third-party decoders integrated
4Receivers integrated
01 · System overview

The signal chain

Three small programs sit between the receivers and the display. One SDR stick can only tune one frequency, so ADS-B and the radio side run on separate receivers. Click any box for its full details.

RECEIVERS DECODERS MY SOFTWARE DISPLAY SBS feed JSON over UDP MQTT WebSocket embedded page audio stream http USB SDR stick1090 MHz ADS-B Single-board computer + SDRVDL2 / ACARS VHF Networked HF/VHF SDRHF + 118–150 MHz Airband USB stickAirband AM voice dump1090Mode S decode dumpvdl2 / acarsdecdatalink decode Receiver bridgeto SBS overWebSocket Toolkit server+ weather proxy Audio bridgertl_fm to WAV ATC Toolkit v52D / 3D mapPCAP / ASTERIXAnalyse, safety netsWeatherDatalinkDiagnosticsVoice pageReceiver control
Surveillance (ADS-B) Datalink Audio To the display
02 · Decode lab

Inside a 1090 MHz message

This is what dump1090 hears and what the toolkit ends up showing. An ADS-B identification message is 112 bits: who is sending, what kind of message it is, the callsign packed into 6-bit characters, and a 24-bit parity check. Type a callsign, then click any bit to flip it and watch the parity check catch the error.

DF17 extended squitter, identificationvalid
0 bits flipped
Decoded fieldshover a row

Encoder checked against a published reference message from an open ADS-B textbook (Sun, The 1090 MHz Riddle): identical output and parity.

03 · Safety nets

Break the separation

The toolkit's Analyse page checks safety nets. This demo shows the idea behind short-term conflict alert: project both tracks forward, find the closest point of approach, and alert if both the horizontal and vertical minima would be broken inside the look-ahead time. Drag the sliders until it alarms. It is an illustration, not the EUROCONTROL STCA specification.

Conflict probe, simulatedt = 0 s
CLEAR
Controlslive
CPA in–
Miss distance–
Vertical–
Range now–

SIM101 holds FL250 heading 090 at 420 kt. SIM202 flies at 400 kt on the heading and level you set.

04 · The tools

What each one does, hands on

TOOL 01ATC_Toolkit_v5.html

ATC Toolkit

A complete surveillance workstation in a single web page, about 580 KB with no install. It plots aircraft in 2D radar or 3D airspace view, colours each label by its ASTERIX source, and opens an identity card when you click a track.

Input
Live SBS feed over WebSocket, PCAP or raw ASTERIX files, or generated scenarios
Output
Map picture, analysis reports, exports to CSV, SBS, JSON, ASTERIX, GeoJSON and KML
Diagnostics
Global error capture (window errors, promise rejections, render errors) into a downloadable log
Why
Lets one engineer test, replay and inspect surveillance data without an operational system
Decode page, simulatedclick a track
ADS-BSSR / Mode SMLAT / WAMSystem trackEmergency
  • DecodeLive map, 2D or 3D, ID cards
  • GenerateSynthetic traffic and scenarios
  • PCAPASTERIX files, SAC/SIC, A/B compare
  • AnalyseCoverage, data quality, safety nets, FRUIT
  • ToolsConverters, self test, import and export
  • SDR ADS-BWaterfall, MLAT solver, diagnostics log
  • Voice SDRAirband scanner and networked receiver audio
  • NetworksFeed and share status
  • WeatherMETAR, QNH, TAF, SIGMET
  • DatalinkACARS, VDL2, AFTN and AMHS decode
  • networked receiverReceiver source, tuning, bridge log
TOOL 02receiver_bridge.py

Receiver bridge

The translator in the middle. It takes whatever the receivers produce (dump1090's SBS stream, decoder JSON over UDP, or receiver MQTT spots), converts it into the one SBS format the toolkit understands, and serves it on a WebSocket. It also carries control commands back to the networked receiver to tune it.

Input
--sbs, --json-udp, --mqtt, --control
Output
SBS lines on a local WebSocket
Checked by
Built-in --selftest for the conversion logic
Try the conversion: edit the JSONok
Each JSON message becomes one SBS line per message type, in the 22-field BaseStation order. Hover any field to see its name. Illustrative only: the real bridge's field mapping lives in receiver_bridge.py.
TOOL 03audio_bridge.py + networked receiver embed

Airband voice

Lets you listen to the 118 to 137 MHz AM airband inside the toolkit. A second USB stick runs rtl_fm and the audio bridge turns it into a network audio stream; the networked receiver in VHF mode adds a live waterfall and audio panel.

Input
airband USB stick via rtl_fm, or the receiver's own page
Output
/audio.wav?f=123450000 on a local audio port
Hardening
Frequency, mode and gain from the URL are validated; bad values get HTTP 400 (fix E22)
Limit
One listener at a time; the ADS-B stick stays on ADS-B
Waterfall, simulated 118–137 MHzclick to tune
123.450
CLOSED
/audio.wav?f=123450000
TOOL 05serve_toolkit.py + start_all.bat

Toolkit server and launcher

A small web server using only Python's standard library. Serving the page over http rather than opening it as a file removes browser security blocks, and its weather proxy fetches METAR and TAF from an allow-listed set of hosts. The launcher asks which ADS-B source you have and starts everything in the right order.

Serves
This computer only, unless started with --lan
Proxy
GET /wxproxy?url= for 2 allow-listed public weather and aircraft-data services only; others get 403
Why
Fixes the "Failed to fetch" weather error at its root (E2)
Start sequence
TOOL 06atc-coverage-review

ATC coverage review

A structured gap review for any ATC system, simulator, test facility or test procedure. It walks fourteen information areas, ties each gap to the standard that governs it (ICAO, EUROCONTROL, UK CAA CAP 670, Military Aviation Authority) and states plainly which standards were actually checked and which were not.

Answers
"Am I missing anything?" and "Which standard covers this?"
Output
Prioritised gap list with a status label per standard
Rule
An unverified claim shown as fact counts as a defect
The fourteen areasclick a letter
05 · Engineering log

24 problems found and fixed

Every issue hit while integrating real receivers on Windows 11 and a single-board computer, with its root cause and fix. Search it or filter by component.