Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Radios and hardware

Select a radio on a Device node. SDR-- supports built-in drivers, SoapySDR modules, network receivers, and virtual sources. Use Check hardware or sdrmm --doctor if a receiver is missing.

Built-in drivers

Standard desktop and portable builds include the drivers below, except where noted. The Nix package uses SoapySDR for local hardware. Custom builds can select their own backends.

ReceiverExtra software
RTL-SDRNone
KrakenSDR and KerberosSDRNone
HackRFNone
Airspy R2 and MiniNone; experimental driver
Airspy HF+ and HF+ DiscoveryNone; experimental driver
AntSDR, ADALM-Pluto, and compatible AD936x boardsNone; the board must serve iiod
SDRplay RSP1, RSP1A, RSP1B, RSP2, RSPduo, RSPdx, RSPdx-R2SDRplay API 3.15 or newer
Dragon Labs CR-8Vendor CR-8 library; requires a server build with cr8 enabled

SoapySDR modules for receivers handled by enabled built-in drivers are skipped to avoid duplicate entries. Virtual sources and direct network protocols do not need SoapySDR.

Check the installation

sdrmm --doctor

The report lists compiled backends, loaded libraries, SoapySDR paths and modules, discovered receivers, data paths, and Linux USB permissions. Check hardware on an unbound Device node runs the same checks.

For a radio using SoapySDR, also run:

SoapySDRUtil --info
SoapySDRUtil --find
SoapySDRUtil --probe="driver=bladerf"

Replace bladerf with your module's driver name. If the utility finds a library that SDR-- misses, set SDRMM_SOAPY_LIBRARY to its full path. Use sdrmm --doctor to check built-in drivers; SoapySDRUtil reports only its own modules and devices.

Linux USB permissions

Install your receiver's udev rules and join the group they grant, usually plugdev. Reload udev and reconnect the radio after changing rules. The server account needs permission to open the USB device; SDR-- does not require root.

Containers need the USB bus passed through and the owning group's numeric ID in group_add. Check it on the host with stat -c '%g %G %a' /dev/bus/usb/*/*. See container USB setup for reconnect support and examples.

SoapySDR modules

Install SoapySDR and a matching module for hardware without a built-in driver.

ReceiverModule
bladeRFSoapyBladeRF
LimeSDRSoapyLMS7
USRPSoapyUHD
Remote SoapySDR serverSoapyRemote

Package contents

PackageSoapySDR availability
Desktop installer or portable archiveUses a separately installed system library and modules
Homebrew server formulaInstalls the core as a dependency; add modules separately
NixProvides the core; select modules with soapyPlugins
ContainerIncludes Debian's core and bladeRF, LimeSDR, and SoapyRemote modules

The core loads at runtime. Built-in drivers work when SoapySDR is absent.

Install the core and modules

SystemCoreExample module
Debian, Ubuntu, Raspberry Pi OSsudo apt install libsoapysdr0.8sudo apt install soapysdr-module-bladerf
Fedorasudo dnf install SoapySDRsudo dnf install SoapySDR-bladeRF
Archsudo pacman -S soapysdrsudo pacman -S soapybladerf
macOS with Homebrewbrew install soapysdrbrew install soapybladerf
WindowsPothosSDRIncluded modules
NixOSNix configurationsoapyPlugins

Modules must match the SoapySDR 0.8 ABI. Incompatible modules are rejected and logged. Use these overrides for nonstandard locations:

VariableValue
SDRMM_SOAPY_LIBRARYFull path to the core library
SDRMM_SOAPY_MODULE_PATHExtra module directories, searched before system paths

On macOS, discovery includes Homebrew prefixes. On Windows, put the PothosSDR installation on PATH. To add container modules, see SoapySDR in containers.

Network receivers

Open the Network tab on an unbound Device node and enter the receiver's address.

ProtocolDefault port
rtl_tcp1234
SpyServer5555
AD936x / iiod30431

All three protocols are built in. A remote SoapySDRServer instead requires SoapyRemote and appears through the normal device search.

Virtual sources

Release builds support SigMF recording playback. Synthetic sources are available only in debug builds: a signal generator, a four-lane coherent array, and test transceivers. See Build and test.

Device controls

Controls reflect the selected driver's capabilities: RX/TX lanes, tuning, sample rate, bandwidth, antennas, gain, AGC, clock sources, and model-specific settings. Changing a setting can change other available controls. For example, RTL-SDR direct sampling changes the tuning range.

The interface reports transmit capabilities, but the transmit workflow is not yet available.

RTL-SDR

SettingEffect
TUNERTuner gain
ppmCrystal frequency correction
bias_teeAntenna-port power
agcR82xx tuner AGC
direct_samplingoff, i, or q
  • Gain: uses the tuner's supported steps. An R820T request for 20 dB rounds to 19.7 dB.
  • Sample rate: 225–300 kHz or 900 kHz–3.2 MHz. Rates in the gap are rejected.
  • IF filter: 0–8 MHz on R82xx tuners; 0 selects bandwidth automatically.
  • Direct sampling: unavailable on RTL-SDR Blog V4. Its upconverter handles tuning below 28.8 MHz.

KrakenSDR

KrakenSDR opens as one Device with five lanes; KerberosSDR has four. Discovery groups the tuners by serial number and USB hub. The vendor Raspberry Pi image is not required.

SettingEffect
TUNERGain per lane
ppmCrystal correction
bias_teePower on the array's antenna ports
agcR82xx tuner AGC

All lanes tune together. Direct sampling is unavailable. The shared clock provides time_sync coherence; relative phase must be recalibrated after each retune. SDR-- controls the built-in noise source during array calibration.

If the array is missing, check that every tuner appears in sdrmm --doctor or Linux lsusb. Incomplete units appear as individual dongles.

