This tutorial demonstrates how to use RFNoC 802.11ad preamble processing blocks with Sivers 60 GHz mmWave front-ends on COSMOS SB1, transmitting 802.11ad single-carrier frames at reduced bandwidth and computing the channel impulse response on the receive side.
This tutorial is based on work from the EU ORCA project's MISO (Millimeter wave SDR based Open experimentation platform) extension, developed by researchers at IMDEA Networks Institute, Spain. MISO provides FPGA modules for processing 802.11ad single-carrier (SC) preambles at scaled-down bandwidth, integrated with RFNoC and GNU Radio, running on USRP X310s.
In the benchtop 60 GHz setup of COSMOS SB1, either USRP X310 or RFSoC ZCU111 can be used for baseband processing. RF switch boxes select between X310 and RFSoC. This tutorial uses USRP X310s for baseband processing. Sivers control software on host servers (srv1-in1, srv1-in2) communicates with the mmWave front-ends over USB links. Host GNU Radio applications send and receive data samples to and from the X310s over 10 G Ethernet links. 802.11ad single-carrier frames at 200 MHz bandwidth are transmitted over the 60 GHz mmWave link, and the channel impulse response (CIR) is computed on the receive end.
More information about the project:
After completing this tutorial you will be able to:
uhd_image_loader.ederenv GUI.| Difficulty | Advanced |
| Estimated time | TODO: verify |
| Domain / sandbox | sb1.cosmos-lab.org |
| Topic group | mmWave & PAAM |
| Last verified | Not re-tested (migrated 2026-06-20) |
Background knowledge
omf commands.Account & access
Devices / nodes
| Resource | Role | Qty | Notes |
|---|---|---|---|
| srv1-in1 | Transmit host server | 1 | Sivers control over USB; GNU Radio TX app; 10 G link to sdr4-in1 |
| srv1-in2 | Receive host server | 1 | Sivers control over USB; GNU Radio RX app; 10 G link to sdr4-in2 |
| sdr4-in1 | Transmit USRP X310 | 1 | 10 G Ethernet port (XG FPGA image); IP 10.38.14.1 |
| sdr4-in2 | Receive USRP X310 | 1 | 10 G Ethernet port (XG FPGA image); IP 10.38.14.2 |
| rfdev3-in1 | Sivers mmWave TX front-end | 1 | Connected to srv1-in1 via USB and to sdr4-in1 via RF |
| rfdev3-in2 | Sivers mmWave RX front-end | 1 | Connected to srv1-in2 via USB and to sdr4-in2 via RF |
| rfsw1.sb1.cosmos-lab.org | RF switch box 1 | 1 | Selects X310 or RFSoC; set all switches to port 1 for X310 |
| rfsw2.sb1.cosmos-lab.org | RF switch box 2 | 1 | Selects X310 or RFSoC; set all switches to port 1 for X310 |
Note: The source also references
srv3-lg1,srv4-lg1,rfdev3-1,rfdev3-2,rfdev3-5,rfdev3-6as an alternative node set on COSMOS SB1 at addresses10.39.6.1/10.39.6.2. Some commands in the Instructions section use these alternative names.
Disk images
| Image | Load onto | Provides |
|---|---|---|
| rfnoc_wigig.ndz | srv1-in1, srv1-in2 | RFNoC 802.11ad preamble processing blocks + Sivers control software (ederenv) + GNU Radio + UHD |
Software components
| Component | Version | Source |
|---|---|---|
| UHD (USRP Hardware Driver) | 3.14.1.1 (as shown in example output) | preinstalled in rfnoc_wigig.ndz |
| GNU Radio + GNU Radio Companion | TODO: verify | preinstalled in rfnoc_wigig.ndz |
Sivers ederenv control software |
TODO: verify | preinstalled in rfnoc_wigig.ndz |
ORCA MISO FPGA bitfile (MISO_IMAGE_x300.bit) |
TODO: verify | ORCA_MISO_PROJECT/FPGA_IMAGES/ directory on server nodes |
TX GRC flowgraph (TX_TEST.grc) |
TODO: verify | ORCA_MISO_PROJECT/examples/ |
RX GRC flowgraph (RADIORX_CIR.grc) |
TODO: verify | ORCA_MISO_PROJECT/examples/ |
CIR Octave script (CIR_read_out_file.m) |
TODO: verify | ORCA_MISO_PROJECT/examples/ |
Spectrum / RF / special


