blob: 2b2f9ab745551289ded4990647bc13325b1c3282 [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
9
10class tuner(gr.feval_dd):
11 def __init__(self, top_block):
12 gr.feval_dd.__init__(self)
13 self.top_block = top_block
14 def eval(self, freq_offet):
15 self.top_block.set_center_frequency(freq_offet)
16 return freq_offet
17
18class receiver_hier(gr.hier_block2):
19 def __init__(self, input_rate, osr=4):
20 gr.hier_block2.__init__(self,
21 "receiver_hier",
22 gr.io_signature(1, 1, gr.sizeof_gr_complex),
23 gr.io_signature(1, 1, 142*gr.sizeof_float))
24 #set rates
25 gsm_symb_rate = 1625000/6.0
piotr7c82b172014-02-08 14:15:27 +010026
27 self.message_port_register_hier_in("bursts")
28
piotr437f5462014-02-04 17:57:25 +010029 self.input_rate = input_rate
30 self.osr = osr
31 self.sps = input_rate / gsm_symb_rate / osr
32
33 #create callbacks
34 self.tuner_callback = tuner(self)
35 #create accompaning blocks
36 self.filtr = self._set_filter()
37 self.interpolator = self._set_interpolator()
38 self.receiver = self._set_receiver()
39 self.connect(self, self.filtr, self.interpolator, self.receiver, self)
piotr7c82b172014-02-08 14:15:27 +010040 self.msg_connect(self.receiver, "bursts", weakref.proxy(self), "bursts")
41
piotr437f5462014-02-04 17:57:25 +010042
43 def _set_filter(self):
44 filter_cutoff = 125e3
45 filter_t_width = 10e3
46 offset = 0
47
48 filter_taps = filter.firdes.low_pass(1.0, self.input_rate, filter_cutoff, filter_t_width, filter.firdes.WIN_HAMMING)
49 filtr = filter.freq_xlating_fir_filter_ccf(1, filter_taps, offset, self.input_rate)
50 return filtr
51
52 def _set_interpolator(self):
53 interpolator = filter.fractional_resampler_cc(0, self.sps)
54 return interpolator
55
56 def _set_receiver(self):
57 receiver = gsm.receiver(self.tuner_callback, self.osr)
58 return receiver
59
60 def set_center_frequency(self, center_freq):
61 self.filtr.set_center_freq(center_freq)
62
63 def set_timing(self, timing_offset):
64 pass
65