Advanced Iris Testbed SDR Experiment Tutorial

In this section, we provide a tutorial on how run an advanced Software Defined Radio (SDR) experiment on the IRIS testbed using GNU Radio. Additionally, we will also provide details how to run GNU Radio Experiments with the WiSHFUL framework. To run this tutorial you will need jFed installed, of at least version 5.8. To install jFed, proceed to http://jfed.iminds.be/

OFDM Transmission with GNU Radio, and visualization with fosphor-gr

In this section you will use different image types by changing the ‘img_type’ field in the RSPec. You will use GNURadio images to transmit and receive an OFDM waveform supported by the gnuradio-companion tool. You will use the default GNURadio example OFDM Tx and Rx flow graphs. To accommodate this experiment, we have slightly modified the OFDM flow graphs to support USRPs. You will download, open and edit the modified versions using wget.

Furthermore, you will use the fosphor image for spectrum visualization. The FOSPHOR image will only work with Ubuntu installed on the client machine. If you do not have Ubuntu available, you can visualise the spectrum with UHD ASCII DFT.

The following fields for the ‘img_type’ will be utilised in this experiment:

  • gnuradio: This image will come with Ubuntu 16.04 and the GNURadio SDR Framework installed.
  • gnuradio: This image will come with Ubuntu 16.04 and the GNURadio SDR Framework installed.
  • fosphor: This image will come with Ubuntu 14.04, the GNURadio SDR Framework installed, and the gr-fosphor GNU Radio block for RTSA-like spectrum visualization using OpenCL and OpenGL acceleration.

Include the following RSpec in the RSpec editor and press run:

<?xml version='1.0'?>
<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request" generated_by="jFed RSpec Editor" generated="2016-11-12T13:31:18.181Z" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1" xmlns:jfedBonfire="http://jfed.iminds.be/rspec/ext/jfed-bonfire/1" xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1" xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1" xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1" xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:jfed="http://jfed.iminds.be/rspec/ext/jfed/1" xmlns:sharedvlan="http://www.protogeni.net/resources/rspec/ext/shared-vlan/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd ">
    <node client_id="tx_node" exclusive="true" component_manager_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+authority+am">
        <sliver_type name="usrp-vm">
            <disc_image name="urn:publicid:IDN+iris-testbed.connectcentre.ie+image+gnuradio"/>
        </sliver_type>
        <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="310.0" y="105.0"/>
    </node>
    <node client_id="rx_node" exclusive="true" component_manager_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+authority+am">
        <sliver_type name="usrp-vm">
            <disc_image name="urn:publicid:IDN+iris-testbed.connectcentre.ie+image+gnuradio"/>
        </sliver_type>
        <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="310.0" y="205.00000000000003"/>
   </node>
  <node client_id="fosphor" exclusive="true" component_manager_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+authority+am">
    <sliver_type name="usrp-vm">
      <disk_image name="urn:publicid:IDN+iris-testbed.connectcentre.ie+image+fosphor"/>
    </sliver_type>
    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="310.0" y="305"/>
  </node>
   <jfed-command:experimentBarrierSegment orderNumber="0" tag="Barrier segment 0"/>
</rspec>

Again, insert your project, slice name and reservation time. Wait for the machines turn green and ssh into them. This RSpec will request 3 nodes: an tx_node, an rx_node and an fosphor node.

Start the GNU Radio receiver with gnuradio-companion in the rx_node by typing the following at the command prompt:

wget https://iris-testbed.connectcentre.ie/connect-site/examples/rx_ofdm.grc
gnuradio-companion rx_ofdm.grc

The GNU Radio companion tool will pop up with the OFDM Rx flowgraph. Start the example by pressing the play button. The GNU Radio QT receiver GUI should appear.

On the ‘tx_node’ run the following code to start the transmitter using the gnuradio-companion tool:

wget https://iris-testbed.connectcentre.ie/connect-site/examples/tx_ofdm.grc
gnuradio-companion tx_ofdm.grc

Again, the GNU Radio companion tool will pop up. Start the example by pressing the play button.

Finally, if you have a Ubuntu client, start fosphor to see the spectrum of the transmitted signal:

python fosphor_qt.py

Possible Problems:If problems are encountered running fosphor_qt.py, try reduce the samp_rate value from 7.5e6 to 2.5e6 in the fosphor_qt.py file

You should see something like the spectrum below with fosphor.

If you do not have a Ubuntu client, use the UHD ASCII DFT to visualise the spectrum:

cd /usr/lib/uhd/examples
./rx_ascii_art_dft --freq 2550000000 --rate 4000000 --ref-lvl -45 --gain 20

Exercise: The gnuradio-companion generates a python file which is executed. Change the frequency value in the Tx and Rx GNU Radio python files to a frequency in the Wi-Fi band 2.4 – 2.5 GHz. Now run the python file from the command line.

python rx_ofdm.py
python tx_ofdm.py

WiSHFUL GNURadio Example Tutorial

