wiki:Tutorials/k0SDR/Tutorial05

Version 4 (modified by nilanjan, 7 years ago) (diff)

--

USRP2 configration and data collection with OEDL script

Description

In this tutorial we'll demonstrate exactly what the title says.

Hardware / Software Resourcesutilized

  1. 4 grid nodes with a USRP2 connect via Ethernet.
  2. ubuntu-12-04-uhd-daemon.ndz: node image with all the precompiled software required to configure the USRPs.
  3. uhd_exp1.rb - OEDL script executed on the console. This script configures the USRPs for data collection at specified frequencies, sampling rate, etc...
  4. uhd_daemon - a node background process that bridges the gap between OMF commands and USRP2.

Set up

  • Let's pick 4 nodes with a USRP2. For a current list of nodes with USRPs, goto the Orbit Scheduler, click on Status Page under Quick Links. Select the Grid Tab and filter by SDR and USRP_N210 or SBX. This will give a topology list of nodes (below) that can be used with the OMF commands:
    [node1-1.grid.orbit-lab.org,node1-2.grid.orbit-lab.org,node1-19.grid.orbit-lab.org,node1-20.grid.orbit-lab.org,
    node2-1.grid.orbit-lab.org,node2-2.grid.orbit-lab.org,node2-19.grid.orbit-lab.org,node2-20.grid.orbit-lab.org,
    node19-1.grid.orbit-lab.org,node19-19.grid.orbit-lab.org,node19-20.grid.orbit-lab.org,node20-1.grid.orbit-lab.org,
    node20-19.grid.orbit-lab.org,node20-20.grid.orbit-lab.org,node1-1.sb3.orbit-lab.org,node1-2.sb3.orbit-lab.org]
    
  • After logging into grid console, make sure all nodes are turned off
    nilanjan@console.grid:~$ omf tell -a offh -t node1-1.grid.orbit-lab.org,node1-2.grid.orbit-lab.org,node1-19.grid.orbit-lab.org,node1-20.grid.orbit-lab.org
    
  • Verify state of node before continuing. Make sure all nodes are in the POWEROFF state.
    nilanjan@console.grid:~$ omf stat -t node1-1.grid.orbit-lab.org,node1-2.grid.orbit-lab.org,node1-19.grid.orbit-lab.org,node1-20.grid.orbit-lab.org
    
  • Image nodes
    nilanjan@console.grid:~$ omf load -i ubuntu-12-04-uhd-daemon.ndz -r 20 -t node1-1.grid.orbit-lab.org,node1-2.grid.orbit-lab.org,node1-19.grid.orbit-lab.org,node1-20.grid.orbit-lab.org
    
  • After nodes are imaged, verify that nodes are in POWEROFF state. Otherwise issue the following to turn them off for a reboot
    nilanjan@console.grid:~$ omf tell -a offh -t node1-1.grid.orbit-lab.org,node1-2.grid.orbit-lab.org,node1-19.grid.orbit-lab.org,node1-20.grid.orbit-lab.org
    
  • Turn nodes back on and verify they are in POWERON state
    nilanjan@console.grid:~$ omf tell -a on -t node1-1.grid.orbit-lab.org,node1-2.grid.orbit-lab.org,node1-19.grid.orbit-lab.org,node1-20.grid.orbit-lab.org
    
  • Download the OEDL experiment script uhd_exp1.rb to your local directory on the console. Executing this script will tell the USRP2 record spectrum data for a few seconds at different carrier frequencies. The contents of the uhd file is shown with additional comments:
    nilanjan@console.grid:~/UHD$ cat uhd_exp1.rb
    defProperty('rxfreq',  2400e6, "Starting rx frequency")
    defProperty('rxstep',  10e6, "Rx frequency increments")
    defProperty('nfreq',   10, "Number of frequency steps")
    defProperty('dwell',   10, "Number of seconds at each frequency step")
    
    
    defGroup('rxnode', 'node1-1.grid.orbit-lab.org,node1-2.grid.orbit-lab.org,node1-19.grid.orbit-lab.org,node1-20.grid.orbit-lab.org')
    { |n|
    }
    
    
    onEvent(:ALL_UP) do |event|
      info "Give machines some time to warm up"
      wait 4
    
      allGroups.uhd.u0.activate                        # starts uhd_daemon
      wait 3
    
      group("rxnode").uhd.u0.rxrate = "8e6"            # set receive chain sampling rate
      group("rxnode").uhd.u0.rxgain = "20"             # set receive chain gain (dB)
      group("rxnode").uhd.u0.numbins = "128"           # set size of fft
      group("rxnode").uhd.u0.avgwinlen = "32"          # set averaging window size for each fft bin across time.  
    
      group("rxnode").uhd.u0.omlfile = "spectrum.grid" # oml database file name to store fft data
      group("rxnode").uhd.u0.omlserver = "idb2:3003"   # oml server
    
      group("rxnode").uhd.u0.record                    # start recording thread
    
      (0..property.nfreq).each { |i|                   # set up loop
        cf = property.rxfreq + (property.rxstep*i)     # compute next carrier frequency
        group("rxnode").uhd.u0.rxfreq = cf             # set receive chain carrier frequency (Hz)
    
        wait property.dwell                            # wait for number of seconds before computing next frequency
      }
    
      group("rxnode").uhd.u0.stop                      # stop recording thread
    
      allGroups.uhd.u0.deactivate                      # stop uhd_daemon
    
    
      info "Finish it."
      Experiment.done
    end
    

Execute script and view recorded data

  • To run the experiment script:
    nilanjan@console.grid:~/UHD$ omf exec uhd_exp1.rb
    
  • Once the script finishes, check the contents of the database file. The data should be recorded in spectrum.grid.sq3 on the oml server idb2.
    nilanjan@console.grid:~/UHD$ ssh idb2
    nilanjan@idb2:~$ cd /var/lib/oml2
    nilanjan@idb2:/var/lib/oml2$
    nilanjan@idb2:/var/lib/oml2$ ls -l spectrum.grid.sq3
    -rw-r--r-- 1 oml2 oml2 753561600 May 14 10:41 spectrum.grid.sq3
    
  • Dump the contents of spectrum.grid.sq3 to have a quick look inside the sql file.
    nilanjan@idb2:/var/lib/oml2$ sqlite3 spectrum.grid.sq3 ".dump"
    
  • The magnitude value of the fft bins are stored in binary format. The first entry of the db file is shown below. So when dumping the file contents the ftt bins data is shown as consecutive ascii representation of the binary floating point numbers.
  • 5/15/2013 - Work in progress...

Attachments (6)

Download all attachments as: .zip