Version 33 (modified by 8 months ago) ( diff ) | ,
---|
Site Navigation
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
andsdr1-md1
in SB2) - 2 IBM 28GHz PAAMs (
rfdev2-1
andrfdev2-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/Hsdr1-s1-lg1
RF3 TX/RX —rfdev2-1
IC0/TX/V,sdr1-s1-lg1
RF3 RX2 —rfdev2-1
IC1/RX/Vsdr1-md1
RF2 TX/RX —rfdev2-2
IC0/TX/H,sdr1-md1
RF2 RX2 —rfdev2-2
IC1/RX/Hsdr1-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.
- MAMBAS.Please refer to
main
branch at here for more information.
Tutorial Setup
Follow the steps below to gain access to the sandbox console and set up nodes with appropriate images.
- If you don't have one already, sign up for a COSMOS account
- Create a resource reservation on COSMOS SB2
- Login into sandbox console
console.sb2.cosmos-lab.org
) with four SSH sessions. - 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
- Load
<To_be_Updated>.ndz
on the server.omf load -i <To_be_Updated>.ndz -t srv1-lg1 -r 0
- 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
ssh
to the server with option -Y for using GUI for our live demo.ssh -X 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 the console in terminal 2, please run the following 4 commands:
<user_name>@console:~$ curl "http://am1.orbit-lab.org:5054/array_mgmt/configure?dev_name=rfdev2-1.sb2.cosmos-lab.org&ics=0&num_elements=16&txrx=tx&pol=h&theta=0&phi=0" <user_name>@console:~$ curl "http://am1.orbit-lab.org:5054/array_mgmt/configure?dev_name=rfdev2-1.sb2.cosmos-lab.org&ics=0&num_elements=16&txrx=tx&pol=v&theta=0&phi=0" <user_name>@console:~$ curl "http://am1.orbit-lab.org:5054/array_mgmt/configure?dev_name=rfdev2-2.sb2.cosmos-lab.org&ics=1&num_elements=16&txrx=rx&pol=h&theta=0&phi=0" <user_name>@console:~$ curl "http://am1.orbit-lab.org:5054/array_mgmt/configure?dev_name=rfdev2-2.sb2.cosmos-lab.org&ics=1&num_elements=16&txrx=rx&pol=v&theta=0&phi=0"
An example message will print out to after each command to indicate that the PAAM board is being successfully configured:
<?xml version="1.0" encoding="UTF-8"?> <response status="OK"> <action service="array_mgmt" name="configure" ipaddr="10.116.5.2"> <step name="open" duration="3.780022"/> <step name="initializaition" duration="0.125465"/> <step name="enabling" duration="0.022732"/> <step name="steering" duration="0.006349" theta="0" phi = "0" ipaddr = "10.116.5.2" /> <state PAAM_ID="0x23" LO_switch="PLL" if_sw1="0xF" if_sw2="0xF" if_sw3="0xF" if_sw4="0xF" txrx="rx" polarization="v" /> <adc> <conv index="0" name="1v2" tADC="114" tVolt="0.279" tCurr="0.139"/> <conv index="1" name="1v5" tADC="214" tVolt="0.523" tCurr="1.046"/> <conv index="2" name="1v8" tADC="4" tVolt="0.010" tCurr="0.005"/> <conv index="3" name="2v7_0" tADC="13" tVolt="0.032" tCurr="0.064"/> <conv index="4" name="2v7_1" tADC="183" tVolt="0.447" tCurr="0.894"/> <conv index="5" name="2v7_2" tADC="18" tVolt="0.044" tCurr="0.088"/> <conv index="6" name="2v7_3" tADC="40" tVolt="0.098" tCurr="0.196"/> <conv index="7" name="3v3_pll" tADC="303" tVolt="0.740" tCurr="0.370"/> <conv index="8" name="5v_uzed" tADC="276" tVolt="0.674" tCurr="0.674"/> <conv index="9" name="12v" tADC="140" tVolt="0.342" tCurr="1.140"/> <conv index="10" name="0V" tADC="0" tVolt="0.000"/> <conv index="11" name="1V8" tADC="735" tVolt="1.796"/> </adc> <step name="status" duration="0.069065"/> <step name="close" duration="0.100179"/> </action> </response>
Experiment Execution
Activate MATLAB
MATLAB are preinstalled to the image, users are expected to activate MATLAB with their own MATLAB license as the following in terminal 1:
root@srv1-lg1:# 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
The codebase is preloaded to the image, in terminal 1, please direct to the ~/MAMBAS_new/MAMBAS-MobiCom2024
folder
Open MATLAB interface as background as
root@srv1-lg1:# cd ~/MAMBAS_new/MAMBAS-MobiCom2024 root@srv1-lg1:~/MAMBAS_new/MAMBAS-MobiCom2024# matlab &
Configure USRP parameters
In MATLAB, open ~/MAMBAS_new/MAMBAS-MobiCom2024/5g-phy-implementation/GetParam.m
, and make sure the parameters are configured as 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
Finish the experiments
When the experiments are completed, make sure to clean up and turn off the PAAMs as the following in terminal 2
<user_name>@console:~$ curl "http://am1.orbit-lab.org:5054/array_mgmt/cleanup?dev_name=rfdev2-1.sb2.cosmos-lab.org" <user_name>@console:~$ omf tell -a offh -t rfdev2-1.sb2.cosmos-lab.org <user_name>@console:~$ curl "http://am1.orbit-lab.org:5054/array_mgmt/cleanup?dev_name=rfdev2-2.sb2.cosmos-lab.org" <user_name>@console:~$ omf tell -a offh -t rfdev2-2.sb2.cosmos-lab.org
Attachments (3)
- PAAM-2_2 .png (2.6 MB ) - added by 9 months ago.
- CFO_DL.png (49.6 KB ) - added by 9 months ago.
- CFO_UL.png (47.7 KB ) - added by 9 months ago.