Friday, October 12, 2012

Quick & Dirty: Part-1 : Getting data from USRP

So Lets start the quick and dirty guide on "How to get data from usrp"


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

Step-2 Insert following two lines in the beginning.

#!/usr/bin/python2.6
#!/usr/bin/env python

Please change the version number of python as per your system
These two lines are necessary to make this foo.py 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. top_block.py and importing uhd to access the usrp

 Step-4 Making a class by inserting 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

gr.top_block.__init__(self)

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

Step-7 Instantiating a uhd source by inserting following line

self.uhd_usrp_source = uhd.usrp_source(device_addr="serial=1R270DU1",
stream_args=uhd.stream_args('fc32'))

# 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

# Instead of serial number you can put type=usrp1 or type=usrp2 (according to availability), inside the quotes

Step-8 Instantiating a file sink by inserting following line

self.gr_file_sink = gr.file_sink(gr.sizeof_gr_complex,"/home/username/first_app_data1")

** 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.set_subdev_spec("A:0", 0)

# For details on subdevices and antenna see my tutorial on subdevices here
http://www.youtube.com/watch?v=BERxSmWlRZM&feature=BFa&list=PLE8D7641BBF6E849B

Step-10 Specify antenna by inserting following line

self.uhd_usrp_source.set_antenna("RX2", 0)

# For details on subdevices and antenna see my tutorial on subdevices here
http://www.youtube.com/watch?v=BERxSmWlRZM&feature=BFa&list=PLE8D7641BBF6E849B

Step-11 Set the sampling rate by inserting following line

self.uhd_usrp_source.set_samp_rate(1000000)

#This sets the sampling rate to 1000000 i.e. 1MSPS

 Step-12 Set the gain by inserting following lines

self.uhd_usrp_source.set_gain(45)

 #This sets the gain to 45dB

Step-13 Set the center frequency by inserting following lines

treq = uhd.tune_request(2450000000)

self.uhd_usrp_source.set_center_freq(treq)

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

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

self._head = gr.head(gr.sizeof_gr_complex, int(1000000))

#This sets the number of samples to be recorded equals 1000000

Step-15 Connect everything by inserting following lines

 self.connect(self.uhd_usrp_source, self._head, self.gr_file_sink)

# 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()
      tb.run()

Now go to the terminal and type chmod +x foo.py

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

./foo.py 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_fft_c /home/username/first_app_data1 # for FFT

Program :

http://www.2shared.com/file/hSrMaEKF/pgm_1.html
                     


4 comments:

  1. Hi Sumit,
    Your blog is very helpful for absolute beginners like me. Just had a doubt, should the Left hand side of the expressions conform to self.uhd_usrp_source or it can be any other variable u can use. Because what is important is the R.H.S. which indicates what you are declaring?

    ReplyDelete
  2. hi just wondering what range it captures from? so if the center frequency is 100, what would be the lower / upper x limits when graphed in the fft?

    ReplyDelete
  3. Hi Christopher, If the center frequency is 100MHz then the upper limit is 104MHz while lower limit is 96 MHz knowing that USRP-1 can process upto 8MHz.

    ReplyDelete