[PLUGIN] FM/DAB Radio - RTL-SDR

Hey @gkkpch,

Assuming that you are referring to the T802 Farzi, this is MCX to SMA female:

Kind Regards,

I nicked the plug form this one :slight_smile:

The scan is a great addition:

Last post for today on this topic:

Seems a car DAB antenna is the way to go for me:

Dear Volumionauts,

FM/DAB Radio Plugin - Version 1.1.0

Custom Binary Distribution

Version 1.1.0 replaces mainstream distribution binaries with our own custom-compiled fn-* binaries, bringing full RTL-SDR Blog V4 dongle support and faster installation.

What’s New

Custom fn- Binary Suite*

  • fn-rtl_fm, fn-rtl_power, fn-rtl_test - RTL-SDR tools
  • fn-dab, fn-dab-scanner - DAB decoder binaries
  • Pre-compiled for all architectures: armv6 (Pi Zero), armv7, arm64, x64

RTL-SDR Blog V4 Support

  • V4 dongles require osmocom libraries (not standard Debian packages)
  • Custom libfn-rtlsdr library with proper V4 initialization
  • No more “device not found” errors with V4 hardware

Installation Speed

  • Drop-ship method: pre-compiled binaries installed directly
  • Installation time reduced from 20-30 minutes to under 30 seconds
  • fn-* prefix avoids conflicts with distribution packages

Kind Regards,

Dear Volumionauts,

FM/DAB Radio Plugin - Version 1.2.0

New Feature: RDS (Radio Data System) for FM

Version 1.2.0 introduces RDS support for FM stations. Your FM radio now displays live broadcast metadata.

What’s New

RDS Metadata Display

  • Program Service (PS) name - station identification
  • RadioText (RT) - now playing information
  • RT+ tags - structured artist/title when broadcast
  • Program Type (PTY) - genre classification (Pop music, News, etc.)

Signal Quality Handling

  • Text sanitization filters corrupt data
  • Stability checking requires 3 identical readings before display
  • Eliminates garbled station names from weak signals

Display Priority

  • Custom name (user-set) - highest priority
  • RDS PS name - when available
  • Scanned station name - fallback

Technical Implementation

  • Custom fn-redsea binary for RDS decoding
  • FM pipeline: fn-rtl_fm (171kHz MPX) split to fn-redsea + sox
  • Smart throttling: updates only when data changes, max 1 push per 2 seconds

Bug Fixes

  • Fixed race condition causing double-click to play
  • Added Volumio favorites sync
  • Antenna tools now properly pause playback state
  • Recently played timestamps fixed

Note: RDS quality depends on signal strength.

Kind Regards,

1 Like

Still need to install manually?

Hey @Gelo5,

Plugin is available in Music Services category:

You can install manually or using store, plenty of choices.

Kind Regards,

1 Like

Ohh, thank you @nerd - I’m old and blind

1 Like

Wel done @nerd

A little shocked and really confused, that the template master turns out to be blind…

Dear Volumionauts,

Behind the Scenes: Custom Binary Infrastructure

For those interested in the engineering effort behind versions 1.1.0 and 1.2.0, here’s an overview of the build infrastructure I’ve created.

The Challenge

RTL-SDR plugins traditionally require users to compile binaries on-device. On a Raspberry Pi Zero, this means 20-30 minutes of waiting, potential build failures, and dependency headaches. Additionally, the standard Debian rtl-sdr package is stuck at version 0.6 - significantly outdated compared to current development.

The Solution

I’ve built a Docker-based cross-compilation system producing ready-to-install binaries based on rtl-sdr 2.0.2 - bringing years of upstream improvements to Volumio users.

Version Comparison

Source Version V4 Dongle Support Tuner Precision Fixes
Debian packages 0.6 No No
Our custom build 2.0.2 Yes Yes

Build Repositories

Repository Purpose Source
rtlsdr-osmocom RTL-SDR libraries (2.0.2) Osmocom upstream
rtlsdr-blog Alternative RTL-SDR libraries RTL-SDR Blog fork
dab-cmdline DAB/DAB+ decoder (fn-dab, fn-dab-scanner) Jan van Katwijk, heavily modified
redsea-builds RDS decoder (fn-redsea) Oona Raisanen

Why Osmocom Over RTL-SDR Blog Fork?

Both repositories now support V4 dongles (osmocom merged V4 support October 2023). We evaluated both for FM/DAB use:

