Wednesday, October 17, 2012

Quick & Dirty Part-3 : Getting data from two USRP at a time

Here I will show how to get data dumped simultaneously into two different files :

Step -1 Make a file named "" with your favourite text editor

Step-2 Insert following two lines in the beginning.

#!/usr/bin/env python

Please change the version number of python as per your system
These two lines are necessary to make this file executable.

Step-3 Import necessary ingredients by insert the following lines

from gnuradio import gr
from gnuradio import uhd

We are importing gr to get our canvas i.e. and importing uhd to access the usrp

 Step-4 Making a class by insert the following lines

class rx_cfile_block1(gr.top_block):

This makes a class named "rx_cfile_block1" which is a derived class of gr.top_block (don't worry about this .. just do it)

Step-5 Defining a function of the class by inserting the follwing line

def __init__(self):

Every python class has a member function named __init__ which is passed a parameter "self"(don't worry about this .. just do it)

Step-6 Constructor for the derived class by inserting the following line


(don't worry about this .. just do it)

Step-7 Instantiating a uhd source by inserting following line

self.uhd_usrp_source_1 = uhd.usrp_source(device_addr="serial=1R270DU1",\

self.uhd_usrp_source_2 = uhd.usrp_source(device_addr="serial=1R270DU2",\

# If you want to record complex data then leave the line above as it is. If you want to record short data, put sc16 instead of fc32

# Here you have to essentially put the serial number of the two devices 

Step-8 Instantiating two file sinks by inserting following line

self.gr_file_sink_1 = gr.file_sink(gr.sizeof_gr_complex,"/home/username/first_app_data1")
self.gr_file_sink_2 = gr.file_sink(gr.sizeof_gr_complex,"/home/username/first_app_data2")

** Replace username with your username

#  If you want to record complex data then leave the line above as it is. If you want to record short data, gr.sizeof_short*2 instead of gr.sizeof_gr_complex.

# For collecting short type data perform the above step after modification mentioned in step-7

Step-9 Specify the subdevice by inserting following line

self.uhd_usrp_source_1.set_subdev_spec("A:0", 0)
self.uhd_usrp_source_2.set_subdev_spec("A:0", 0)

# For details on subdevices and antenna see my tutorial on subdevices here

# You can set different subdevices for each of them

Step-10 Specify antenna by inserting following line

self.uhd_usrp_source_1.set_antenna("RX2", 0)
self.uhd_usrp_source_2.set_antenna("RX2", 0)
# For details on subdevices and antenna see my tutorial on subdevices here
# You can set different receiving antenna for each of them

Step-11 Set the sampling rate by inserting following line


#This sets the sampling rate to 1000000 i.e. 1MSPS
# You can set different sampling rates for each of them

 Step-12 Set the gain by inserting following lines


#This sets the gain to 45dB
# You can set different gains to each of them

Step-13 Set the center frequency by inserting following lines

treq = uhd.tune_request(2450000000)


#This sets the center frequency to 2450000000 i.e. 2.45GHz

# You can set different center frequency for each of them, in such case youneed to make two different "treq" parameters with different frequencies

i.e. treq1 = uhd.tune_request(frequency_1)
      treq2 = uhd.tune_request(frequency_2)
And then use these treq1 and treq2 to set the center frequencies

Step-14 Set the number of samples to be collected by inserting following line

self.head_1 = gr.head(gr.sizeof_gr_complex, int(1000000))
self.head_2 = gr.head(gr.sizeof_gr_complex, int(1000000))

#This sets the number of samples to be recorded equals 1000000
# You can set different sample number for each of them

Step-15 Connect everything by inserting following lines


# It connects the uhd source, the head and the sink

Step-16 Finishing touch by inserting following lines of code

if __name__ == '__main__':    
       tb = rx_cfile_block1()

Now go to the terminal and type chmod +x

Now the python you just created has become executable so run it  by typing

./ at the terminal

Now check the destination directory for the collected data.

Now you can plot the data by typing

gr_plot_psd_c /home/username/first_app_data1 # for PSD
gr_plot_psd_c /home/username/first_app_data2 # for PSD
gr_plot_fft_c /home/username/first_app_data1 # for FFT
gr_plot_fft_c /home/username/first_app_data2 # for FFT

Program :


No comments:

Post a Comment