HackRF

SettingEffect
LNAGain in 8 dB steps
VGAGain in 2 dB steps
AMPSwitchable +14 dB RF amplifier; included in total gain
bias_teeAntenna-port power

Airspy

The built-in Airspy drivers need no libairspy, libairspyhf, or SoapySDR module. Both are experimental: USB and signal-processing tests pass, but live reception has not been verified.

To use SoapySDR instead, build without the airspy and airspyhf features and install the corresponding SoapySDR modules.

Airspy R2 and Airspy Mini

The displayed sample rate is complex IQ output. The USB stream carries real ADC samples at twice that rate; SDR-- converts them to IQ.

LNA, mixer, and VGA gain use firmware step numbers rather than dB. The Device also exposes LNA AGC, mixer AGC, and bias-tee switches.

Airspy HF+ and HF+ Discovery

Tuning covers up to 31 MHz and 60–260 MHz. Frequencies in the gap are rejected.

Controls include a preamp switch, attenuation from 0 to −48 dB in 6 dB steps, AGC, AGC threshold, and bias tee.

At zero-IF rates, the engine offsets the local oscillator and removes DC. The driver does not implement the vendor library's adaptive IQ balancing, so image rejection may be lower at these rates.

AntSDR, PlutoSDR and other AD936x boards

The built-in driver connects directly to iiod over Ethernet or USB. It supports AntSDR E200/E310, ADALM-Pluto, and compatible AD936x boards without a host libiio or SoapySDR installation.

Capabilities come from the board. An AD9361 typically reports 70 MHz–6 GHz; an AD9363 reports 325 MHz–3.8 GHz. A 2×2 board exposes two RX and two TX lanes; a stock Pluto exposes one of each.

SettingEffect
RXReceive gain per lane
TXTransmit attenuation per lane
ppmCrystal correction relative to factory trim
gain_modemanual, slow_attack, fast_attack, or hybrid
quadrature_tracking, rf_dc_tracking, bb_dc_trackingHardware corrections
fir_filterProgrammable decimating filter
tx_portTransmit port
AntennaReceive port; usually A_BALANCED on a single-input board

Discovery: USB boards appear automatically. Search checks ant.local, 192.168.1.10, pluto.local, and 192.168.2.1. Enter other addresses in the Network tab.

Tuning and lanes: the dial tunes RX and TX together. Two RX lanes share a synthesizer and sample clock and report phase coherence. Gain and input port are set per lane.

Sample rate: roughly 2.084–61.44 MS/s, limited in practice by the connection. USB 2.0 carries a few MS/s; gigabit Ethernet allows higher rates.

USB: Linux requires the libiio udev rules. sdrmm --doctor checks them. Boards exposing only two endpoint pairs operate half duplex; simultaneous RX and TX requires another pair.

SDRplay

Install SDRplay API 3.15 or newer and keep sdrplay_apiService running. The built-in driver loads the vendor library at runtime, usually from /usr/local/lib or C:\Program Files\SDRplay\API. No SoapySDR module is needed.

The API is installed separately. If an RSP is missing, check SDRplay API in sdrmm --doctor. Container setup requires the library and host IPC.

Gain

Both sliders show gain, so increasing either raises the signal level.

StageControl
RFLNA gain relative to the band's weakest state; steps depend on frequency, port, and HDR mode
IF0–39 dB, corresponding to the inverse of the API's 20–59 dB gain reduction

AGC controls IF gain. With AGC enabled, the IF slider sets the starting gain and the setpoint sets the target level in dBFS.

Sample rates

Single-tuner modes provide 62.5 kS/s–10.66 MS/s. Rates below 2 MS/s use hardware decimation.

RSPduo

Available operating modes appear as separate choices: Tuner 1, Tuner 2, Dual Tuner, Master, and Slave. The workspace saves the chosen mode. Modes held by another application are unavailable.

Dual Tuner exposes two independently tuned streams. Dual Tuner, Master, and Slave use a 6 MHz ADC rate and 1.62 MHz IF. Output rates are 2 MS/s and successive halvings down to 62.5 kS/s; analog bandwidth is capped at 1.536 MHz.

Slave mode waits for a master application. The master owns the clock; a slave can change its own decimation but cannot apply ppm correction.

Licensing

The Rust interface follows the public SDRplay API specification. The specification grants use of its information for software supporting SDRplay receivers. No vendor source, headers, or binaries are included. Gain tables come from that specification.

Dragon Labs CR-8

The CR-8 has eight phase_coherent lanes sharing a clock and synthesizer. Use one Device node with outputs iq through iq8 for calibration, direction finding, beamforming, or passive radar.

Install the vendor library separately and run sdrmm --doctor to verify loading. Set SDRMM_DLCR_LIBRARY to its full path if it is outside the normal search locations. Use a server build with the cr8 feature enabled. Standard packaged builds exclude this backend.

SettingBehaviour
FrequencyTunes all eight lanes together
Sample rateFixed at 12.5 MS/s
GainLNA, mixer, and VGA per lane
ClockOnboard oscillator or external 10 MHz reference

The tuning range follows the hardware documentation because the SDK does not report it.

How radios are discovered

Discovery runs when USB devices change and once per minute for network radios. SoapySDR probing uses a child process so a crashing or stalled vendor module does not terminate SDR--. For debugging, SDRMM_SOAPY_PROBE=in-process disables that isolation.

Before an unattended deployment

Test the packaged build with your radio:

  1. Save the sdrmm --doctor report.
  2. Stream for at least 30 minutes and check overruns.
  3. Test tuning, gain, sample rate, and the controls you intend to use.
  4. Reconnect the radio and confirm the workspace restores it.
  5. Record a short capture and replay it.