rfnoc_rx_replay_samples_to_file.py could hang and then abort with "Timeout while loading replay buffer!" whenever the requested sample rate was not an integer divisor of the master clock rate. For example, requesting 200 Msps at an MCR of 368.64 MHz would leave the record buffer stuck at exactly 50% fullness. Two problems combined to cause this: First, the rate was read back from the DDC before the graph was committed. At that point the DDC's input sample rate property is not yet valid, so set_output_rate() falls back to setting the output edge property and returns the uncoerced, requested rate. The example then reported a rate that the DDC never actually applied. Second, run_capture() derived the number of samples to request from the radio with int(radio_rate / rate), truncating instead of rounding. With a radio rate of 368.64 Msps and a nominal rate of 200 Msps this yielded a ratio of 1 rather than the decimation the DDC had actually settled on, so the radio was told to produce only half the samples needed to fill the record buffer. The rate is now read back with get_output_rate() after graph.commit(), when property propagation has completed, and the user is warned when the requested rate had to be coerced. The rate ratio is computed with rounding, so the radio is asked for the full number of samples the record buffer needs. While here, fix two related issues in the readback path. The DDC port is now taken from the destination port of the discovered edge rather than assuming it matches the radio channel index, and the rate is read per channel (from the DDC where one is present, otherwise from the radio) so that chains without a DDC are not ignored. Rates are compared against a tolerance rather than for exact float equality. Signed-off-by: Virendra Kakade <virendra.kakade@ni.com> |
||
|---|---|---|
| .ci | ||
| .github | ||
| firmware | ||
| fpga | ||
| host | ||
| images | ||
| mpm | ||
| tools | ||
| .clang-format | ||
| .clang-format-ignore | ||
| .clang-tidy | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| .pre-commit-config.yaml | ||
| .readthedocs.yaml | ||
| CHANGELOG | ||
| CODING.md | ||
| CONTRIBUTING.md | ||
| LICENSE.md | ||
| README.md | ||
USRP Hardware Driver (UHD™) Software
Welcome to the UHD™ software distribution! UHD is the free & open-source software driver and API for the Universal Software Radio Peripheral (USRP™) SDR platform, created and sold by Ettus Research.
UHD supports all Ettus Research USRP™ hardware, including all motherboards and daughterboards, and the combinations thereof.
Documentation
For technical documentation related to USRP™ hardware or UHD system design, check out the UHD and USRP Manual. That is where you can find Installation Instructions, help on how to build UHD from source on different platforms, development guidelines and reference documentation as well as device usage guidance.
Additionally, be sure to check out the Ettus Research FAQ, and the Knowledge Base for useful application notes and tutorials.
OS Support
UHD is primarily developed on Linux, but we also test and support the following operating systems.
- Linux (Fedora and Ubuntu)
- Mac OS X
- Windows 11
Other operating systems will most likely work, too, but are not officially supported.
Applications
UHD can be used to build stand-alone applications with USRP™ hardware, or with third-party applications. Some common toolkits / frameworks are:
- GNU Radio
- RFNoC OOT Blocks
- NI LabVIEW - UHD RFNoC
- NI LabVIEW
- MathWorks Matlab and Simulink
- REDHAWK
- OpenBTS GSM
- Osmocom GSM
- Amarisoft LTE
- Software Radio Systems srsRAN
- Eurecom OpenAirInterface
Directories
host/
The source code for the user-space driver.
mpm/
The source code for the module peripheral manager (MPM). This is code that is run on embedded devices.
firmware/
The source code for all microprocessors in USRP hardware.
fpga/
The source code for the UHD FPGA images.
images/
This contains the package builder for FPGA and firmware images. We provide other tools to download image packages, the scripts in here are mainly relevant for UHD maintainers and -developers.
tools/
Additional tools, mainly for debugging purposes. See the readme-file in that directory for more details on the individual tools.