How can I efficiently stream and process I/Q data from a Nuand SDR in Python?

Discussions related to embedded firmware, driver, and user mode application software development
Post Reply
EmilyParker
Posts: 1
Joined: Wed Nov 19, 2025 8:09 pm

How can I efficiently stream and process I/Q data from a Nuand SDR in Python?

Post by EmilyParker »

Hi everyone,

I’m currently working on a project using a Nuand SDR device and I want to stream I/Q samples directly into Python for real-time processing. I’m using the standard UHD drivers, but I’m running into performance bottlenecks when handling high sample rates.

Has anyone developed an efficient workflow or library setup for handling high-throughput I/Q data from Nuand SDRs in Python? I’d be especially interested in examples that minimize latency and CPU usage.

Thanks in advance for any guidance or code snippets!
Coding, tinkering,Retro Bowl and always learning
robert.ghilduta
Posts: 168
Joined: Thu Feb 28, 2013 11:14 pm

Re: How can I efficiently stream and process I/Q data from a Nuand SDR in Python?

Post by robert.ghilduta »

We have Python bindings that should allow you to achieve what you are looking for in Python. https://github.com/Nuand/bladeRF/tree/m ... ngs/python

However, please note these are CFFI bindings so libbladeRF is being called directly to receive samples, but all of the number crunching is done in python. To ensure fast processing consider using like numpy to ensure that samples are being consumed faster than the bladeRF is outputting them.

If you run into issues, consider capturing a large number of samples per call and using numpy, or processing the samples "offline" (start, capture, stop, then analyze the samples).
williamcorlin
Posts: 1
Joined: Thu Jan 22, 2026 11:33 pm

Re: How can I efficiently stream and process I/Q data from a Nuand SDR in Python?

Post by williamcorlin »

robert.ghilduta wrote: Thu Nov 20, 2025 12:59 am We have Python bindings that should allow you to achieve what you are looking for in Python. https://github.com/Nuand/bladeRF/tree/m ... gs/python/free online games

However, please note these are CFFI bindings so libbladeRF is being called directly to receive samples, but all of the number crunching is done in python. To ensure fast processing consider using like numpy to ensure that samples are being consumed faster than the bladeRF is outputting them.

If you run into issues, consider capturing a large number of samples per call and using numpy, or processing the samples "offline" (start, capture, stop, then analyze the samples).
Thanks for sharing the information about the Python bindings, Robert! Using CFFI to call libbladeRF directly sounds like a great approach for high-performance processing. I'll definitely look into using NumPy for efficient sample handling. Capturing larger batches of samples also seems like a smart strategy to minimize latency. Appreciate the tips!
Post Reply