nrsc5¶
HD Radio (NRSC-5) receiver for an RTL-SDR -- the digital side of North American FM and AM
- Version recorded: 3.2.0
- Categories:
broadcast - Upstream: https://github.com/theori-io/nrsc5
What it does¶
nrsc5 receives HD Radio, the in-band digital broadcast used by FM and AM stations in the United States and some other parts of North America (the NRSC-5 standard), from an RTL-SDR dongle, and plays it. Give it a station's frequency and a program number -- 0 is the main program, and upstream's usage takes 0 to 3 -- and it decodes the digital audio to the sound card or to a WAV file, and prints what the station sends alongside: station name, song title and artist, and the station's emergency alerts. It can also save the files the station transmits beside the audio, such as album art (--dump-aas-files), read from an rtl_tcp server on the network (-H), or decode a recording instead of a live dongle (-r). Receive only.
Why you would want it¶
The catalog had DAB twice (welle-io, dablin) and HD Radio not at all, and HD Radio is the digital broadcast standard a North American listener can actually hear. A station's second and third programs (HD2, HD3) exist only in digital and are not heard on an analog radio at all. It is the reference open decoder; GUIs such as NRSC5 Studio and SDR programs with HD Radio plug-ins build on its library, and none of those is carried.
Before it will work¶
An RTL-SDR dongle and an FM antenna, and the dongle's permissions (the rtl-sdr hardware entry's plugdev group). A sound device for live listening; -o file.wav needs none. A station in range that broadcasts HD Radio: outside North America there is usually none, and nrsc5 reports nothing rather than an error.
How it installs¶
- git (cmake) — https://github.com/theori-io/nrsc5 at
v3.2.0(commita5c09723b135327aeef157770caae9aebf597547) - build dependencies:
build-essential,git,cmake,pkg-config,patch,autoconf,automake,libtool,libao-dev,libfftw3-dev,librtlsdr-dev,libusb-1.0-0-dev - the project's build system has no install rule; the binaries listed below are copied into the prefix instead
- Built on 2026-10-01 in a rootless debian:13 container the way this block runs it -- the patch, cmake configure,
cmake --build --parallel 2as an unprivileged user with the build_depends above: exit 0, 40 s wall including the FAAD2 download and its build, 70 MiB peak, two compiler warnings. The executable is 1.0 MB and links libao, FFTW (single precision), librtlsdr and libusb from the archive, with FAAD2 linked in statically. The build dependencies came to 120 packages and about 490 MB on a bare debian:13 image. The same build in a kali-rolling container took 52 s and 86 MiB peak, and decoded the same sample.
Binaries this produces:
src/nrsc5
Known problems¶
It needs the whole dongle: like every librtlsdr program it cannot share the device with gqrx, readsb or another decoder running at the same time. HD Radio is weaker than the analog signal it rides beside, so a station that plays clearly on FM can still lose digital synchronisation indoors; it logs "Lost synchronization" and recovers when the signal does. Set the dongle's frequency error with -p if it is more than a few PPM out. -h is not an option; the usage line it prints in reply lists them all. --dump-aas-files is marked "insecure" in upstream's own README: it writes files into the directory you give, named from what the station transmits (src/main.c builds the path from the broadcast name). Give it an empty directory of its own, or leave it off.
What was measured: built on Debian 13 and Kali, and on both decoded upstream's own recorded sample (support/sample.xz, read with -r): it synchronised, printed the station name, two audio programs and their titles, and wrote 2 MB of audio. Not measured: a live dongle, a real station, sound output, the image dumps or rtl_tcp.
Keeping it current¶
- probe: github tags (
theori-io/nrsc5) - strategy: rebuild
- Upstream has tagged three to four times a year since 2025 (v3.0 2025-05, v3.1.0 2025-12, v3.2.0 2026-06). Move the tag and its commit together; check whether the FAAD2 tag in CMakeLists.txt moved with it, and if so take the new tag's archive hash -- the patch must name the tag upstream builds.
Where to get help with the software itself¶
The project's repository: issues at the URL above, and the README's usage section, which lists every option and the keyboard controls for switching program while it plays. Licence: GPL-3.0-or-later.
Source: catalog/packages/nrsc5.yaml