wiki:Tutorials/Wireless/mmwavePaamLinkRate

Version 19 (modified by zhenzhou77, 8 months ago) ( diff )

IBM 28GHz PAAM: Link Rate vs. SNR

Description

In this tutorial, we demonstrate the example use case of MAMBAS, a novel system that maneuvers analog MUBF using an ASA to support simultaneous communication with multiple users located in close proximity using the 28 GHz IBM PAAM board.

  • The instructions for the MAMBAS can be found here

The following papers describe the integration of the IBM 28 GHz PAAMs with MAMBAS in the COSMOS testbed. We would appreciate it if you cite this paper when publishing results obtained using the PAAMs deployed in COSMOS.

  • Z. Gao, Z. Qi, and T. Chen, "Mambas: Maneuvering Analog Multi-User Beamforming using an Array of Subarrays in mmWave Networks". in Proc. ACM Mobi Com'24, 2023
  • Z. Qi, Z. Gao, C. Tung, and T. Chen, "Programmable Millimeter-Wave MIMO Radios with Real-Time Baseband Processing". in Proc. ACM Mobi Com'23 Workshop on Wireless Network Testbeds, Experimental evaluation & Characterization (WiNTECH '23), 2023

Authors:
Zhihui Gao, Duke University <zhihui.gao[at]duke[dot]edu>
Zhenzhou (Tom) Qi, Duke University <zhenzhou.qi[at]duke[dot]edu>
Tingjun Chen, Duke University <tingjun.chen[at]duke[dot]edu>

Last updated: Mar. 21, 2024

Prerequisites

In order to access COSMOS-SB2, create a reservation in COSMOS testbed and have it approved by the reservation service. Access to the resources is granted after the reservation is confirmed. Please follow the process shown on the COSMOS getting started page to get started.

Resources Required

  • 2 USRP N310 SDRs (sdr1-s1-lg1 and sdr1-md1 in SB2)
  • 2 IBM 28GHz PAAMs (rfdev2-1 and rfdev2-2 in SB2 )
  • 1 Server (srv1-lg1)

The current hardware connection in SB2 as shown below

  • sdr1-s1-lg1 RF2 TX/RX — rfdev2-1 IC0/TX/H, sdr1-s1-lg1 RF2 RX2 — rfdev2-1 IC1/RX/H
  • sdr1-s1-lg1 RF3 TX/RX — rfdev2-1 IC0/TX/V, sdr1-s1-lg1 RF3 RX2 — rfdev2-1 IC1/RX/V
  • sdr1-md1 RF2 TX/RX — rfdev2-2 IC0/TX/H, sdr1-md1 RF2 RX2 — rfdev2-2 IC1/RX/H
  • sdr1-md1 RF3 TX/RX — rfdev2-2 IC0/TX/V, sdr1-md1 RF2 RX2 — rfdev2-2 IC1/RX/V

The required software components used in this demo are already loaded to the <To_be_updated>.ndz node image, the node image includes:

  • Ubuntu 20.04, UHD 4.1.0
  • PAAM Control to initialize the PAAM boards to integrate with USRPs.
  • PAAM CFO calibration.
  • MAMBAS:

Tutorial Setup

Follow the steps below to gain access to the sandbox console and set up nodes with appropriate images.

  1. If you don't have one already, sign up for a COSMOS account
  2. Create a resource reservation on COSMOS SB2
  3. Login into sandbox console console.sb2.cosmos-lab.org) with four SSH sessions.
  4. In terminal 1, make sure all the nodes and devices used in the experiment are turned off. Use the following command for SB2
    omf tell -a offh -t sdr1-s1-lg1,sdr1-md1,rfdev2-1,rfdev2-2,srv1-lg1
    
  5. Load <To_be_Updated>.ndz on the server.
    omf load -i <To_be_Updated>.ndz -t srv1-lg1 -r 0
    
  6. Turn all the required resources on and check the status of all the resources. Use the following commands for SB2.
    omf tell -a on -t sdr1-s1-lg1,sdr1-md1,rfdev2-1,rfdev2-2,srv1-lg1
    
    omf stat -t all
    
  7. ssh to the server with option -Y for using GUI for our live demo.
    ssh -Y root@srv1-lg1
    