RTL-SDR Blog Extras Relevant to FM/DAB?
VCO PLL current fix (stability above 1.5 GHz) No - L-band only
Auto-direct sampling for HF below 24 MHz No - FM/DAB above 87 MHz
Bias tee via offset tuning toggle No - convenience feature
Force bias tee EEPROM hack No - convenience feature
L-band VGA gain tweaks No - L-band only
Osmocom 2.0.2 Improvements Relevant to FM/DAB?
r82xx: improved tuner precision Yes
r82xx: avoid redundant register writes Yes - faster tuning
r82xx: batch register writes Yes - faster tuning
Round gain input to nearest value Yes

Key Finding

The rtl_fm tool is identical in both repositories. Neither claims better FM demodulation, DAB reception, or audio quality. For broadcast bands (FM 88-108 MHz, DAB 174-240 MHz) there is no functional difference.

Decision: Osmocom

Reason Explanation
Upstream canonical source Community standard, wider testing
Recent tuner improvements 2024 precision and speed fixes
Cleaner codebase No vendor-specific additions we don’t need
Full V4 support Same as blog fork since October 2023

The blog fork’s extras target HF reception (direct sampling), L-band satellite work (VCO PLL, gain tweaks), and bias tee convenience - none of which affect FM or DAB reception quality.

Architecture Support

Architecture Device Examples Binary Prefix
armv6 (arm) Pi Zero, Pi Zero W, Pi 1 fn-*
armv7 (armhf) Pi 2, Pi 3 (32-bit) fn-*
arm64 (aarch64) Pi 3/4/5 (64-bit) fn-*
x64 (amd64) x86 systems, VMs fn-*

Why Custom Prefixes?

Decision Rationale
fn-rtl_fm instead of rtl_fm Avoids conflicts with Debian rtl-sdr package
fn-dab instead of dab-cmdline Clear identification of our optimized builds
fn-redsea instead of redsea Plugin can verify correct binary is installed
libfn-rtlsdr instead of librtlsdr Coexists with system libraries

Result

  • Installation: under 30 seconds on any device
  • No compiler needed on target system
  • No build failures from missing dependencies
  • RTL-SDR 2.0.2 vs Debian’s 0.6 - years of improvements
  • Consistent, tested binaries across all platforms

All repositories are open source. Contributions and issue reports welcome.

Kind Regards,

2 Likes

Toast shows 2-5 Min., description: 30-60 Sec.

1 Like

Dear Volumionauts,

The Curious Case of the Blue Dongle

TL;DR

Cheap RTL-SDR dongles can now work with DAB radio. Add PPM correction in settings (try values 40-60).


The Investigation

Since initial version of this plugin, I have been chasing a frustrating ghost. The cheap blue RTL-SDR dongles - you know the ones, the generic USB sticks that flood online marketplaces for under $10 - would work perfectly for FM radio but completely fail on DAB.

The maddening part? They work on Windows.

This led to weeks of investigation, reverse engineering, and increasingly desperate hypotheses. I examined Windows driver behavior, analysed USB traffic, studied the RTL2832U datasheet, and dug deep into the R820T tuner specifications. I tried everything:

  • Different sample rates
  • Modified initialization sequences
  • PLL lock workarounds
  • Professional-grade audio resampling with sinc interpolation
  • Adjusted OFDM correlation thresholds
  • Various gain and AGC configurations

Nothing worked. The blue dongles stubbornly refused to decode DAB, while quality dongles from Nooelec and RTL-SDR Blog worked perfectly with identical code.

The Breakthrough

After extensive analysis comparing Windows driver behaviour with our Linux implementation, I finally identified the culprit: the crystal oscillator.

The cheap blue dongles use the absolute lowest-cost components available. The crystal oscillator - the component that sets the reference frequency for the entire device - has terrible accuracy. Where a quality dongle might be accurate to within 1-2 PPM (parts per million), these budget units can be off by 50 PPM or more.

At DAB Band III frequencies (around 220 MHz), a 50 PPM error translates to approximately 11 kHz of frequency offset.

For FM radio, this is irrelevant - FM is designed to be robust against frequency drift, which is why your cheap dongle works fine for FM.

But DAB uses OFDM (Orthogonal Frequency-Division Multiplexing), a technology that requires precise frequency alignment. An 11 kHz error completely destroys the orthogonality between subcarriers, turning your DAB signal into noise. The decoder cannot even begin to synchronise.

