wiki:Tutorials/k0SDR/Tutorial18

Multi channel sample collection with x310

Description

We'll demonstrate using multiple USRPs to collect samples.

Set up

  1. Make a reservation of the grid console.
  2. Verify availability of x310s of the grid, then power cycle the x310s with omf commands.
      grid> omf stat -t [23,1..8]
      grid> omf tell -a offh -t [23,1..8]
      grid> omf tell -a on   -t [23,1..8]
    
  1. In this example we'll use node21-1 to run the application to collect samples. This node will have access to all usrps on the grid's RF device column ie. -t [23,1..8]

Load baseline-uhd.ndz image and then ssh into node21-1

  grid> omf load -i baseline-uhd.ndz -t node21-1
  grid> omf tell -a on -t node21-1
  grid> ssh root@node21-1
  1. [Optional] Test the PPS input to x310s
      root@node21-1:~/uhd/host/build/examples# ./test_pps_input --args="addr=10.10.23.1" --source external
    
    Output text should indicate "Success!"

Collect samples

  1. The application to collect samples is rx_multi_receive. The source files are in the attachment. Download it to a directory and make the application.

Run rx_multi_receive —help to get a list of options.

root@node21-1:~/RX_MULTI_RECEIVE# ./rx_multi_receive --help
linux; GNU C++ version 4.8.4; Boost_105400; UHD_003.010.001.001-release

UHD RX Multi Samples Allowed options:
  --help                  help message
  --args arg              single uhd device address args
  --secs arg (=1.5)       number of seconds in the future to receive
  --nsamps arg (=10000)   total number of samples to receive
  --freq arg (=900000000) RF center frequency in Hz for all channels
  --rate arg (=6250000)   rate of incoming samples for all channels
  --gain arg (=0)         gain for the RF chain for all channels
  --prefix arg            enables file output with filename prefix
  --addr arg              udp address: 10.10.0.10
  --port arg (=1337)      udp port: 1337
  --sync arg (=now)       synchronization method: now, pps, mimo
  --subdev arg            subdev spec (homogeneous across motherboards)
  --dilv                  specify to disable inner-loop verbose
  --int-n                 tune USRP with integer-N tuning
  --channels arg (=0)     which channel(s) to use (specify "0", "1", "0,1",
                          etc)

This app is very similar to rx_multi_sample provided in the UHD examples directory but with a few additional arguments.

  • The values given with options —freq and —gain are specified across all channels.
  • Use the option —prefix to collect samples from all channels to a file name tagged with the prefix and channel number.
  • Use the —sync option with PPS option synchronize sampling across all devices. This option selects the time source to the external 10Mhz refernce clock.
  • The samples can also be sent out via UDP by providing —addr and —port.
  1. To collect samples with 3 x310s with both daughter boards (for a total of 6 channels)
    root@node21-1:~/RX_MULTI_RECEIVE# now="date +%Y%m%d"T"%H%M%S"Z" "
    root@node21-1:~/RX_MULTI_RECEIVE# ./rx_multi_receive --nsamps 1024 --rate 5e6 --args="addr0=10.10.23.1,addr1=10.10.23.3,addr2=10.10.23.4" --subdev "A:0 B:0" --channels "0,1,2,3,4,5" --prefix "x310_`$now`_"  --sync "pps" --secs 5
    

Each channel data is collected into an ascii file with meta information and a binary file with only sample data:

-rw-r--r-- 1 root root   27262 May  6 14:28 x310_20160506T142807Z_ch_0_meta
-rw-r--r-- 1 root root    8192 May  6 14:28 x310_20160506T142807Z_ch_0_binary
-rw-r--r-- 1 root root   27643 May  6 14:28 x310_20160506T142807Z_ch_2_meta
-rw-r--r-- 1 root root    8192 May  6 14:28 x310_20160506T142807Z_ch_2_binary
-rw-r--r-- 1 root root   27735 May  6 14:28 x310_20160506T142807Z_ch_1_meta
-rw-r--r-- 1 root root    8192 May  6 14:28 x310_20160506T142807Z_ch_1_binary
-rw-r--r-- 1 root root   27360 May  6 14:28 x310_20160506T142807Z_ch_4_meta
-rw-r--r-- 1 root root    8192 May  6 14:28 x310_20160506T142807Z_ch_4_binary
-rw-r--r-- 1 root root   27678 May  6 14:28 x310_20160506T142807Z_ch_3_meta
-rw-r--r-- 1 root root    8192 May  6 14:28 x310_20160506T142807Z_ch_3_binary
-rw-r--r-- 1 root root   26868 May  6 14:28 x310_20160506T142807Z_ch_5_meta
-rw-r--r-- 1 root root    8192 May  6 14:28 x310_20160506T142807Z_ch_5_binary
  1. Details of each channel in the meta file. The channel sample data is also appended in ascii text if the samples collected is less than ~16000.
    root@node21-1:~/RX_MULTI_RECEIVE# more x310_20160506T142807Z_ch_0_meta
    channel              : 0
    mboard id            : X310
    mboard_serial        : 30A3570
    mboard_name          : Mercury
    rx_id                : UBX-160 v1 (0x007a)
    rx_subdev_name       : UBX RX
    rx_subdev_spec       : A:0 B:0
    total samples        : 1024
    sample size          : 8
    RX frequency (MHz)   : 900
    RX sample rate (MHz) : 5
    RX gain (dB)         : 0
    
  1. The channel's complete sample data is located in the files labeled binary. To quickly view contents of the binary file:
    root@node21-1:~/RX_MULTI_RECEIVE# hexdump -v -e '"%010_ad [" 2/4 "%f " "]\n"' x310_20160506T142807Z_ch_0_binary
    0000000000 [0.000000 0.000031]
    0000000008 [-0.000244 -0.000092]
    0000000016 [-0.000153 0.000061]
    0000000024 [-0.000214 0.000061]
    0000000032 [-0.000122 0.000061]
    0000000040 [0.000031 0.000153]
    0000000048 [-0.000122 -0.000061]
    0000000056 [-0.000183 -0.000061]
    0000000064 [-0.000092 0.000153]
    0000000072 [-0.000031 0.000031]
    0000000080 [-0.000153 0.000000]
    0000000088 [0.000031 0.000061]
    :
    :
    :
    
  1. As an example here is a plot of the all channels receiving a test signal around 900MHz. Although the signal was captured with the —sync PPS option, the start phase of each signal receive is different from channel to channel.
Last modified 17 months ago Last modified on 02/20/17 07:38:05

Attachments (3)

Download all attachments as: .zip