blob: 366292a446904b97a52d8ae265fe8915ab89b906 [file] [log] [blame]
piotr437f5462014-02-04 17:57:25 +01001#!/usr/bin/env python
2
piotr7c82b172014-02-08 14:15:27 +01003import weakref
piotr437f5462014-02-04 17:57:25 +01004import gsm
5from gnuradio.eng_option import eng_option
6from gnuradio import gr, gru, blocks
7from gnuradio import filter
8
piotr437f5462014-02-04 17:57:25 +01009class receiver_hier(gr.hier_block2):
piotr6d152d92014-02-21 00:02:44 +010010 def __init__(self, input_rate, osr=4, arfcn=0):
piotr437f5462014-02-04 17:57:25 +010011 gr.hier_block2.__init__(self,
12 "receiver_hier",
13 gr.io_signature(1, 1, gr.sizeof_gr_complex),
14 gr.io_signature(1, 1, 142*gr.sizeof_float))
15 #set rates
16 gsm_symb_rate = 1625000/6.0
piotr7c82b172014-02-08 14:15:27 +010017
18 self.message_port_register_hier_in("bursts")
piotr4089c1a2014-08-06 14:10:56 +020019 self.message_port_register_hier_in("measurements")
piotr7c82b172014-02-08 14:15:27 +010020
piotr437f5462014-02-04 17:57:25 +010021 self.input_rate = input_rate
22 self.osr = osr
piotr6d152d92014-02-21 00:02:44 +010023 self.arfcn = arfcn
piotr437f5462014-02-04 17:57:25 +010024 self.sps = input_rate / gsm_symb_rate / osr
25
piotr437f5462014-02-04 17:57:25 +010026 #create accompaning blocks
27 self.filtr = self._set_filter()
28 self.interpolator = self._set_interpolator()
29 self.receiver = self._set_receiver()
30 self.connect(self, self.filtr, self.interpolator, self.receiver, self)
piotr6d152d92014-02-21 00:02:44 +010031# self.connect(self, self.interpolator, self.receiver, self)
piotr7c82b172014-02-08 14:15:27 +010032 self.msg_connect(self.receiver, "bursts", weakref.proxy(self), "bursts")
piotr4089c1a2014-08-06 14:10:56 +020033 self.msg_connect(self.receiver, "measurements", weakref.proxy(self), "measurements")
piotr7c82b172014-02-08 14:15:27 +010034
piotr437f5462014-02-04 17:57:25 +010035 def _set_filter(self):
36 filter_cutoff = 125e3
37 filter_t_width = 10e3
38 offset = 0
39
40 filter_taps = filter.firdes.low_pass(1.0, self.input_rate, filter_cutoff, filter_t_width, filter.firdes.WIN_HAMMING)
41 filtr = filter.freq_xlating_fir_filter_ccf(1, filter_taps, offset, self.input_rate)
42 return filtr
43
44 def _set_interpolator(self):
45 interpolator = filter.fractional_resampler_cc(0, self.sps)
46 return interpolator
47
48 def _set_receiver(self):
Piotr K608a08e2014-08-07 17:01:55 +020049 receiver = gsm.receiver(self.osr, self.arfcn)
piotr437f5462014-02-04 17:57:25 +010050 return receiver
51
52 def set_center_frequency(self, center_freq):
53 self.filtr.set_center_freq(center_freq)
54
55 def set_timing(self, timing_offset):
56 pass
piotrf2b6a1b2014-08-04 11:28:59 +020057
58 def set_arfcn(self,arfcn):
59 self.receiver.set_arfcn(arfcn)
60
61 def reset(self):
62 self.receiver.reset()
63