Why Windows Works

The Windows drivers include automatic frequency calibration routines that measure and compensate for crystal offset. This happens silently in the background - the user never knows their dongle is defective.

On Linux, the rtl-sdr library exposes this as a manual PPM correction parameter, but most software either ignores it or sets it to zero. Without proper calibration, cheap dongles simply cannot receive DAB.

The Solution

Version 1.2.1 adds a PPM Correction setting for DAB reception.

  • Quality dongles (Nooelec NESDR, RTL-SDR Blog V3/V4): Use PPM = 0
  • Cheap generic dongles: Try values between 40-60

Each dongle has its own specific PPM value due to manufacturing variance. You may need to experiment to find the exact value for your hardware. The tolerance is narrow - being off by even 10 PPM can mean the difference between perfect reception and complete failure.


Hardware Recommendations

Recommended (PPM = 0, no adjustment needed)

  • Nooelec NESDR Smart / SMArt v4 / SMArt XTR
  • RTL-SDR Blog V3 / V4
  • Any dongle with TCXO (Temperature Compensated Crystal Oscillator)

May Work With PPM Correction

  • Generic blue RTL2832U + R820T/R820T2 dongles
  • Unbranded DVB-T dongles
  • Budget dongles without TCXO

Not Recommended

  • Dongles with visible damage or corrosion
  • Units that run excessively hot
  • Anything that cost less than the postage

Technical Details

What is PPM?

PPM (Parts Per Million) measures frequency accuracy. A crystal rated at 28.8 MHz with 50 PPM error could actually oscillate at anywhere from 28.7986 MHz to 28.8014 MHz.

This error propagates through the tuner. When you tune to 225.648 MHz (DAB channel 12B), your dongle might actually be receiving 225.637 MHz or 225.659 MHz - completely missing the signal.

Why I Didn’t Discover This Sooner

The “PLL not locked!” warning message from R820T tuners sent me down the wrong path. I assumed this warning indicated a fundamental hardware limitation at the 2.048 MHz sample rate required for DAB.

After extensive testing, I discovered this warning is cosmetic - the tuner works correctly despite the message. The real problem was frequency offset, not sample rate compatibility.

I even implemented professional-grade audio resampling using the libsamplerate library, attempting to run the tuner at a higher sample rate and downsample to DAB rate. This approach, while technically elegant, actually made things worse by introducing timing jitter that further degraded OFDM synchronisation.

Sometimes the simplest explanation is correct: cheap parts produce cheap results.


Conclusion

The lesson here is one that RF engineers have known for decades: frequency accuracy matters. DAB was designed for professional broadcast equipment with high-precision oscillators, not $8 USB dongles with components sourced from the lowest bidder.

That said, with proper PPM correction, even budget hardware can achieve acceptable DAB reception. Version from 1.2.1 makes this possible without requiring users to understand the underlying RF theory - just adjust the slider until it works.

For reliable, frustration-free operation, I still recommend investing in a quality dongle from Nooelec or RTL-SDR Blog. The additional cost (typically $25-35 vs $8-10) buys you a TCXO crystal, better filtering, and components that actually meet their specifications.

But if you already own a drawer full of cheap blue dongles, they are no longer paperIights. Welcome to DAB radio.


Acknowledgements

This investigation consumed considerable development time across multiple plugin versions. I examined USB protocol traces, studied Windows driver internals, analysed RF theory, implemented and discarded multiple workarounds, and performed extensive testing across different hardware configurations.

The RTL-SDR community documentation, particularly the work by the osmocom and rtl-sdr-blog teams, provided invaluable reference material. The dab-cmdline project by Jan van Katwijk forms the foundation of our DAB implementation.

Special recognition goes to the users who reported issues and provided test data from their own hardware. Without real-world failure reports, I would never have identified the pattern that led to this solution.


RTL-SDR Radio Plugin v1.2.1
“Making cheap hardware work since 2025”


Kind Regards,

7 Likes

May I ask, if price is not a factor, which one is the better choice?
– RTL-SDR Blog V3
– RTL-SDR Blog V4
– NooElec NESDR SMArt XTR
Thank you !

Dear Volumionauts,

FM/DAB Radio Plugin - Version 1.2.3

DAB Metadata Architecture Overhaul

