Classroom Glossary Public page

RF-301 Setup Guide

276 words

Assumes: RF-201 toolchain fully functional (GNU Radio, RTL-SDR, HackRF, URH, gr-iio for ANT-SDR E200, Python 3.10+, Conda environment).

Run gnuradio-companion --version and python3 -c "import numpy, scipy, matplotlib" before starting. If any of these fail, return to the RF-201 SETUP.md.


New Tools for RF-301

1. OpenAirInterface (LTE + 5G NR)

OAI requires Ubuntu 22.04 LTS (recommended) or Debian 12. Docker deployment is the safest option for initial lab work.

# Docker image (pre-built; ~3 GB)
docker pull oaisoftwarealliance/oai-gnb:develop
docker pull oaisoftwarealliance/oai-nr-ue:develop

# Verify images
docker images | grep oaisoftwarealliance

# Clone OAI source (for configuration files + scripts)
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
cd openairinterface5g
git checkout develop

For LTE lab (Lab 5 Part A), also pull:

docker pull oaisoftwarealliance/oai-enb:develop
docker pull oaisoftwarealliance/oai-mme:develop
docker pull oaisoftwarealliance/oai-spgwu-tiny:develop

2. srsRAN (alternative cellular stack)

# srsRAN 4G (LTE) from apt on Ubuntu 22.04
sudo add-apt-repository ppa:softwareradiosystems/srsran
sudo apt-get update
sudo apt-get install srsran srsran-4g

# srsRAN Project (5G NR; requires UHD/USRP or ZeroMQ for simulation)
git clone https://github.com/srsran/srsRAN_Project.git
cd srsRAN_Project
mkdir build && cd build
cmake -DENABLE_ZEROMQ=ON ..
make -j$(nproc)

3. gr-satellites (SATCOM decoder framework)

# From PyPI inside the GNU Radio conda environment
conda activate gnuradio  # or your GNU Radio virtualenv
pip install gr-satellites

# Verify
python3 -c "import satellites; print(satellites.__version__)"

# Also install dependencies
pip install construct requests pyzmq

4. gr-leo (LEO orbital mechanics)

# From source (gr-leo requires GNU Radio 3.10+)
git clone https://github.com/aerospaceresearch/gr-leo.git
cd gr-leo
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
sudo ldconfig

5. GNSS-SDR

# Binary install on Ubuntu 22.04
sudo apt-add-repository ppa:gnss-sdr/gnss-sdr-stable
sudo apt-get update
sudo apt-get install gnss-sdr

# Verify
gnss-sdr --version

6. gr-fosphor (GPU-accelerated waterfall)

# From source (requires OpenCL)
sudo apt-get install opencl-headers ocl-icd-opencl-dev

git clone https://git.osmocom.org/gr-fosphor
cd gr-fosphor
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
sudo ldconfig

7. USRP / Ettus UHD drivers

The USRP hardware is program-supplied for Labs 5 and 6. When available:

sudo apt-get install libuhd-dev uhd-host python3-uhd
sudo uhd_images_downloader

# Verify device
uhd_find_devices
uhd_usrp_probe

8. gr-iio advanced (ANT-SDR E200)

Carried forward from RF-201. Confirm libIIO version 0.26+:

python3 -c "import iio; print(iio.version)"
# Should report (0, 26, 0) or higher

9. Parks-McClellan FIR design (SciPy)

conda activate gnuradio
pip install scipy numpy matplotlib jupyter

# Test Parks-McClellan available
python3 -c "from scipy.signal import remez, freqz; print('remez OK')"

10. Academy Flowgraph (browser DSP tool)

The Academy Flowgraph DSP tool ships at https://portal.virtuscyberacademy.org/workbench/static/academy-flowgraph.html. No install required. Open in any modern browser. Use it for block-graph sketching and filter-chain visualisation in Labs 1-3 before committing to GNU Radio flowgraph implementations.


Hardware required

Hardware Required for Status
ANT-SDR E200 (or equivalent AD9361-based) Labs 3, 4 Student-provided or program bench
HackRF One Labs 2, 9 Student-provided (from RF-201 kit)
RTL-SDR Lab 6 (NOAA APT) Student-provided (from RF-201 kit)
V-dipole antenna (137 MHz) Lab 6 Build or source ($5-10 in parts)
USRP B200 / B210 or N310 Labs 5, 10 Program-supplied for cellular labs
RF-shielded enclosure Labs with transmit Required for Labs 4, 9; program bench
ARRL Extra license (or controlled test environment) All transmit labs Confirm before transmit operations

Verification script

#!/bin/bash
echo "=== RF-301 Toolchain Verification ==="

# GNU Radio
python3 -c "import gnuradio; print('GNU Radio', gnuradio.__version__)" 2>/dev/null || echo "FAIL: gnuradio"

# gr-satellites
python3 -c "import satellites; print('gr-satellites', satellites.__version__)" 2>/dev/null || echo "FAIL: gr-satellites"

# GNSS-SDR
gnss-sdr --version 2>/dev/null | head -1 || echo "FAIL: gnss-sdr"

# scipy / remez
python3 -c "from scipy.signal import remez; print('scipy.signal.remez OK')" 2>/dev/null || echo "FAIL: scipy remez"

# OAI Docker image
docker images oaisoftwarealliance/oai-gnb:develop --format "{{.Repository}}:{{.Tag}}" 2>/dev/null || echo "WARN: OAI Docker image not pulled"

# UHD
uhd_find_devices 2>/dev/null | head -1 || echo "WARN: UHD USRP not detected (program-supplied hardware)"

echo "=== Verification complete ==="

Tool Journal initial entries (RF-301)

Run this before Week 1 to initialize the RF-301 Toolchain Diary extension:

## RF-301 Tool Journal

| # | Tool | Introduced | First use | Notes |
|---|---|---|---|---|
| 1 | OpenAirInterface | Week 6 | Lab 5 | LTE eNB / 5G gNB via Docker |
| 2 | srsRAN | Week 6 | Lab 5 | Alternative cellular stack |
| 3 | gr-satellites | Week 8 | Lab 6 | SATCOM decoder framework |
| 4 | gr-leo | Week 8 | Lab 6 | LEO orbital mechanics GR integration |
| 5 | GNSS-SDR | Week 8 | Lab 6 | GPS/Galileo/GLONASS SDR receiver |
| 6 | gr-fosphor | Week 9 | Lab 7 | GPU waterfall visualisation |
| 7 | gr-paint | Week 9 | Lab 7 | Spectrogram SIGINT visualisation |
| 8 | USRP/UHD | Week 6 | Lab 5 | Research-grade SDR |
| 9 | gr-iio advanced | Week 4 | Lab 3 | ANT-SDR E200 advanced workflow |
| 10 | LPDA/discone/yagi | Week 8 | Lab 6 | Advanced antenna selection |
| 11 | Academy Flowgraph | Week 1 | Lab 1 | Browser DSP block-graph tool |