The benchtop 60 GHz setup in COSMOS SB1 consists of two host servers (srv1-in1 and srv1-in2), each connected to a USRP X310 SDR (sdr4-in1, sdr4-in2) via 10 G Ethernet and to a Sivers 60 GHz mmWave front-end (rfdev3-in1, rfdev3-in2) via USB. RF switch boxes sit between the X310s and the Sivers front-ends to allow switching between X310 and RFSoC backends. The 60 GHz mmWave link carries the 802.11ad frames between the two Sivers units. GNU Radio applications on the servers pass baseband samples to and from the X310s over the 10 G links.
Reserve SB1 resources (see Prerequisites) and log into the console:
ssh <username>@console.sb1.cosmos-lab.org
Make sure all resources in the domain are turned off:
omf tell -a offh -t system:topo:allres
Load the rfnoc_wigig.ndz image on the host servers:
omf load -i rfnoc_wigig.ndz -t srv1-in1,srv1-in2
Turn on all required resources and check status:
omf tell -a on -t srv1-in1,srv1-in2,sdr4-in1,sdr4-in2,rfdev3-in1,rfdev3-in2
omf stat -t system:topo:allres
Verify that the RF switch boxes are configured to use X310s (all switches set to port 1):
curl am1.cosmos-lab.org:5054/rf_switch/status?name=rfsw1.sb1.cosmos-lab.org,rfsw2.sb1.cosmos-lab.org
Expected response:
<response status="OK">
<rf_switch name="rfsw1.sb1.cosmos-lab.org" num_of_switches="4">
<switch number="1" port="1"/>
<switch number="2" port="1"/>
<switch number="3" port="1"/>
<switch number="4" port="1"/>
</rf_switch>
<rf_switch name="rfsw2.sb1.cosmos-lab.org" num_of_switches="4">
<switch number="1" port="1"/>
<switch number="2" port="1"/>
<switch number="3" port="1"/>
<switch number="4" port="1"/>
</rf_switch>
</response>
If some or all ports are set to 2, set them to port 1:
curl "am1.cosmos-lab.org:5054/rf_switch/set?name=rfsw1.sb1.cosmos-lab.org,rfsw2.sb1.cosmos-lab.org&switch=1,2,3,4&port=1"
SSH to the nodes. Use the -Y option to enable GUI forwarding for the Sivers control software:
ssh -Y root@srv1-in1
ssh -Y root@srv1-in2
The IP addresses for the 10 G Ethernet ports (Port 0, XG image) on X310s sdr4-in1 and sdr4-in2 are hard-coded to 10.38.14.1 and 10.38.14.2 respectively. Configure the data1 network interfaces on srv1-in1 and srv1-in2 to reach them:
On srv1-in1:
root@srv1-in1:~# ifconfig data1 10.38.1.3 netmask 255.255.0.0 mtu 9000 up
On srv1-in2:
root@srv1-in2:~# ifconfig data1 10.38.1.4 netmask 255.255.0.0 mtu 9000 up
Run uhd_find_devices to check if the X310s are reachable. The following example uses 10.39.6.1 (the alternative rfdev3-1/rfdev3-2 node set ):
root@srv3-lg1:~# uhd_find_devices --args="addr=10.39.6.1"
[INFO] [UHD] linux; GNU C++ version 7.4.0; Boost_106501; UHD_3.14.1.1-release
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
serial: 31B6FFA
addr: 10.39.6.1
fpga: XG
name: rfdev3-1
product: X310
type: x300
Check which RFNoC blocks are loaded on the X310 using uhd_usrp_probe:
root@srv3-lg1:~# uhd_usrp_probe --args="addr=10.39.6.1"
The following RFNoC blocks are required for the experiment:
| | | RFNoC blocks on this device:
| | |
| | | * DmaFIFO_0
| | | * Radio_0
| | | * Radio_1
| | | * PacketDetector_0
| | | * CFOC_0
| | | * DDC_0
| | | * DUC_0
| | | * FIR_0
| | | * SymbolTiming_0
| | | * BoundaryDetector_0
| | | * CIR_0
| | | * FIFO_0
| | | * FIFO_1
If the required RFNoC blocks are not found, flash the X310 with the MISO FPGA image:
root@srv3-lg1:~# uhd_image_loader --args="addr=10.39.6.1,type=x300" --fpga-path="ORCA_MISO_PROJECT/FPGA_IMAGES/MISO_IMAGE_x300.bit"
Power-cycle the X310 after flashing to activate the new image:
root@console:~# omf tell -a offh -t rfdev3-1
root@console:~# omf tell -a on -t rfdev3-1
Then re-run uhd_usrp_probe to confirm the RFNoC blocks are now present.
Start the Sivers control GUI on both servers. This tutorial uses SN0240 as the transmitter and SN0243 as the receiver.
On the transmit server (srv4-lg1):
root@srv4-lg1:~/ederenv# ./start_mb1.sh --gui SN0240
In the GUI: click TX enable and then LO leakage Cal.


