Wednesday, October 17, 2012

Quick & Dirty part-2 : Data dumping into two different sinks simultaneously

Here I will show how to get data dumped simultaneously into two different files from a single 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 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

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

# Either replace the serial number by your usrp's serial number or just put type=usrp1 or type=usrp2 (according to availability) inside the quotes 

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.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_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

Step-15 Connect everything by inserting following lines

self.connect(self.uhd_usrp_source,self.head_1,self.gr_file_sink_1)
self.connect(self.uhd_usrp_source,self.head_2,self.gr_file_sink_2)

# 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_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 :

http://www.2shared.com/file/Lrj95l69/pgm_2.html




1 comment:

  1. i am a beginner, after following all this instructions, these are the result at the terminal. Even same when i put my username. Why the error?

    itamakide@itamakide-Inspiron-M5040:~$ gr_plot_psd_c /home/username/first_app_data1 # for PSD
    Traceback (most recent call last):
    File "/usr/bin/gr_plot_psd_c", line 42, in
    main()
    File "/usr/bin/gr_plot_psd_c", line 38, in main
    dc = plot_psd_base("complex64", filename, options)
    File "/usr/lib/python2.7/dist-packages/gnuradio/plot_psd_base.py", line 42, in __init__
    self.hfile = open(filename, "r")
    IOError: [Errno 2] No such file or directory: '/home/username/first_app_data1'

    itamakide@itamakide-Inspiron-M5040:~$ gr_plot_psd_c /home/username/first_app_data2 # for PSD
    Traceback (most recent call last):
    File "/usr/bin/gr_plot_psd_c", line 42, in
    main()
    File "/usr/bin/gr_plot_psd_c", line 38, in main
    dc = plot_psd_base("complex64", filename, options)
    File "/usr/lib/python2.7/dist-packages/gnuradio/plot_psd_base.py", line 42, in __init__
    self.hfile = open(filename, "r")
    IOError: [Errno 2] No such file or directory: '/home/username/first_app_data2'

    itamakide@itamakide-Inspiron-M5040:~$ gr_plot_fft_c /home/username/first_app_data1 # for FFT
    Traceback (most recent call last):
    File "/usr/bin/gr_plot_fft_c", line 41, in
    main()
    File "/usr/bin/gr_plot_fft_c", line 37, in main
    dc = plot_fft_base("complex64", filename, options)
    File "/usr/lib/python2.7/dist-packages/gnuradio/plot_fft_base.py", line 40, in __init__
    self.hfile = open(filename, "r")
    IOError: [Errno 2] No such file or directory: '/home/username/first_app_data1'

    itamakide@itamakide-Inspiron-M5040:~$ gr_plot_fft_c /home/username/first_app_data2 # for FFT
    Traceback (most recent call last):
    File "/usr/bin/gr_plot_fft_c", line 41, in
    main()
    File "/usr/bin/gr_plot_fft_c", line 37, in main
    dc = plot_fft_base("complex64", filename, options)
    File "/usr/lib/python2.7/dist-packages/gnuradio/plot_fft_base.py", line 40, in __init__
    self.hfile = open(filename, "r")
    IOError: [Errno 2] No such file or directory: '/home/username/first_app_data2'

    ReplyDelete