Field Guide · technology

Also known as: libbladeRF, bladeRF library

libbladeRF is the host-side C library that drives Nuand’s bladeRF family of full-duplex transceivers, giving applications control of tuning, gain, the on-board FPGA, and both simultaneous transmit and receive IQ streams.1 It is a notably richer host library than the receive-only dongle drivers, matching the bladeRF’s position as a lab-grade transceiver.

application libbladeRF bladeRF + FPGA RX stream ⇅ TX stream (full-duplex) + control USB 3.0
libbladeRF carries two simultaneous IQ streams — receive and transmit — over USB 3.0, plus control and FPGA configuration, reflecting the bladeRF's full-duplex design.

How it works

An application opens a device with bladerf_open, optionally loads an FPGA bitstream with bladerf_load_fpga, and configures per-channel parameters through bladerf_set_frequency, bladerf_set_sample_rate, bladerf_set_bandwidth, and bladerf_set_gain. The RF transceiver underneath is an LMS6002D (bladeRF x40/x115) or an AD9361 (bladeRF 2.0 micro), and libbladeRF abstracts their register maps behind that uniform interface. Samples are 12-bit-native but carried in 16-bit int16 IQ pairs (an SC16Q11 fixed-point format), and the library also exposes the FPGA’s expansion I/O, triggers, and the VCTCXO calibration.

libbladeRF deliberately offers two streaming interfaces, illustrating the classic stream-versus-callback choice within one API. The synchronous interface (bladerf_sync_rx/bladerf_sync_tx) is a blocking pull model: the application calls to receive or transmit a block and the library manages buffering internally — simple to write against. The asynchronous interface registers callbacks and runs a buffer pool the application services as transfers complete — lower latency and finer control, but more work. Because the hardware is full-duplex over USB 3.0, RX and TX streams can run at once, so the async path commonly drives both directions concurrently.

In practice

The library ships with the bladeRF-cli control/scripting tool and utilities for loading FPGA images and flashing firmware. It is wrapped by gr-osmosdr and by a SoapyBladeRF plugin for SoapySDR, so cross-vendor applications can reach the device through those common layers. The FPGA is a first-class part of the workflow: users can load Nuand’s stock images or their own gateware to offload DSP (channel filtering, decimation, custom triggers) before samples ever cross USB.

Relevance to SDR

libbladeRF is the gateway to full-duplex, transmit-capable, FPGA-accelerated SDR at up to 61 MS/s (2.0 micro), which puts it in a different class from receive-only dongles and closer to the USRP end of the market. For a developer it is an instructive host library precisely because it exposes both streaming philosophies and because so much of the signal path can be pushed into the FPGA — a reminder that where DSP runs (device, host, or somewhere between) is a design decision, not a given.

GopherTrunk is a receive-only, pure-Go decoder with no FPGA offload and no transmit path, so it uses only a fraction of what a transceiver like the bladeRF offers. It does not link the C libbladeRF; it takes IQ over network transports or from recorded IQ files and does all of its channelization and demodulation in Go on the host CPU. The bladeRF’s wide capture bandwidth is nonetheless well matched to GT’s multi-channel channelizer, which is built to split a wideband stream into many simultaneously decoded trunking channels.

Sources

  1. bladeRF repository and libbladeRF documentation — Nuand, the source for libbladeRF, its synchronous and asynchronous streaming interfaces, and FPGA/host control. 

See also