Software-Defined Radio

Raw RF into television,
position, and proof.

I build software-defined radio receivers that decode signals other people need a chip for — NextGen TV, live over-the-air television, a GPS + Galileo position fix — starting from nothing but an antenna, a cheap radio, and the math.

Featured · 01 · Magnum opus

ATSC 3.0 Decoder

A complete software ATSC 3.0 / NextGen TV receiver, built from the published standards and running in real time on an ordinary CPU — no GPU, no FPGA, no demodulator chip. It carries a channel from raw radio all the way to picture, surround sound, and captions: bootstrap → L1 → LDPC/BCH → ALP → IP → MMTP/ROUTE → MPU → a picture on the screen.

A/321 bootstrap → HEVC · real time on a 6-core desktop

The entire NextGen TV stack, decoded in software

Bootstrap · LDPC/BCH FEC · ALP / IP / MMTP · AC-4 5.1 audio · IMSC captions

When this was built there was no open-source ATSC 3.0 receiver that reached a picture, and no open-source AC-4 audio decoder at all — standard tools can identify the audio stream but not decode it. Both were written here, straight from the specifications.

Measured live: 1048 frames, 77,547 of 77,552 FEC blocks converged, zero underruns, and 254 seconds of 720p60 HEVC that re-decodes with no error lines. The decoded IP datagrams are byte-identical — same SHA-256 — to an offline reference chain re-run on the same air, so the live path is provably correct, not merely plausible. Encrypted services are detected and labeled as locked — never attacked or circumvented.

77,547/77,552
FEC blocks converged, live
0
underruns, real time
720p60
HEVC, error-free re-decode
byte-exact
vs. offline reference (SHA-256)
−15 dB
bootstrap detect, 0 false alarms
AC-4
5.1 audio, our own decoder
How it works
  1. 01Bootstrap. Every NextGen frame opens with a tiny fixed beacon, identical for every station on Earth. Correlating against it finds the signal and reads the handful of bits describing the frame — detectable about 15 dB down into the noise.
  2. 02OFDM & L1. The payload rides thousands of orthogonal subcarriers. We equalize out the channel's echoes, read the L1 signalling that says how it's modulated, and turn carriers back into soft bits.
  3. 03LDPC / BCH. Heavy forward-error-correction drives a noisy, fading channel down to zero bit errors — the step that separates a clean picture from static.
  4. 04ALP → IP → MMTP. Corrected bits are unpacked from broadcast link-layer packets into ordinary IP datagrams, then the MMTP/ROUTE media transport — broadcast that speaks the language of the internet.
  5. 05MPU → HEVC. Media fragments are reassembled into an HEVC video stream and decoded to frames.
  6. 06AC-4 & captions. Our from-scratch AC-4 decoder recovers the surround audio and a second language; IMSC/TTML captions are re-timed onto the same media clock so sound, picture, and text stay locked together.
Featured · 02

Software TV Tuner

A free, open-source software TV tuner for today's over-the-air broadcast TV (ATSC 1.0). Point an SDR at a channel and watch free television with no dedicated tuner card — built to run unattended for hours on marginal indoor antennas, where off-the-shelf tuners give up.

Live TV · DVR · Linux & Windows

Watch, record, and surf broadcast TV in software

GNU Radio · SoapySDR · custom equalizer & watchdogs

Three independent watchdogs — decoder, ffmpeg, and player — catch equalizer drift, stalls, and SDR dropouts and respawn the affected stage on their own. It's also a full DVR: read the on-air program guide, schedule shows, record whole muxes (several subchannels at once), surf channels right in the player, overlay captions on the picture, and aim an antenna with a live signal meter.

hours
unattended runtime
3
self-healing watchdogs
1-take
clone → live TV demo
OSS
MIT-style license
How it works
  1. 01Tune & demodulate. An SDR samples the raw RF of a TV channel; we demodulate the 8-VSB signal that US broadcast TV has used for years.
  2. 02Equalize. Multipath smears the signal. An adaptive equalizer continuously re-tunes its taps to hold a clean "eye" — the trick that keeps a marginal indoor antenna watchable.
  3. 03Error-correct. Reed–Solomon and trellis decoding repair the remaining errors and recover the MPEG transport stream carrying several subchannels.
  4. 04Play & survive. ffmpeg demuxes the program; the watchdogs respawn any stalled stage so it runs for hours, with DVR, channel-surf, captions, and a signal meter layered on top.
Featured · 03

gpsTuna

A software GPS and Galileo receiver, from raw SDR IQ. Point any radio at 1575.42 MHz, record the raw L1 hiss, and this turns it into satellite orbits, a relativity experiment, Galileo's navigation message, and your position. No GPS chip — just the antenna, the radio, and the math.

Dual-constellation · jointly solved

A position fix — and a measurement of Einstein — off the air

Acquisition → tracking → nav decode → ephemeris → least-squares

Six GPS and three Galileo birds solved together, with the inter-system time offset as a fifth unknown. Galileo's E1-B navigation message decodes 1161 / 1161 pages CRC-clean, and the receiver reads Galileo System Time straight off the air. One tracked satellite turned out to be E14 — a 2014 wrong-orbit bird used for the classic gravitational-redshift tests — and the decoder read its elliptical ephemeris and do-not-use flag directly from the signal.

26.8 m
joint GPS+Galileo fix (rms)
99.9%
match to GPS clock detune
1161/1161
Galileo pages CRC-clean
+6 dB
deep-acquisition gain
How it works
  1. 01Capture the hiss. Record raw L1 IQ at 1575.42 MHz. GPS arrives around 20 dB below the noise floor — inaudible, but there.
  2. 02Acquire & track. Each satellite carries a unique spreading code; correlating for it pulls the signal out of the noise, then we track its carrier and code phase over time.
  3. 03Decode the message. At 50 bits per second each bird sends its own orbit, clock corrections, and ionosphere model; frame-sync, parity, and a majority vote across repeats drive bit errors to near zero.
  4. 04Solve position. Compute each satellite's location, measure how long its signal took to arrive, correct for satellite clocks, relativity, and Earth's rotation, and least-squares your own position — Galileo folding in as a second constellation.
The rest of the bench

More signals, more decoders

The same approach — turn a captured signal into meaning, and prove it — pointed at other parts of the spectrum.

Everything on this page runs on commodity hardware — a cheap SDR and, where it helps, an antenna you can build. GPU/AI is always optional; there's a CPU path for all of it.

About

Prove it off the air

I'm Felbs, a radio and SDR hobbyist. These projects share one habit: take a signal that normally needs dedicated silicon, decode it in open software, and then hold the result to a real check — a byte-for-byte match against a reference, a CRC that has to close, a physical constant it has to reproduce.

Plausible is not the same as correct. A decoder that passes its own self-test can still be self-consistently wrong. So the work is as much about independent verification as it is about DSP.

Along the way this occasionally surfaces things worth reporting — including a piece of security research on a modern broadcast standard, currently going through responsible disclosure. Details will be published here once the affected parties have been notified.

If you're working on any of this and want to compare notes, get in touch.