Version 2.1 is out, and it’s the biggest update yet. OFFgrid-SDR now plays DAB and DAB+ digital radio and DRM in xHE-AAC, still from a single HTML file, with no installation and no internet connection needed once it’s downloaded.

I’ll be honest: these two features were a lot of work, far more than anything before.
DAB and DAB+, from scratch
There’s no DAB library you can drop into a web page, so the whole receiver is written from the DAB standard itself, in JavaScript running in a background worker:
- The radio side: locking onto the multiplex using its null symbol and phase reference, frequency correction to a fraction of a hertz, and differential QPSK demodulation of 1,536 carriers, with each carrier weighted by how reliable it is.
- The data side: Viterbi decoding, time de-interleaving across 16 frames, both of DAB’s protection schemes (EEP and the older UEP), and a Reed–Solomon decoder for DAB+.
- The sound: DAB+ (HE-AAC) through FAAD2, and the original DAB’s MP2 through pl_mpeg, both compiled to WebAssembly.
Then came the debugging. Real broadcasts found bugs that test signals never would: an 8-bit overflow that had me decoding a slice of Radio 2 while calling it Radio 1 Dance; a frequency correction quietly doubling the error instead of removing it; and a setting in FAAD2’s DRM support that threw away half of every real DAB+ station’s audio frames. I fixed that last one with a small, documented patch to FAAD2.
Tested off air on BBC National DAB (12B) with an ordinary RTL-SDR stick, on both a DAB+ station and an MP2 one. Tune anywhere in a multiplex with AUTO on, and it finds the channel, switches to DAB and lists the stations. Click one to listen, or let it start one for you. The box shows each station’s format, bit rate and channels, plus the signal in dB, and if the sound can’t be played, it tells you why.
xHE-AAC for DRM
More and more DRM broadcasters are moving to xHE-AAC, the newer, more efficient codec. OFFgrid-SDR now plays it using libxaac, the decoder inside Android, compiled to WebAssembly. Getting there meant translating DRM’s compact codec description into the standard form libxaac expects, building a stand-in for a C library feature WebAssembly lacks, and checking the result against a real broadcast recording: it matches Fraunhofer’s own decoder almost sample for sample, stereo included.
Try it without a stick
The demo mode now includes a real DAB multiplex (“OFFgrid DAB” on 12A, with a DAB+ and an MP2 station) and two DRM stations, one in AAC and one in xHE-AAC. These aren’t recordings: they’re genuine signals built from the standards, decoded by the same receivers that handle off-air signals. So the demo is a real test that everything works, and a way to try OFFgrid-SDR before buying any hardware.
Free and open
OFFgrid-SDR is free software under the GPL. Every decoder built in has its exact source and build script in the repository, and each one rebuilds byte-for-byte.
👉 Download it from GitHub: https://github.com/diddy-boy/OFFgrid-SDR
As always, feedback and reception reports are very welcome. I’d especially love to hear from anyone with DRM xHE-AAC stations in range, since I can’t receive any from the UK. 73!
diddy
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.