0% found this document useful (0 votes)
243 views3 pages

GSM Receiver

This Python script defines a class called gsm_receiver_first_blood that implements a GSM receiver using a USRP radio device. The script sets up the receiver by defining methods to configure the signal source, filtering, interpolation, receiver processing, and output sink. It also processes command line options to set parameters like frequency, gain, and file I/O.

Uploaded by

Tareq Bakr
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
243 views3 pages

GSM Receiver

This Python script defines a class called gsm_receiver_first_blood that implements a GSM receiver using a USRP radio device. The script sets up the receiver by defining methods to configure the signal source, filtering, interpolation, receiver processing, and output sink. It also processes command line options to set parameters like frequency, gain, and file I/O.

Uploaded by

Tareq Bakr
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

#!

/usr/bin/env python 2 #this file isn't ready to use now - gsm-receiver lacks realtime processi ng capability 3 #there are many underruns of buffer fom usrp's samples, many blocks of s amples get lost and 4 #receiver isn't prepared for this situation too well 5 6 from gnuradio import gr, gru, blks2 7 #, gsm 8 from gnuradio import usrp 9 from gnuradio.eng_option import eng_option 10 from optparse import OptionParser 11 from os import sys 12 13 for extdir in ['../../debug/src/lib','../../debug/src/lib/.libs']: 14 if extdir not in sys.path: 15 sys.path.append(extdir) 16 import gsm 17 18 def pick_subdevice(u): 19 if u.db[0][0].dbid() >= 0: 20 return (0, 0) 21 if u.db[1][0].dbid() >= 0: 22 return (1, 0) 23 return (0, 0) 24 25 class tune(gr.feval_dd): 26 def __init__(self, top_block): 27 gr.feval_dd.__init__(self) 28 self.top_block = top_block 29 # self.center_freq = 0 30 def eval(self, freq_offet): 31 # self.center_freq = self.center_freq - freq_offet 32 self.top_block.set_frequency(freq_offet) 33 return freq_offet 34 35 class gsm_receiver_first_blood(gr.top_block): 36 def __init__(self): 37 gr.top_block.__init__(self) 38 (options, args) = self._process_options() 39 self.tune_callback = tune(self) 40 self.options = options 41 self.args = args 42 self._set_rates() 43 self.source = self._set_source() 44 self.filtr = self._set_filter() 45 self.interpolator = self._set_interpolator() 46 self.receiver = self._set_receiver() 47 self.converter = self._set_converter() 48 self.sink = self._set_sink() 49 50 self.connect(self.source, self.filtr, self.interpolator, self.r eceiver, self.converter, self.sink) 51 52 def _set_sink(self): 53 nazwa_pliku_wy = self.options.outputfile 54 ujscie = gr.file_sink(gr.sizeof_float, nazwa_pliku_wy) 55 return ujscie 56 57 def _set_source(self):

58 options = self.options 59 fusb_block_size = gr.prefs().get_long('fusb', 'block_size', 4096 ) 60 fusb_nblocks = gr.prefs().get_long('fusb', 'nblocks', 16) 61 self.usrp = usrp.source_c(decim_rate=options.decim, fusb_block_s ize=fusb_block_size, fusb_nblocks=fusb_nblocks) 62 63 if options.rx_subdev_spec is None: 64 options.rx_subdev_spec = pick_subdevice(self.usrp) 65 66 self.usrp.set_mux(usrp.determine_rx_mux_value(self.usrp, options .rx_subdev_spec)) 67 # determine the daughterboard subdevice 68 self.subdev = usrp.selected_subdev(self.usrp, options.rx_subdev_ spec) 69 input_rate = self.usrp.adc_freq() / self.usrp.decim_rate() 70 71 # set initial values 72 if options.gain is None: 73 # if no gain was specified, use the mid-point in dB 74 g = self.subdev.gain_range() 75 options.gain = float(g[0]+g[1])/2 76 77 r = self.usrp.tune(0, self.subdev, options.freq) 78 self.subdev.set_gain(options.gain) 79 return self.usrp 80 81 def _set_rates(self): 82 options = self.options 83 clock_rate = 64e6 84 self.clock_rate = clock_rate 85 self.input_rate = clock_rate / options.decim 86 self.gsm_symb_rate = 1625000.0 / 6.0 87 self.sps = self.input_rate / self.gsm_symb_rate / self.options.o sr 88 89 def _set_filter(self): 90 filter_cutoff = 145e3 91 filter_t_width = 10e3 92 offset = 0 93 # print "input_rate:", self.input_rate, "sample rate:", self.sps, " filter_cutoff:", filter_cutoff, " filter_t_width:", filter_t_width 94 filter_taps = gr.firdes.low_pass(1.0, self.input_rate, filte r_cutoff, filter_t_width, gr.firdes.WIN_HAMMING) 95 filtr = gr.freq_xlating_fir_filter_ccf(1, filter_taps, offset, self.input_rate) 96 return filtr 97 98 def _set_converter(self): 99 v2s = gr.vector_to_stream(gr.sizeof_float, 142) 100 return v2s 101 102 def _set_interpolator(self): 103 interpolator = gr.fractional_interpolator_cc(0, self.sps) 104 return interpolator 105 106 def _set_receiver(self): 107 receiver = gsm.receiver_cf(self.tune_callback, self.options.osr) 108 return receiver 109

110 def _process_options(self): 111 parser = OptionParser(option_class=eng_option) 112 parser.add_option("-d", "--decim", type="int", default=128, 113 help="Set USRP decimation rate to DE CIM [default=%default]") 114 parser.add_option("-I", "--inputfile", type="string", default="c file", 115 help="Input filename") 116 parser.add_option("-O", "--outputfile", type="string", default=" cfile2.out", 117 help="Output filename") 118 parser.add_option("-R", "--rx-subdev-spec", type="subdev", defau lt=None, 119 help="Select USRP Rx side A or B (de fault=first one with a daughterboard)") 120 parser.add_option("-r", "--osr", type="int", default=4, 121 help="Oversampling ratio [default=%default]") 122 parser.add_option("-f", "--freq", type="eng_float", default="950 .4M", 123 help="set frequency to FREQ", metava r="FREQ") 124 parser.add_option("-g", "--gain", type="eng_float", default=None , 125 help="Set gain in dB (default is mid point)") 126 (options, args) = parser.parse_args () 127 return (options, args) 128 129 def set_frequency(self, center_freq): 130 self.filtr.set_center_freq(center_freq) 131 132 def main(): 133 try: 134 gsm_receiver_first_blood().run() 135 except KeyboardInterrupt: 136 pass 137 138 if __name__ == '__main__': 139 main()

You might also like