Skip to content

HD Radio Setup

IC edited this page May 28, 2026 · 1 revision

HD Radio (NRSC-5) Setup

NyxScope decodes HD Radio digital subcarriers on FM broadcast stations using the bundled nrsc5 sidecar. When it works it's clean: HD1–HD4 program switching, station logos, song titles, artist names, album art, the works. This page covers the cases where it doesn't work and what to do.

How it works

When you lock onto an FM broadcast station:

  1. NyxScope's host-side resampler interpolates the SDR's IQ stream to the exact 1.488375 Msps rate nrsc5 requires.
  2. CU8-encoded IQ is piped to nrsc5 on stdin.
  3. nrsc5 decodes the HD subcarriers, emits S16LE PCM stereo @ 44.1 kHz on stdout and SIS/PSD metadata on stderr.
  4. NyxScope downsamples the audio to 48 kHz and routes it to the VFO's audio output, muting the analog FM demod.

The whole pipeline is automatic. You don't configure anything per-station.

Auto-enable

In Settings → HD Radio:

  • Enabled — master switch
  • Auto-on FM lock — try HD when locking any FM-broadcast frequency (87.9–108.1 MHz)

With both on, HD Radio attempts on every FM lock. Stations without HD subcarriers just stay on analog FM (no error, no penalty).

Signal requirements

HD Radio's digital subcarriers live ±200 kHz from the carrier and are buried under the analog FM signal. You need a meaningfully strong signal to hear them:

  • Strong analog signal (S9+): HD usually decodes cleanly.
  • Moderate signal (S5–S8): HD may decode but drops out on fades.
  • Marginal (under S5): HD won't sync — NyxScope stays on analog FM.

Tower distance + antenna gain matter more than SDR choice. An indoor wire antenna on a budget RTL-SDR will pick up HD from a local 50 kW station 10 miles away; a fancy SDR with a poor antenna won't.

Switching between HD1–HD4

Most HD stations broadcast HD1 (the main program — same as analog). Some broadcast HD2/HD3/HD4 with separate content (alternative formats, weather, traffic). In the HD Radio panel:

  • The active program button highlights.
  • Click HD2/HD3/HD4 to switch.
  • Audio routing flips on the next sync.

If a station broadcasts only HD1, the HD2/HD3/HD4 buttons stay disabled.

Metadata works but no audio

This is the canonical HD Radio bug. Metadata (station name, artist/title, program type) decodes correctly but audio is silent.

Cause: the nrsc5 binary was built without FAAD2 support. NRSC-5 audio is AAC-encoded; without FAAD2 there's no decoder for the AAC stream, but the metadata (SIS/PSD frames) is plain text and still parses.

Fix: rebuild nrsc5 with cmake -DUSE_FAAD2=ON .. and replace the binary in src-tauri/binaries/. The shipped NyxScope installer's nrsc5 is built with FAAD2 enabled, so this is only a concern if you swapped in a self-built binary.

Verify which build you have: if the program list populates and the station name shows in the HD Radio panel but the audio meters never move, it's a FAAD2 issue. If the program list never populates either, see Signal requirements above.

Tuning details

NyxScope's HD Radio pipeline has some implementation specifics worth knowing if you're debugging:

  • SDR center frequency = station frequency (no analog FM DC-offset trick). Gives nrsc5 the cleanest signal, matching standalone-nrsc5 behavior.
  • Sample-rate negotiation tries [1488375, 2000000, 2400000, 3200000] in order and accepts any rate ≥ 1.487 Msps. Different SDRs land on different rates — RTL-SDR gets exactly 1.488 Msps, HackRF gets 2 Msps, PlutoSDR gets whatever AD9361 rounds to.
  • Host-side resampler does the cleanup with cubic Hermite (Catmull-Rom) interpolation plus a 31-tap Blackman FIR anti-alias filter when downsampling. Zero-cost passthrough when the SDR delivers exactly 1.488 Msps.
  • The nrsc5 sidecar receives CU8 (not CS16 — CS16 is the half-rate FM path), and is told -t raw so it outputs S16LE PCM without a WAV header.
  • Audio resample to 48 kHz happens in NyxScope (linear interpolation from nrsc5's 44.1 kHz output).
  • dsd_audio_override(true) mutes the analog FM demod while HD audio is active — so you don't get both at once.

Most of this you'll never need to know. It matters if you're filing a bug report and want to give detailed context.

Frequency lock isn't HD-aware

NyxScope locks onto FM stations the normal way (double-click a peak, right-click → tune-to, lock-frequency mode). HD detection happens AFTER the lock, not as part of selecting the frequency. So nothing changes about how you find a station — only what happens once you're on it.

Diagnostics

  • HTTP API: /api/hd_radio/status shows current program, BER/PER stats, sync state, signal-strength meters.
  • Debug stats (port 8765 → /api/debug/stats): look for hd_radio_* keys.
  • Logs: tracing info-level messages from the HD Radio decoder log every state transition.

Verified working

98ROCK 97.9 MHz (Baltimore) — confirmed clean HD1 audio + station logo + title/artist with an RTL-SDR v3 and a basic dipole antenna at moderate signal level.


Next: Troubleshooting · FAQ · HTTP-API

Clone this wiki locally