Find and prepare USRPs

  • Upon logging into the server, set up the 10G data interfaces DATA1, DATA2 in terminal 1.
    ifconfig DATA1 10.117.1.1 netmask 255.255.0.0 mtu 9000 up
    ifconfig DATA2 10.118.1.1 netmask 255.255.0.0 mtu 9000 up
    
    sudo sysctl -w net.core.rmem_max=536870912
    sudo sysctl -w net.core.wmem_max=536870912
    

After running the above commands, you should see that the data interfaces have the appropriate IP addresses assigned.

root@srv1-lg1:~# ifconfig DATA1
DATA1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::1e34:daff:fe42:d4c  prefixlen 64  scopeid 0x20<link>
        ether 1c:34:da:42:0d:4c  txqueuelen 1000  (Ethernet)
        RX packets 21092  bytes 1881634 (1.8 MB)
        RX errors 0  dropped 19183  overruns 0  frame 0
        TX packets 686  bytes 204975 (204.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
root@srv1-lg1:~# ifconfig DATA2
DATA2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::1e34:daff:fe42:d4d  prefixlen 64  scopeid 0x20<link>
        ether 1c:34:da:42:0d:4d  txqueuelen 1000  (Ethernet)
        RX packets 21091  bytes 1881530 (1.8 MB)
        RX errors 0  dropped 19184  overruns 0  frame 0
        TX packets 690  bytes 226549 (226.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • Run uhd_find_devices to make sure that both USRP N310s can be reached:
    [INFO] [UHD] linux; GNU C++ version 9.4.0; Boost_107100; UHD_4.1.0.HEAD-0-g25d617ca
    --------------------------------------------------
    -- UHD Device 3
    --------------------------------------------------
    Device Address:
        serial: 315A35A
        addr: 10.117.2.1
        claimed: False
        fpga: XG
        mgmt_addr: 10.116.2.1
        mgmt_addr: 10.117.2.1
        product: n310
        type: n3xx
    
    
    --------------------------------------------------
    -- UHD Device 4
    --------------------------------------------------
    Device Address:
        serial: 3176DF7
        addr: 10.118.3.1
        claimed: False
        fpga: XG
        mgmt_addr: 10.116.3.1
        mgmt_addr: 10.118.3.1
        product: n310
        type: n3xx
    

Configure IBM 28GHz PAAM

COSMOS uses the IBM 28GHz PAAM API to configure and initialize the PAAM boards. Under PAAM_Control, use the following command to configure the PAAM boards in terminal 1:

root@srv1-lg1:~/PAAM_Control# python3 main.py

The following message will print out to indicate that the PAAM board is being successfully configured:

Opened port to FPGA
Logged in to Petalinux
Started command parser on Zynq
sdpar_prog.py /version: Version is PAWR_v1.2.0
Using baseline FPGA control IP
Reset the Phased Array
Initialization of IC 0 was successful
Initialization of IC 1 was successful
Initialization of IC 2 was successful
Initialization of IC 3 was successful
IC0 current: 2.2629521016617793 status: On
IC1 current: 1.3685239491691104 status: On
IC2 current: 0.19550342130987292 status: Off
IC3 current: 0.07820136852394917 status: Off
Closed port to Zynq
Opened port to FPGA
Logged in to Petalinux
Started command parser on Zynq
sdpar_prog.py /version: Version is PAWR_v1.2.0
Using baseline FPGA control IP
Reset the Phased Array
Initialization of IC 0 was successful
Initialization of IC 1 was successful
Initialization of IC 2 was successful
Initialization of IC 3 was successful
IC0 current: 2.29227761485826 status: On
IC1 current: 1.3587487781036167 status: On
IC2 current: 0.15640273704789834 status: Off
IC3 current: 0.16617790811339198 status: Off
Closed port to Zynq
Experiment Started!

Notice this program will hang there to indicate that the PAAM board is on, if you wish to turn off the ICs on the PAAM boards, please press CTRL+C once.

(Optional) CFO Calibration for PAAM boards

This section introduces how to calibrate the CFO between the PAAM boards. It is not a necessary step for users who wants to run this tutorial.

Since each 28 GHz PAAM board is driven by its own on-board phase lock loop (PLL), the CFO between two 28 GHz PAAM boards needs to be calibrated in order to establish a 28 GHz communication link.
The following shows a coarse CFO calibration scheme:

  • In terminal 1, change the cfoBS value to be 0 in line 15 as:
    vim PAAM_Control/main.py
    
  • Configure and bring up the PAAM board as described previously:
    root@srv1-lg1:~/PAAM_Control# python3 main.py
    
  • In terminal 2, fix MATLAB licensing issue:
    cd /usr/local/MATLAB/R2022b/bin
    root@srv1-lg1:/usr/local/MATLAB/R2022b/bin# ./deactivate_matlab.sh
    root@srv1-lg1:/usr/local/MATLAB/R2022b/bin# ./activate_matlab.sh
    
    At the last step, MATLAB will ask for a username for the computer. Enter root.
  • In terminal 2, direct to the CFO calibration folder and run the CFO estimation pipeline in MATLAB:
    cd 5G_Pipeline
    root@srv1-lg1:~/5G_Pipeline# matlab
    
    In the prompted MATLAB command line, type and run:
    >>main
    
  • An example output would appear as:
    CFO: 9.8310e+03
    SNR: 22.5722
    EVM: 12.7090
    BER: 0
    
  • Back to terminal 1, turn off PAAM board by pressing CTRL+C once
  • Applied the above estimated CFO value to cfoBS in 5G_Pipeline/main.py and restart the PAAM boards:
    root@srv1-lg1:~/PAAM_Control# python3 main.py
    

Based on the measurements we performed over 100+ times shown in the following probability density distributions of the estimated CFO values between the two PAAM boards, the CFO can be seen as a relatively constant value, hence, we pre-set the CFO to the PAAM board to be 97400

Experiment Execution

Download code from Git Hub

First, create a new folder workarea and enter this folder by

root@srv1-lg1:~# mkdir workarea
root@srv1-lg1:~# cd workarea/

Download codes from Git Hub repository and enter the repository folder by

root@srv1-lg1:~/workarea# git clone https://github.com/functions-lab/MAMBAS-MobiCom2024
root@srv1-lg1:~/workarea# cd MAMBAS-MobiCom2024/

Configure USRP parameters

In MATLAB, open GetParam.m, and configure the parameters below:

% USRP Setting
param.carrier = 3.0e9;

param.subdevTx = "B:1";
param.deviceTx = "10.117.2.1";
param.gainTx = 30;
    
param.deviceRx = "10.117.3.1";
param.subdevRx = "B:1";
param.gainRx = 40;

param.carrier: the carrier frequency of the TX and RX. Please set it as 3.0e9 for 3 GHz carrier frequency to the IBM 28 GHz PAAM.

param.deviceTx and param.deviceRx: the IP address of the TX/RX USRP, which is 10.117.2.1 and 10.117.3.1.

param.subdevTx and param.subdevRX: the subdevice settings of the TX/RX USRP. The connection on the sb2 requires to set both parameters as B:1 to use the port RF3.

param.gainTx and param.gainRx: the TX/RX gain of the USRPs, whose range varies over different USRP types, which can be found by running uhd_usrp_probe command in the terminal. In sb2, the recommended value for param.gainTx is 30, for param.gainRx is 40.

Conduct the transmission

In MATLAB, open main.m, and directly run this script.

The displayed information includes:

CFO: carrier frequency offset

SNR: signal-to-noise ratio

EVM: error vector magnitude

BLER: block error rate (only one block is transmitted and it can be either 0 for success and 1 for failure);

BER: bit error rate

Constel.png: the saved constellation plot.

Change the SNR/MCS

To change SNR, you may either

Change the amplitude (by default, 0.5) of the generated waveform in line 13 of main.m, or

Change the TX gain param.gainTx in GetParam.m.

To change MCS, open GetParam.m and customize param.modu for modulation and param.code for code rate.

For the 28 levels of MCSs in 5G, you may refer to the table Table 5.1.3.1-2: MCS index table 2 for PDSCH in the link below:

https://www.sharetechnote.com/html/5G/5G_MCS_TBS_CodeRate.html

Attachments (3)

Note: See TracWiki for help on using the wiki.