blob: 1737d4120649bd8b6a3326314380d23540dcabad [file] [log] [blame]
piotr437f5462014-02-04 17:57:25 +01001#!/usr/bin/env python
2
3import gsm
4from gnuradio.eng_option import eng_option
5from gnuradio import gr, gru, blocks
6from gnuradio import filter
7
8
9class tuner(gr.feval_dd):
10 def __init__(self, top_block):
11 gr.feval_dd.__init__(self)
12 self.top_block = top_block
13 def eval(self, freq_offet):
14 self.top_block.set_center_frequency(freq_offet)
15 return freq_offet
16
17class receiver_hier(gr.hier_block2):
18 def __init__(self, input_rate, osr=4):
19 gr.hier_block2.__init__(self,
20 "receiver_hier",
21 gr.io_signature(1, 1, gr.sizeof_gr_complex),
22 gr.io_signature(1, 1, 142*gr.sizeof_float))
23 #set rates
24 gsm_symb_rate = 1625000/6.0
25 self.input_rate = input_rate
26 self.osr = osr
27 self.sps = input_rate / gsm_symb_rate / osr
28
29 #create callbacks
30 self.tuner_callback = tuner(self)
31 #create accompaning blocks
32 self.filtr = self._set_filter()
33 self.interpolator = self._set_interpolator()
34 self.receiver = self._set_receiver()
35 self.connect(self, self.filtr, self.interpolator, self.receiver, self)
36
37 def _set_filter(self):
38 filter_cutoff = 125e3
39 filter_t_width = 10e3
40 offset = 0
41
42 filter_taps = filter.firdes.low_pass(1.0, self.input_rate, filter_cutoff, filter_t_width, filter.firdes.WIN_HAMMING)
43 filtr = filter.freq_xlating_fir_filter_ccf(1, filter_taps, offset, self.input_rate)
44 return filtr
45
46 def _set_interpolator(self):
47 interpolator = filter.fractional_resampler_cc(0, self.sps)
48 return interpolator
49
50 def _set_receiver(self):
51 receiver = gsm.receiver(self.tuner_callback, self.osr)
52 return receiver
53
54 def set_center_frequency(self, center_freq):
55 self.filtr.set_center_freq(center_freq)
56
57 def set_timing(self, timing_offset):
58 pass
59