= This page is WIP = = Working with USRP - Universal Software Radio Peripheral = == Description == In this tutorial we'll use the 2 USRPs on Sandbox 3 to transmit and receive a single frequency over the air to demonstrate the use of ''Universal software Radio peripheral'' Hardware Drivers (UHD) which is used standalone to configure and enable the USRPs. == Hardware / Software Resources utilized == 1. Sandbox 3 - consists of two nodes (node1-1 & node1-2). Each node has a USRP2 connect via Ethernet. 2. ''ubuntu-11-10-gnuradio.ndz'': disk image loaded onto nodes. This image has all the precompiled - software required to configure the USRPs and analyze recorded data. The USRP2's interface with the node is already configured. 3. omf-5.2 / omf-5.3: used to image to nodes 4. octave: GNU version of MATLAB == Set up == * To get started first make a reservation on the [https://www.orbit-lab.org/schedule/ Orbit Scheduler] for using Sandbox 3 * After logging into sandbox 3 console, make sure both nodes are turned off {{{ nilanjan@console.sb3:~$ omf-5.2 tell offh all }}} * Verify state of node before continuing. Make sure all nodes are in the POWEROFF state. {{{ nilanjan@console.sb3:~$ omf-5.2 stat }}} * Image both nodes {{{ nilanjan@console.sb3:~$ omf-5.3 load -i ubuntu-11-10-gnuradio.ndz -t node1-1.sb3.orbit-lab.org,node1-2.sb3.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.sb3:~$ nilanjan@console.sb3:~$ omf-5.2 tell offh all }}} * Turn nodes back on and verify they are in POWERON state before proceeding {{{ nilanjan@console.sb3:~$ nilanjan@console.sb3:~$ omf-5.2 tell on all }}} == Usage == * Once nodes are imaged, ssh into each node. Use the USRP2 on node1-1 as the transmitter and USRP2 on node1-2 as receiver.[[BR]] ssh into node1-1 {{{ nilanjan@console.sb3:~$ ssh root@node1-1 root@node1-1:~# cd uhd/host/build/examples/ }}} ssh into node1-2 {{{ nilanjan@console.sb3:~$ ssh root@node1-2 root@node1-1:~# cd uhd/host/build/examples/ }}} * The directory content should look like the following in both nodes {{{ root@node1-1:~/uhd/host/build/examples# ls benchmark_rate latency_test rx_samples_to_file test_pps_input tx_waveforms CMakeFiles Makefile rx_samples_to_udp tx_bursts cmake_install.cmake network_relay rx_timed_samples tx_samples_from_file CTestTestfile.cmake rx_multi_samples test_messages tx_timed_samples }}} * Once inside the node verify that the node can talk to the USRP {{{ root@node1-1:~/uhd/host/build/examples# uhd_find_devices }}} * It should return something like the following: {{{ root@node1-1:~/uhd/host/build/examples# uhd_find_devices linux; GNU C++ version 4.6.1; Boost_104601; UHD_003.004.003-0-unknown -------------------------------------------------- -- UHD Device 0 -------------------------------------------------- Device Address: type: usrp2 addr: 192.168.10.2 name: serial: 1232 }}} * Probe the device {{{ root@node1-1:~/uhd/host/build/examples# uhd_usrp_probe linux; GNU C++ version 4.6.1; Boost_104601; UHD_003.004.003-0-unknown -- Opening a USRP2/N-Series device... -- Current recv frame size: 1472 bytes -- Current send frame size: 1472 bytes _____________________________________________________ / | Device: USRP2 / N-Series Device | _____________________________________________________ | / | | Mboard: USRP2-REV4 | | hardware: 1024 | | mac-addr: 00:50:c2:85:34:d0 | | ip-addr: 192.168.10.2 | | gpsdo: none | | serial: 1232 | | | | Time sources: none, external, _external_, mimo | | Clock sources: internal, external, mimo | | Sensors: mimo_locked, ref_locked | | _____________________________________________________ | | / | | | RX DSP: 0 | | | Freq range: -50.000 to 50.000 Mhz | | _____________________________________________________ | | / | | | RX DSP: 1 | | | Freq range: -50.000 to 50.000 Mhz | | _____________________________________________________ | | / | | | RX Dboard: A | | | ID: XCVR2450 (0x0061) | | | _____________________________________________________ | | | / | | | | RX Subdev: 0 | | | | Name: XCVR2450 (0x0061) | | | | Antennas: J1, J2 | | | | Sensors: lo_locked, rssi | | | | Freq range: 2400.000 to 6000.000 Mhz | | | | Gain range LNA: 0.0 to 30.5 step 15.0 dB | | | | Gain range VGA: 0.0 to 62.0 step 2.0 dB | | | | Connection Type: IQ | | | | Uses LO offset: No | | | _____________________________________________________ | | | / | | | | RX Codec: A | | | | Name: ltc2284 | | | | Gain Elements: None | | _____________________________________________________ | | / | | | TX DSP: 0 | | | Freq range: -250.000 to 250.000 Mhz | | _____________________________________________________ | | / | | | TX Dboard: A | | | ID: XCVR2450 (0x0060) | | | _____________________________________________________ | | | / | | | | TX Subdev: 0 | | | | Name: XCVR2450 (0x0060) | | | | Antennas: J1, J2 | | | | Sensors: lo_locked | | | | Freq range: 2400.000 to 6000.000 Mhz | | | | Gain range VGA: 0.0 to 30.0 step 0.5 dB | | | | Gain range BB: 0.0 to 5.0 step 1.5 dB | | | | Connection Type: QI | | | | Uses LO offset: No | | | _____________________________________________________ | | | / | | | | TX Codec: A | | | | Name: ad9777 | | | | Gain Elements: None }}} If the commands ''uhd_find_devices'' & ''uhd_usrp_probe '' return No UHD Devices Found, please refer to the troubleshooting section. * On node1-1 use the waveform generator to continuously transmit a single frequency sine wave with a frequency of 100k Hz sampled at a rate of 8 MSamples / second and modulated upto 5000MHz {{{ root@node1-1:~/uhd/host/build/examples# ./tx_waveforms --wave-freq 100e3 --wave-type SINE --freq 5000e6 --rate 8e6 --gain 20 linux; GNU C++ version 4.6.1; Boost_104601; UHD_003.004.003-0-unknown Creating the usrp device with: ... -- Opening a USRP2/N-Series device... -- Current recv frame size: 1472 bytes -- Current send frame size: 1472 bytes Using Device: Single USRP: Device: USRP2 / N-Series Device Mboard 0: USRP2-REV4 RX Channel: 0 RX DSP: 0 RX Dboard: A RX Subdev: XCVR2450 (0x0061) TX Channel: 0 TX DSP: 0 TX Dboard: A TX Subdev: XCVR2450 (0x0060) Setting TX Rate: 8.000000 Msps... UHD Warning: The hardware does not support the requested TX sample rate: Target sample rate: 8.000000 MSps Actual sample rate: 7.692308 MSps Actual TX Rate: 7.692308 Msps... Setting TX Freq: 5000.000000 MHz... Actual TX Freq: 5000.000000 MHz... Setting TX Gain: 20.000000 dB... Actual TX Gain: 20.000000 dB... Setting device timestamp to 0... Checking TX: LO: locked ... Press Ctrl + C to stop streaming... }}} * Now set up the USRP2 on node1-2 to sniff the spectrum at 5000MHz using the rx_ascii_art_dft tool {{{ root@node1-2:~/uhd/host/build/examples# ../../examples/rx_ascii_art_dft --freq 5000e6 --gain 20 --rate 8e6 --frame-rate 10 --ref-lvl -50 --dyn-rng 70 }}} * The output should display a frequency spectrum in the terminal using the ascii art! {{{ -50 | | ! | ||| -60 ||| ||| ||| ||| -70 ||| ||| |||| |||| -80 !|||||!!. ||||||||| ||||||||| . ||||||||| .| !| ||||||||| || -90 . !|||.|||||||||.||! : :. !| :|||||||||||||||||||:. .| ::| . .:.| ||!! ||||.||||||||||||||||||||||| .:|| !||| || |||| ||||: |||||||||||||||||||||||||||||||||: ||||. : !| -100 .: . ||.||||! ||||||||||||||||||||||||||||||||||||||||.|||||.|: .|| ! . .. || ||||:!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||| :||.|| || || |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||:|||||| ! . . || .|:|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |.| !||.! | -110 !.|:|. ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||:|||.|||||||.: ||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||:||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -120 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| dBfs 4997MHz 4998MHz 4999MHz 5000MHz 5001MHz 5002MHz 5003MHz O }}} * Now going back to node1-1, turn off the waveform generator so nothing is transmitted. That is do a ''ctrl-c'' in the node1-1 terminal. The frequency spectrum display on node1-2 should display the noise floor {{{ -50 -60 -70 -80 -90 ! :. : : | || | | ! ! -100 . |. . .||! | ||! |!:. || :| | | .:|| ! . ! |: |!|| | ||||! | |||.||||:||:|| || |:||||::|.| ! !.! .|. . :| ||: ::||.||||:|:!||||| |!!||||||||||||||!||:|||||||||||:|:||| :.:.|||||!: | | :|:.||:||| ||||||||||||||||||:|||||||||||||||||||||||||||||||||||||| ||||||||||| :: . : . | -110 !|:| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||.|||||||||||.||! :|.| | |. !| |!|||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||| |!||| |. || ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||| || ||:|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||!|||||.|| -120 :||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| dBfs 4997MHz 4998MHz 4999MHz 5000MHz 5001MHz 5002MHz 5003MHz O }}} * Play around with the options on tx_waveforms and verify the corresponding change in the received frequency spectrum. To view all optionsdo the following: {{{ root@node1-1:~/uhd/host/build/examples# ./tx_waveforms --help }}} = Next: Capture waveform and record to file & add time-domain plot of waveform = == Troubleshooting == * ''uhd_find_devices'' & ''uhd_usrp_probe '' return No UHD Devices Found