Merge pull request 'sdr_guides-updates' (#2) from sdr_guides-updates into sdr

Reviewed-on: #2
Reviewed-by: madrigal <madrigal@qoherent.ai>
This commit is contained in:
Michael Luciuk 2025-10-02 16:00:33 -04:00
commit 37f3ce715f
7 changed files with 130 additions and 115 deletions

View File

@ -40,10 +40,16 @@ Limitations
- USB 3.0 connectivity is required for optimal performance; using USB 2.0 will significantly limit data
transfer rates.
Set up instructions (Linux)
Set up instructions (Linux, Radioconda)
---------------------------
Step 1: Install the base dependencies and drivers ('Easy method')
Step 1: Activate your Radioconda environment.
.. code-block:: bash
conda activate <your-env-name>
Step 2: Install the base dependencies and drivers ('Easy method')
.. code-block:: bash
@ -53,33 +59,19 @@ Step 1: Install the base dependencies and drivers ('Easy method')
sudo apt-get install libbladerf-dev
sudo apt-get install bladerf-fpga-hostedxa4 # Necessary for installation of bladeRF 2.0 Micro A4.
Step 2: Create and/or activate your virtual environment
Step 3: Install a udev rule by creating a link into your radioconda installation.
.. code-block:: bash
python3 -m venv venv
pip install -r requirements.txt # If relevant
source venv/bin/activate
Step 3: from within the virtual environment, clone the bladerf host repo, then build and install the wheel for
bladerf python bindings.
.. code-block:: bash
cd ~
mkdir workarea
cd workarea
git clone --depth 1 https://github.com/Nuand/bladeRF.git
cd bladeRF/host
cd libraries/libbladeRF_bindings/python
sudo python3 setup.py bdist_wheel
pip install dist/*.whl
sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/88-nuand-bladerf1.rules /etc/udev/rules.d/88-radioconda-nuand-bladerf1.rules
sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/88-nuand-bladerf2.rules /etc/udev/rules.d/88-radioconda-nuand-bladerf2.rules
sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/88-nuand-bootloader.rules /etc/udev/rules.d/88-radioconda-nuand-bootloader.rules
sudo udevadm control --reload
sudo udevadm trigger
Further Information
-------------------
- `Official Website <https://www.nuand.com/>`_
- `BladeRF Documentation <https://www.nuand.com/documentation/>`_
- `GitHub Repository <https://github.com/Nuand/bladeRF>`_
- `BladeRF GitHub Repository <https://github.com/Nuand/bladeRF>`_
- `Radioconda Github Repository <https://github.com/radioconda/radioconda-installer?tab=readme-ov-file#bladerf>`

View File

@ -39,18 +39,47 @@ Limitations
- Bandwidth is limited to 20 MHz.
- USB 2.0 connectivity might limit data transfer rates compared to USB 3.0 or Ethernet-based SDRs.
Set up instructions (Linux)
Set up instructions (Linux, Radioconda)
---------------------------
Step 1: Activate your Radioconda environment.
.. code-block:: bash
conda activate <your-env-name>
Step 2: Install the System Package (Ubuntu / Debian)
.. code-block:: bash
sudo apt-get update
sudo apt-get install hackrf
Step 3: Install a udev rule by creating a link into your radioconda installation.
.. code-block:: bash
sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/53-hackrf.rules /etc/udev/rules.d/53-radioconda-hackrf.rules
sudo udevadm control --reload
sudo udevadm trigger
Make sure your user account belongs to the plugdev group in order to access your device:
.. code-block:: bash
sudo usermod -a -G plugdev <user>
You may have to restart for this change to take effect.
---------------------------
`HackRF Software Installation Guide <https://hackrf.readthedocs.io/en/latest/installing_hackrf_software.html>`_
.. todo::
Addition HackRF installation instructions
Further information
-------------------
- `Official Website <https://greatscottgadgets.com/hackrf/>`_
- `Project Documentation <https://hackrf.readthedocs.io/en/latest/>`_
- `GitHub Repository <https://github.com/greatscottgadgets/hackrf>`_
- `HackRF GitHub Repository <https://github.com/greatscottgadgets/hackrf>`_
- `Radioconda Github Repository <https://github.com/radioconda/radioconda-installer?tab=readme-ov-file#hackrf>`

View File

@ -43,28 +43,49 @@ Limitations
affect stability.
- USB 2.0 connectivity might limit data transfer rates compared to USB 3.0 or Ethernet-based SDRs.
Set up instructions (Linux)
Set up instructions (Linux, Radioconda)
---------------------------
The PlutoSDR Python API can be installed via pip. To build and install the drivers from source, see the instructions below:
Step 1: Activate your Radioconda environment.
.. code-block:: bash
# Install required packages
sudo apt-get update
sudo apt-get install -y \
build-essential \
git \
libxml2-dev \
bison \
flex \
libcdk5-dev \
cmake \
python3-pip \
libusb-1.0-0-dev \
libavahi-client-dev \
libavahi-common-dev \
libaio-dev
conda activate <your-env-name>
Step 2: Install system dependancies.
.. code-block:: bash
sudo apt-get update
sudo apt-get install -y \
build-essential \
git \
libxml2-dev \
bison \
flex \
libcdk5-dev \
cmake \
libusb-1.0-0-dev \
libavahi-client-dev \
libavahi-common-dev \
libaio-dev
Step 3: Install a udev rule by creating a link into your radioconda installation.
.. code-block:: bash
sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/90-libiio.rules /etc/udev/rules.d/90-radioconda-libiio.rules
sudo udevadm control --reload
sudo udevadm trigger
Once you can talk to the hardware, you may want to perform the post-install steps detailed on the PlutoSDR documentation below.
Step 4 (Optional): Building libiio or libad9361-iio from source.
Only needed if you want the very latest version of the libraries not provided in Radioconda:
.. code-block:: bash
# Clone and build libiio
cd ~
@ -87,10 +108,8 @@ The PlutoSDR Python API can be installed via pip. To build and install the drive
make -j"$(nproc)"
sudo make install
# Install Python bindings
pip install pyadi-iio
Further information
-------------------
- `PlutoSDR Documentation <https://wiki.analog.com/university/tools/pluto>`_
- `Radioconda Github Repository <https://github.com/radioconda/radioconda-installer?tab=readme-ov-file#iio-pluto-sdr>`

View File

@ -1,40 +0,0 @@
.. _rtl:
RTL-SDR
=======
RTL-SDR (RTL2832U Software Defined Radio) is a low-cost USB dongle originally designed for digital TV reception
that has been repurposed as a wideband software-defined radio. RTL-SDR devices are popular for hobbyist use due to
their affordability and wide range of applications.
The RTL-SDR is based on the Realtek RTL2832U chipset, which features direct sampling and demodulation of RF
signals. These devices are commonly used for tasks such as listening to FM radio, monitoring aircraft traffic
(ADS-B), receiving weather satellite images, and more.
Supported Models
----------------
- **Generic RTL-SDR Dongle:** The most common variant, usually featuring an R820T or R820T2 tuner.
- **RTL-SDR Blog V3:** An enhanced version with additional features like direct sampling mode and a bias tee for
powering external devices.
Key Features
------------
- **Frequency Range:** Typically from 24 MHz to 1.7 GHz, depending on the tuner chip.
- **Bandwidth:** Limited to about 2.4 MHz, making it suitable for narrowband applications.
- **Connectivity:** USB 2.0 interface, plug-and-play on most platforms.
- **Software Support:** Compatible with SDR software like SDR#, GQRX, and GNU Radio.
Limitations
-----------
- Narrow bandwidth compared to more expensive SDRs, which may limit some applications.
- Sensitivity and performance can vary depending on the specific model and components.
- Requires external software for signal processing and analysis.
Further Information
-------------------
- `Official Website <https://www.rtl-sdr.com/>`_
- `RTL-SDR Quick Start Guide <https://www.rtl-sdr.com/rtl-sdr-quick-start-guide/>`_

View File

@ -41,40 +41,53 @@ Limitations
- Compatibility with certain software tools may vary depending on the version of the UHD.
- Price range can be a consideration, especially for high-end models.
Set up instructions (Linux)
Set up instructions (Linux, Radioconda)
---------------------------
1. Install the required system packages via APT:
.. code-block:: bash
sudo apt-get install libuhd-dev uhd-host python3-uhd
2. Build and install UHD from source:
Step 1: Activate your Radioconda environment.
.. code-block:: bash
sudo apt-get install git cmake libboost-all-dev libusb-1.0-0-dev python3-docutils python3-mako python3-numpy python3-requests python3-ruamel.yaml python3-setuptools build-essential
cd ~
git clone https://github.com/EttusResearch/uhd.git
cd uhd/host
mkdir build
cd build
cmake -DENABLE_TESTS=OFF -DENABLE_C_API=OFF -DENABLE_MANUAL=OFF ..
make -j8
sudo make install
sudo ldconfig
conda activate <your-env-name>
3. Find your dist packages and add to `PYTHONPATH`. Example:
Step 2: Install UHD and Python Bindings.
.. code-block:: bash
export PYTHONPATH='/usr/local/lib/python3.10/site-packages/'
export PYTHONPATH='/usr/local/lib/python3.10/dist-packages/:$PYTHONPATH'
conda install conda-forge::uhd
Step 3: Download UHD images.
.. code-block:: bash
uhd_images_downloader
Step 4: Verify Installation.
To verify access to your device:
.. code-block:: bash
uhd_find_devices
For USB devices only (e.g. B series), install a udev rule by creating a link into your radioconda installation.
.. code-block:: bash
sudo ln -s $CONDA_PREFIX/lib/uhd/utils/uhd-usrp.rules /etc/udev/rules.d/radioconda-uhd-usrp.rules
sudo udevadm control --reload
sudo udevadm trigger
Step 5: (optional): Update Firmware/FPGA images
.. code-block:: bash
uhd_usrp_probe
This will ensure your device is running the latest firmware and FPGA versions.
Further information
-------------------
- `Official Website <https://www.ettus.com/>`_
- `USRP Documentation <https://kb.ettus.com/USRP_Hardware_Driver_and_Interfaces>`_
- `Radioconda Github Repository <https://github.com/radioconda/radioconda-installer?tab=readme-ov-file#uhd-ettus-usrp>`_

View File

@ -135,6 +135,8 @@ class HackRF(SDR):
samples = recording.data[0]
samples = samples.astype(np.complex64, copy=False)
if np.max(np.abs(samples)) >= 1:
samples = samples / (np.max(np.abs(samples)) + 1e-12)
print("HackRF Starting TX...")
self.radio.start_tx(samples=samples, repeat=True)

View File

@ -102,7 +102,7 @@ class Pluto(SDR):
if channel == 0:
print(f"Pluto gain = {self.radio.rx_hardwaregain_chan0}")
elif channel == 1:
self.set_tx_gain(gain=abs_gain, channel=0)
self.set_rx_gain(gain=abs_gain, channel=0)
print(f"Pluto gain = {self.radio.rx_hardwaregain_chan0}, {self.radio.rx_hardwaregain_chan1}")
self.radio.rx_buffer_size = 1024 # TODO deal with this for zmq
@ -223,7 +223,7 @@ class Pluto(SDR):
print("Pluto Starting RX...")
samples = self.radio.rx()
if self.radio.tx_enabled_channels == [0]:
if self.radio.rx_enabled_channels == [0]:
samples = self._convert_rx_samples(samples)
samples = [samples]
else:
@ -244,11 +244,11 @@ class Pluto(SDR):
def _format_tx_data(self, recording: Recording | np.ndarray | list):
if isinstance(recording, np.ndarray):
data = [self._convert_tx_samples(samples=recording)]
data = self._convert_tx_samples(samples=recording)
elif isinstance(recording, Recording):
if self.radio.tx_enabled_channels == [0]:
samples = recording.data[0]
data = [self._convert_tx_samples(samples=samples)]
data = self._convert_tx_samples(samples=samples)
if len(recording.data) > 1:
warnings.warn("Recording object is multichannel, only channel 0 data was used for transmission")