Version 1.2.3 introduces a cleaner, more reliable DAB metadata system with proper support for broadcast-provided artwork.

What’s New

DL Plus (Dynamic Label Plus) Support

  • fn-dab binaries now decode ETSI TS 102 980 semantic tags
  • When broadcasters send ITEM.ARTIST and ITEM.TITLE tags, artwork is fetched automatically
  • Language-agnostic: works with any broadcaster worldwide
  • Output: /tmp/dab/DABdlplus.txt

MOT Slideshow Support

  • fn-dab captures broadcast images (slide_*.jpg/png)
  • Album artwork sent by broadcaster displays directly
  • No internet lookup required when MOT is available

Improved Display Layout

  • Title: Station name (what you’re tuned to)
  • Artist: DLS text (dynamic content - prominent in UI)
  • Album: Ensemble with channel ID, e.g., “London 1 (12C)”

Reliable Text Handling

  • Raw DLS text always displayed exactly as broadcast
  • No text parsing or interpretation
  • Emergency broadcasts display correctly
  • No flickering between tracks

Artwork Priority

  1. DL Plus metadata → Cover Art lookup
  2. MOT slideshow → Broadcast image
  3. Default → dab.svg placeholder

Regional Note

Testing shows UK commercial broadcasters (Bauer, Global) currently transmit basic DLS text only - no DL Plus tags or MOT slideshow. Users in Netherlands, Germany, and other regions with DL Plus/MOT support will see automatic artwork. UK users see raw DLS text with our DAB placeholder image.

This is a limitation of UK broadcast infrastructure, not the plugin. The architecture is ready when UK broadcasters adopt these features.

Kind Regards,

1 Like

:tada: :tada: :tada: :tada: :tada:

Hey @dewen

RTL-SDR Dongle Comparison for FM/DAB Radio Plugin

Feature RTL-SDR Blog V3 RTL-SDR Blog V4 NooElec NESDR SMArt XTR
Tuner Chip R820T2 R828D R820T2
FM Reception Excellent Excellent Excellent
DAB Reception Inconsistent Excellent Inconsistent
TCXO Yes (1 PPM) Yes (1 PPM) Yes (0.5 PPM)
HF Support Yes (direct sampling) Yes (improved) No
Driver Support Standard Requires custom libs Standard
Price (approx) $30 $40 $25

Detailed Analysis

RTL-SDR Blog V3

  • Pros: Well documented, wide community support, direct sampling for HF
  • Cons: R820T2 tuner struggles with DAB OFDM synchronization in our testing
  • DAB Result: Works but occasional sync failures, particularly on weaker signals

RTL-SDR Blog V4

  • Pros: R828D tuner handles DAB OFDM reliably, improved filtering, better sensitivity
  • Cons: Requires custom osmocom libraries (our plugin v1.1.0+ includes these)
  • DAB Result: Consistent lock, stable audio, no sync issues

NooElec NESDR SMArt XTR

  • Pros: Excellent build quality, best TCXO stability, good for frequency-critical applications
  • Cons: Same R820T2 tuner as V3, same DAB limitations
  • DAB Result: Similar to V3 - FM excellent, DAB inconsistent

Clear Winner: RTL-SDR Blog V4

Our testing revealed the R828D tuner in the V4 handles DAB’s OFDM modulation significantly better than R820T2-based dongles. The phase noise characteristics of R828D are better suited for DAB’s complex signal processing.

For FM-only use, all three perform equally well. For DAB or mixed FM/DAB use, the V4 is the clear choice.

Important: Plugin version 1.1.0 or later required for V4 support - earlier versions lack the custom libraries needed for V4 initialization.

Kind Regards,

1 Like

Friday this boy will arrive.
Very curious if the reception will improve when using a powered antenna.

You’re moving way too fast, nerd :rofl:! I ordered the RTL-SDR Blog V3 from Amazon after your post on November 10th, and it only just arrived today… only to discover that RTL-SDR Blog V4
is now your top recommendation. Thankfully, Amazon’s return policy is excellent, so I’ve already swapped it out for the V4 :crazy_face:.

Really looking forward to tinkering with it and adding even more enjoyment to my Pi + Volumio setup.

I just want to say—you’re doing an incredible job. The knowledge and skills you freely share with this community are genuinely inspiring. Thank you for all the patience, kindness, and support you show to everyone here.

Hear, hear !
( A very British way of saying bl**dy fantastic! )