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.
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
-
bladeRF repository and libbladeRF documentation — Nuand, the source for libbladeRF, its synchronous and asynchronous streaming interfaces, and FPGA/host control. ↩