aboutsummaryrefslogtreecommitdiffstats
path: root/python/receiver_hier.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/receiver_hier.py')
-rwxr-xr-xpython/receiver_hier.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/python/receiver_hier.py b/python/receiver_hier.py
new file mode 100755
index 0000000..1737d41
--- /dev/null
+++ b/python/receiver_hier.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+
+import gsm
+from gnuradio.eng_option import eng_option
+from gnuradio import gr, gru, blocks
+from gnuradio import filter
+
+
+class tuner(gr.feval_dd):
+ def __init__(self, top_block):
+ gr.feval_dd.__init__(self)
+ self.top_block = top_block
+ def eval(self, freq_offet):
+ self.top_block.set_center_frequency(freq_offet)
+ return freq_offet
+
+class receiver_hier(gr.hier_block2):
+ def __init__(self, input_rate, osr=4):
+ gr.hier_block2.__init__(self,
+ "receiver_hier",
+ gr.io_signature(1, 1, gr.sizeof_gr_complex),
+ gr.io_signature(1, 1, 142*gr.sizeof_float))
+ #set rates
+ gsm_symb_rate = 1625000/6.0
+ self.input_rate = input_rate
+ self.osr = osr
+ self.sps = input_rate / gsm_symb_rate / osr
+
+ #create callbacks
+ self.tuner_callback = tuner(self)
+ #create accompaning blocks
+ self.filtr = self._set_filter()
+ self.interpolator = self._set_interpolator()
+ self.receiver = self._set_receiver()
+ self.connect(self, self.filtr, self.interpolator, self.receiver, self)
+
+ def _set_filter(self):
+ filter_cutoff = 125e3
+ filter_t_width = 10e3
+ offset = 0
+
+ filter_taps = filter.firdes.low_pass(1.0, self.input_rate, filter_cutoff, filter_t_width, filter.firdes.WIN_HAMMING)
+ filtr = filter.freq_xlating_fir_filter_ccf(1, filter_taps, offset, self.input_rate)
+ return filtr
+
+ def _set_interpolator(self):
+ interpolator = filter.fractional_resampler_cc(0, self.sps)
+ return interpolator
+
+ def _set_receiver(self):
+ receiver = gsm.receiver(self.tuner_callback, self.osr)
+ return receiver
+
+ def set_center_frequency(self, center_freq):
+ self.filtr.set_center_freq(center_freq)
+
+ def set_timing(self, timing_offset):
+ pass
+