blob: 1737d4120649bd8b6a3326314380d23540dcabad [file] [log] [blame]
#!/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