Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/EttusResearch/uhd/llms.txt

Use this file to discover all available pages before exploring further.

UHD (USRP Hardware Driver) is the free and open-source software driver and API for the Universal Software Radio Peripheral (USRP) platform, created and sold by Ettus Research. It gives developers a unified, hardware-abstracted interface for configuring USRP devices, streaming complex baseband samples, and building complete SDR applications—whether running standalone C++ and Python programs or integrating with third-party frameworks like GNU Radio, MATLAB, or srsRAN.

What is UHD?

UHD is the official driver layer that sits between your application code and Ettus Research USRP hardware. It handles all low-level concerns—device discovery, link-layer encapsulation, clock and time synchronization, gain and frequency tuning, and high-throughput sample streaming—so that application code only needs to interact with a clean, consistent API. The driver is organized around a high-level Multi-USRP abstraction (uhd::usrp::multi_usrp) that works for a single USRP with one or more channels, and equally well for multiple USRPs in a homogeneous configuration. For more advanced use cases—such as directly wiring RFNoC signal-processing blocks together—a lower-level RFNoC graph API (uhd::rfnoc::rfnoc_graph) is also available. UHD is primarily developed on Linux and is actively tested on macOS and Windows. The source tree includes the user-space host driver (host/), embedded peripheral manager firmware (mpm/), FPGA image sources (fpga/), and microprocessor firmware (firmware/).

Supported Hardware

UHD supports the full catalog of Ettus Research USRP hardware, including all current and legacy motherboards and their associated daughterboards. This covers:
  • USRP B-Series – USB-connected, bus-powered devices (B200, B210, B200mini, B205mini)
  • USRP N-Series – 1 GbE and 10 GbE networked devices (N200, N210, N300, N310, N320, N321)
  • USRP X-Series – High-performance, multi-channel devices (X300, X310, X410, X440)
  • USRP E-Series – Embedded, standalone devices (E310, E312, E320)
  • USRP X4xx / N3xx – RFNoC-native Generation-3 and Generation-4 platforms
All USRP motherboards and supported daughterboard combinations are covered. Consult the UHD and USRP Manual for the complete hardware compatibility matrix.

OS Support

UHD is officially built and tested on the following operating systems:
Operating SystemNotes
LinuxPrimary development platform; Fedora and Ubuntu distributions are explicitly tested
Mac OS XIntel-based Macs are supported
Windows 10Fully supported; installers are provided by Ettus Research
Other POSIX-compatible operating systems will likely work but are not officially supported by Ettus Research.

Key Capabilities

Multi-USRP API

The uhd::usrp::multi_usrp class provides a single high-level object that uniformly controls one or many USRP devices. Configure sample rate, center frequency, gain, antenna, bandwidth, clock source, and time reference through a consistent set of get/set methods.

High-Throughput Streaming

RX and TX streamers (uhd::rx_streamer, uhd::tx_streamer) deliver complex baseband samples between the host and device with configurable host CPU formats (fc32, fc64, sc16) and over-the-wire formats (sc16, sc8). Automatic format conversion is handled internally.

RFNoC Graph API

Generation-3 and later USRPs expose an RF Network-on-Chip (RFNoC) fabric. The uhd::rfnoc::rfnoc_graph API lets you discover, connect, and configure on-device DSP blocks—DDCs, DUCs, FIR filters, FFTs, replay buffers—without touching the host CPU.

C, C++, and Python APIs

Write applications in C++ using uhd::usrp::multi_usrp, call the Python bindings via uhd.usrp.MultiUSRP, or integrate from C with the built-in C API wrapper. All three interfaces expose the same device capabilities and are included in every standard UHD build.

Clock & Time Synchronization

Select clock and PPS sources (internal, external, GPSDO, MIMO) at runtime. Set absolute time references for deterministic, phase-coherent multi-channel and multi-device operation. Timed command queuing enables sub-microsecond synchronization across devices.

Remote Streaming

RFNoC devices (X440, X410, X3x0, N3xx, E320) and the legacy N200/N210 support streaming sample data directly to an alternative network destination instead of back to the controlling UHD host, enabling distributed SDR deployments.

API Interfaces

UHD exposes three tiers of API to match different application needs: C++ (uhd::usrp::multi_usrp) — The primary, full-featured interface. Construct a device object with multi_usrp::make(args), configure all radio parameters, then call get_rx_stream() or get_tx_stream() to obtain a streamer. All examples in the UHD source tree use this interface. Python (uhd.usrp.MultiUSRP) — Auto-generated Python bindings that mirror the C++ API. Ideal for rapid prototyping and integration with NumPy-based signal processing pipelines. The uhd.usrp.MultiUSRP constructor accepts the same device address strings as the C++ make() call. C API — A stable C-linkage wrapper included by default in all UHD builds. Suitable for embedding UHD in non-C++ projects or when binary ABI stability is required. See the C API documentation for the full function reference.

Third-Party Integrations

UHD-based USRP devices are supported natively by a broad ecosystem of SDR frameworks and commercial toolchains:
For complete installation instructions, build guides, and device-specific configuration reference, see the official UHD and USRP Manual. The Ettus Research Knowledge Base contains additional application notes, tutorials, and the Technical FAQ.

Build docs developers (and LLMs) love