blob: aa8fda36127855ed315b27525dc08d6cffd8baec [file] [log] [blame]
#!/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()