diff options
Diffstat (limited to 'python/receiver/receiver_hier.py')
-rw-r--r-- | python/receiver/receiver_hier.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/python/receiver/receiver_hier.py b/python/receiver/receiver_hier.py new file mode 100644 index 0000000..aa8fda3 --- /dev/null +++ b/python/receiver/receiver_hier.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +import weakref +import gsm +from gnuradio.eng_option import eng_option +from gnuradio import gr, gru, blocks +from gnuradio import filter + +class receiver_hier(gr.hier_block2): + def __init__(self, input_rate, osr=4, arfcn=0): + 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.message_port_register_hier_in("bursts") + self.message_port_register_hier_in("measurements") + + self.input_rate = input_rate + self.osr = osr + self.arfcn = arfcn + self.sps = input_rate / (gsm_symb_rate * osr) + + #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) +# self.connect(self, self.interpolator, self.receiver, self) + self.msg_connect(self.receiver, "bursts", weakref.proxy(self), "bursts") + self.msg_connect(self.receiver, "measurements", weakref.proxy(self), "measurements") + + 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.osr, self.arfcn) + return receiver + + def set_center_frequency(self, center_freq): + self.filtr.set_center_freq(center_freq) + + def set_timing(self, timing_offset): + pass + + def set_arfcn(self,arfcn): + self.receiver.set_arfcn(arfcn) + + def reset(self): + self.receiver.reset() + |