On the receive server (srv3-lg1):
root@srv3-lg1:~/ederenv# ./start_mb1.sh --gui SN0243
In the GUI: click RX enable.


Open the transmit application on the transmit node. TX_TEST.grc transmits 802.11ad frames over rfdev3-2 (10.39.6.2) at 200 Msps, reading samples from a pre-generated file:
root@srv4-lg1:~# gnuradio-companion ORCA_MISO_PROJECT/examples/TX_TEST.grc


Open the receive application on the receive node. RADIORX_CIR.grc receives and processes samples over rfdev3-1 (10.39.6.1) and writes the computed channel impulse response for every frame to a file on the host node:
root@srv3-lg1:~# gnuradio-companion ORCA_MISO_PROJECT/examples/RADIORX_CIR.grc


Run the TX application first, then the RX application.
Launch Octave and plot the CIR using the provided script:
root@srv3-lg1:~# octave
>> run('ORCA_MISO_PROJECT/examples/CIR_read_out_file.m')
The plots below show example CIR results for TX beam angles set to 0° and −5°:
TX beam angle 0°:


TX beam angle −5°:


uhd_find_devices --args="addr=<X310-IP>" returns the expected X310 device entry with fpga: XG.uhd_usrp_probe lists all required RFNoC blocks, including PacketDetector_0, SymbolTiming_0, BoundaryDetector_0, and CIR_0.RADIORX_CIR.grc) produces a CIR output file on the host node.omf tell -a offh -t system:topo:allres
No omf save is needed unless you modified the image.
| Symptom | Likely cause | Fix |
|---|---|---|
uhd_find_devices returns no devices |
data1 interface not configured or wrong subnet |
Confirm ifconfig data1 shows the correct IP (e.g. 10.38.1.3); ping the X310 IP (10.38.14.1) to verify reachability |
Required RFNoC blocks missing from uhd_usrp_probe |
X310 loaded with default XG image, not MISO FPGA image | Flash MISO_IMAGE_x300.bit with uhd_image_loader, then power-cycle the X310 |
| RF switches not at port 1 | Default state or previous experiment left them at port 2 | Run the curl set command to force all switches to port 1 (see Setup step 6) |
| Sivers GUI fails to start | ederenv not found or USB connection issue |
Confirm rfnoc_wigig.ndz image was loaded; check USB connections between servers and Sivers front-ends |
| GNU Radio application errors | GRC file path incorrect or UHD connection failure | Confirm ORCA_MISO_PROJECT/examples/ directory exists; re-run uhd_find_devices to confirm X310 is reachable |
| No CIR output file produced | RX application did not receive any frames | Confirm TX application is running first; check that RF switch boxes are correctly set to port 1 |
Author(s): COSMOS team · Last verified: Not re-tested (migrated 2026-06-20) · Tested image/release: rfnoc_wigig.ndz · Tags: mmwave, 60ghz, 802.11ad, rfnoc, usrp-x310, sivers, gnu-radio, paam, orca, miso