sig-x
Table of Contents
sig-x is custom radio software. Where WSJT-X is the program that speaks the digital modes and JS8Call the program that speaks JS8, sig-x is the program that speaks the protocols coming out of my radio protocol research, the ones whose behavior is borrowed from slime moulds, ants, bees, pea plants, and crows. It transmits as well as receives, since a protocol only exists between stations that can both talk and listen, and transmitting on the amateur bands requires a license, which I hold as KD2LFQ. Listening requires no license, and sig-x is built so that someone with no radio background can start by listening.
Radio as an event stream
The engine listens to radio and emits JSON events over a WebSocket, one per decoded message, one per spectrum frame, one per timing slot, and one for engine state, and any client that can open a WebSocket can subscribe, including p5, Max, TouchDesigner, Ableton through a MIDI bridge, or a short Node script. The model I am working from is Arduino and Processing, where the central idea is the event handler, and the goal is that a first program in which a decode triggers a sound takes only a few lines.
sigx.on('decode', e => {
synth.triggerAttack(map(e.snr, -24, 0, 100, 800));
console.log(e.from, e.msg);
});
sig-x treats radio as material rather than as a hobby of contests and awards. The ionosphere is a live signal source that changes with the time of day and the weather, with thousands of operators transmitting on a shared fifteen-second cycle, and the event stream exists so that this material can be used in a patch, a sketch, a set, or a piece rather than logged and filed.
Three parts
The engine is headless, audio in and events out, written in Python with the FT8 decoder behind a C boundary and no interface of its own. SIGOUT bridges the event stream to performance tools over OSC and MIDI and carries a gallery of short sketches. SIGIN is a web client for people with no radio background, kept minimal and in black and white, and written so that it explains itself. The event schema is the contract between them, every consumer subscribes to the same stream, and there is no private channel between the engine and its own interface.
Audio comes in through a sound interface from whatever a receiver is tuned to, or, at very low frequencies, from a bare wire straight into the interface, where audio frequency and radio frequency are the same quantity and no radio, license, or callsign is involved. An RTL-SDR path follows later. FT8 is the first mode decoded, and decoding is optional, since the engine can run spectrum-only. On the transmit side the same event stream carries commands back to the radio, so that keying a transmission is one more thing a sketch or a patch can trigger, gated behind the operator’s license and off by default.
Current status
The decoder builds and decodes reference recordings, verified message for message against WSJT-X on the same files. Live audio, the WebSocket, the event stream, the clients, and the interface are the phases ahead, with the VLF path the first one that produces material for someone who owns no radio at all, and transmit arriving with the first of the new protocols. The code is MIT licensed and will be published as it becomes usable.
Related projects
Radio Protocol Research · Radical Networks · Subnodes · QFM · HouseFM