The goal of this experiment is to create an example tutorial for the WiSHFUL framework and the UPI functions usage that run on GNURadio platform. Specifically, this experiment uses the WiSHFUL framework and the UPI functions to set-up a GNURadio TX/RX pair and change parameters. All the UPI functions used in this example are fully documented in WiSHFUL UPIs

In the following RSpec file, two USRP nodes, and one virtual machine node are requested with the WiSHFUL image:

<?xml version='1.0'?>
<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request" generated_by="jFed RSpec Editor" generated="2017-10-03T14:12:55.931+01:00" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1" xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1" xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1" xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1" xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:jfed="http://jfed.iminds.be/rspec/ext/jfed/1" xmlns:sharedvlan="http://www.protogeni.net/resources/rspec/ext/shared-vlan/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd ">
  <node client_id="wishfulTx" exclusive="true" component_manager_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+authority+am">
    <sliver_type name="usrp-vm">
      <disk_image name="urn:publicid:IDN+iris-testbed.connectcentre.ie+image+wishful"/>
    </sliver_type>
    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="227.0" y="165.0"/>
  </node>
  <node client_id="wishfulRx" exclusive="true" component_manager_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+authority+am">
    <sliver_type name="usrp-vm">
      <disk_image name="urn:publicid:IDN+iris-testbed.connectcentre.ie+image+wishful"/>
    </sliver_type>
    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="227.0" y="264.5"/>
  </node>
  <node client_id="controller" exclusive="false" component_manager_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+authority+am">
    <sliver_type name="vm-2cpu-m4g">
      <disk_image name="urn:publicid:IDN+iris-testbed.connectcentre.ie+image+wishful"/>
    </sliver_type>
    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="544.0" y="226.0"/>
  </node>
</rspec>

Again, insert your project, slice name and reservation time. Wait for the machines turn green and ssh into them. This RSpec will request 3 nodes: an wishfulTx node, an wishfulRx node and an wishfulController virtual machine node.

WiSHFUL CONTROLLER

Move to the experiment directory

cd /opt/wishful/examples/Get_Started_Examples/Simple_GNURadio_Example

Open wishful_simple_controller and change "controller-vm-ip" and "ethinterface" by the IP address and the Ethernet interface of the Iris testbed network (NOTE: much likely the IP starts with **192.168.. ** and the interface is ens3):

controller_PC_IP_address = "controller-vm-ip" 
controller_PC_interface = "ethinterface"

Start controller

chmod +x wishful_simple_controller
./wishful_simple_controller (#run with -v for debugging)

Rx agent

Move to the experiment directory:

cd /opt/wishful/examples/Get_Started_Examples/Simple_GNURadio_Example

Open agent_rx.py and change the "ethernet_interface" by the Ethernet inferface connected in the Iris testbed internal network (NOTE: much likely the interface is ens3):

agent_PC_interface = "ethernet_interface"

Start the RX agent:

chmod +x agent_rx.py
./agent_rx.py (#run with -v for debugging)

Tx agent

Move to the experiment directory:

cd /opt/wishful/examples/Get_Started_Examples/Simple_GNURadio_Example

Open agent_tx.py and change the "ethernet_interface" by the Ethernet inferface connected in the Iris testbed internal network (NOTE: much likely the interface is ens3):

agent_PC_interface = "ethernet_interface"

Start the Tx agent

chmod +x agent_tx.py
./agent_tx.py (#run with -v for debugging)

Now, follow the most up-to-date WiSHFUL tutorial instructions on the following URL: Simple GNU Radio WiSHFUL Example (from Step 5. Check the output at the Controller terminal:)

Bounded Rspec

The previous RSpecs were unbounded, meaning the experimenter will get whichever USRP as free at the moment. Sometimes, a experimenter might require a bounded RSpec, where the desired USRP is explicitly mentioned. To do this it is necessary to add the ‘component_id’ field to the RSpec.

The 'component_id' field will specify which USRP is requested by specefieng which is the row and collumn of the USRP in the grid. These row and collum values can take values between 1 and 4.

This is illustrated in the RSpec example below, where two nodes are requested, node 21 and 22:

<?xml version='1.0'?>
<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request" generated_by="jFed RSpec Editor" generated="2016-11-12T13:31:18.181Z" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1" xmlns:jfedBonfire="http://jfed.iminds.be/rspec/ext/jfed-bonfire/1" xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1" xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1" xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1" xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:jfed="http://jfed.iminds.be/rspec/ext/jfed/1" xmlns:sharedvlan="http://www.protogeni.net/resources/rspec/ext/shared-vlan/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd ">
    <node client_id="tx_node" exclusive="true" component_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+node+21" component_manager_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+authority+am">
        <sliver_type name="usrp-vm"/>
        <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="410.0" y="185.0"/>
    </node>
    <node client_id="rx_node" exclusive="true" component_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+node+22" component_manager_id="urn:publicid:IDN+iris-testbed.connectcentre.ie+authority+am">
        <sliver_type name="usrp-vm"/>
        <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="110.0" y="185.0"/>
    </node>
    <jfed-command:experimentBarrierSegment orderNumber="0" tag="Barrier segment 0"/>
</rspec>