== OFDM radio example with GNURADIO benchmark scripts == [[TOC(Tutorials/k0SDR*)]] === Description === This example is similar to the simple radio example using GNU Radio; however, this utilizes an OFDM transmitter and receiver. In this tutorial we'll also use another node as a spectrum analyzer to verify OFDM transmission. FIXME: As of March 2018, this ''baseline-sdr'' image does not have usrp drivers properly configured in sb3. --bq27 === Hardware / Software Resources utilized === 1. Grid nodes with a USRP connect via Ethernet. 2. ''baseline-sdr.ndz'': disk image loaded onto nodes. This image has all the precompiled - software required to configure the USRP N210s and all the required GNU Radio software libraries. The USRP N210's interface with the node is already configured. 3. GNU Radio - software library to create SDR. Click here for [http://gnuradio.org/redmine/projects/gnuradio/wiki/WhatIsGR additional info]. 4. USRP N210 - hardware platform for SDR. Click here for [http://gnuradio.org/redmine/projects/gnuradio/wiki/Hardware#Ettus-Research-USRP-Devices more info]. === Set up === * To get started first make a reservation on the [https://www.orbit-lab.org/schedule/ Orbit Scheduler] for using the Grid. * After logging into grid console, make sure all nodes are turned off {{{ nilanjan@console.grid:~$ omf tell -a offh -t system:topo:all }}} * Verify state of node before continuing. Make sure all nodes are in the POWEROFF state. {{{ nilanjan@console.grid:~$ omf stat }}} * Image the node to use as a spectrum analyzer - check [https://www.orbit-lab.org/status/orbit/ inventory status] to find a node with a USRP N210. In this example we'll use the node 19-19. Load the image ''baseline-sdr.ndz'' and then turn the node on. {{{ nilanjan@console.grid:~$ omf load -i baseline-sdr.ndz -t node19-19 : : : nilanjan@console.grid:~$ omf tell -a on -t node19-19 }}} * Once this node is on, ssh into the node, run the ''ascii-art'' spectrum analyzer and leave this running. {{{ nilanjan@console.grid:~$ ssh root@node19-19 root@node19-19:~# cd uhd/host/build/examples/ root@node19-19:~/uhd/host/build/examples# ./rx_ascii_art_dft --freq 2400e6 --rate 8e6 --gain 15 --ref-lvl -40 --dyn-rng 70 }}} * Find 2 other nodes with N210s for the OFDM radio and image with ''ubuntu-14-04-64bit-sdr.ndz''. In this example we'll use node19-20 and node20-19. {{{ nilanjan@console.grid:~$ omf load -i ubuntu-14-04-64bit-sdr.ndz -t node19-20,node20-19 : : : nilanjan@console.grid:~$ omf tell -a on -t system:topo:imaged }}} === Running OEDL script === * Run the experiment script using the following OMF command and aurguments {{{ nilanjan@console.grid:~$ omf exec system:exp:ofdm-benchmark -- --bandwidth 1M --modulation qpsk --freq 2401M INFO NodeHandler: OMF Experiment Controller 5.4 (git 3fb37b9) INFO NodeHandler: Reading configuration file /etc/omf-expctl-5.4/services.yaml INFO NodeHandler: Add domain http - http://internal1.orbit-lab.org:5054/ INFO NodeHandler: Add domain http - http://repository1.orbit-lab.org:5054/ INFO NodeHandler: Slice ID: default_slice (default) INFO NodeHandler: Experiment ID: default_slice-2014-08-07t09.52.51.485-04.00 INFO NodeHandler: Message authentication is disabled INFO Experiment: load system:exp:stdlib INFO property.resetDelay: resetDelay = 230 (Fixnum) INFO property.resetTries: resetTries = 1 (Fixnum) INFO Experiment: load system:exp:eventlib INFO Experiment: load system:exp:winlib INFO Experiment: load system:exp:ofdm-benchmark INFO property.bandwidth: bandwidth = "1M" (String) INFO property.modulation: modulation = "qpsk" (String) INFO property.freq: freq = "2401M" (String) INFO property.rxgain: rxgain = "25" (String) INFO property.txgain: txgain = "25" (String) INFO property.txamplitude: txamplitude = "0.7" (String) INFO property.runtime: runtime = 10 (Fixnum) INFO Topology: Loaded topology '/tmp/pxe_slice-2014-08-07t09.06.49.229-04.00-topo-success'. INFO Topology: Loaded topology 'system:topo:imaged'. TX: node19-20.grid.orbit-lab.org RX: node20-19.grid.orbit-lab.org INFO ALL_UP_AND_INSTALLED: Event triggered. Starting the associated tasks. INFO exp: Request from Experiment Script: Wait for 2s.... INFO exp: Start receiver app INFO exp: Request from Experiment Script: Wait for 2s.... INFO exp: Start sending packets INFO exp: Request from Experiment Script: Wait for 10s.... INFO exp: Stop transmitter and receiver INFO exp: Request from Experiment Script: Wait for 2s.... INFO exp: done INFO EXPERIMENT_DONE: Event triggered. Starting the associated tasks. INFO NodeHandler: INFO NodeHandler: Shutting down experiment, please wait... INFO NodeHandler: INFO run: Experiment default_slice-2014-08-07t09.52.51.485-04.00 finished after 0:25 nilanjan@console.grid:~$ }}} * While the above script runs monitor the spectrum analyzer for activity around the specified operating frequency. The spectrum should look similar to the following: {{{ -40 . | . !!|!| -60 ||||||| ||||||| ||||||| |||||||! |||||||| |||||||| |||||||| -80 |||||||| . |||||||| | ||||||||| ! | ||||||||| . |: . !| ||||||||| . | |||. : . | || : ||||||||| : :. :. -100 :: | : |. |!||||.| :|:| | |||!| |:| ||||||||| | || :: || || ..|!|| | .|| ||||||||!||||||: |||||| ::|||||||||||||!|:||. ||: !|||..::: : : |. || |||||||||.|||||||||||||||||||| ||||||||||||||||||||||||||||| |||!|||||||||| : :.. . ! .|| ! |::|| :::!. | :!.!||!|||! ||||||||||||||||||||||||||||||:|||||||||||||||||||||||||||||!||||||||||||||||..:|||::|.|||||!! . dBfs 2397MHz 2398MHz 2399MHz 2400MHz 2401MHz 2402MHz 2403MHz }}}