blob: ffc7782db58f4e2076e1d70ed88144d58db902a2 [file] [log] [blame]
ptrkrysikdac3b2a2014-11-06 14:47:33 +01001#!/usr/bin/env python
2##################################################
3# Gnuradio Python Flow Graph
4# Title: GSM input adaptor
5# Author: Piotr Krysik
6# Description: Adaptor of input stream for the GSM receiver. Contains frequency ofset corrector doing also resampling to integer multiplies of GSM sample rate and LP filter filtering GSM channel.
ptrkrysik381253a2014-11-19 11:30:53 +01007# Generated: Wed Nov 19 08:23:52 2014
ptrkrysikdac3b2a2014-11-06 14:47:33 +01008##################################################
9
10from gnuradio import filter
11from gnuradio import gr
12from gnuradio.filter import firdes
13import gsm
14
15class gsm_input(gr.hier_block2):
16
17 def __init__(self, ppm=0, osr=4, fc=940e6, samp_rate_in=1e6):
18 gr.hier_block2.__init__(
19 self, "GSM input adaptor",
20 gr.io_signature(1, 1, gr.sizeof_gr_complex*1),
21 gr.io_signature(1, 1, gr.sizeof_gr_complex*1),
22 )
23
24 ##################################################
25 # Parameters
26 ##################################################
27 self.ppm = ppm
28 self.osr = osr
29 self.fc = fc
30 self.samp_rate_in = samp_rate_in
31
32 ##################################################
ptrkrysik381253a2014-11-19 11:30:53 +010033 # Variables
34 ##################################################
35 self.samp_rate_out = samp_rate_out = 1625000.0/6.0*osr
36
37 ##################################################
ptrkrysikdac3b2a2014-11-06 14:47:33 +010038 # Blocks
39 ##################################################
40 self.ppm_in = None;self.message_port_register_hier_out("ppm_in")
41 self.low_pass_filter_0_0 = filter.fir_filter_ccf(1, firdes.low_pass(
ptrkrysik381253a2014-11-19 11:30:53 +010042 1, samp_rate_out, 125e3, 5e3, firdes.WIN_HAMMING, 6.76))
ptrkrysikdac3b2a2014-11-06 14:47:33 +010043 self.gsm_clock_offset_corrector_0 = gsm.clock_offset_corrector(
ptrkrysik381253a2014-11-19 11:30:53 +010044 fc=936.6e6,
ptrkrysikdac3b2a2014-11-06 14:47:33 +010045 ppm=0,
46 samp_rate_in=samp_rate_in,
ptrkrysikdac3b2a2014-11-06 14:47:33 +010047 )
ptrkrysik381253a2014-11-19 11:30:53 +010048 self.fractional_resampler_xx_0 = filter.fractional_resampler_cc(0, samp_rate_in/samp_rate_out)
ptrkrysikdac3b2a2014-11-06 14:47:33 +010049
50 ##################################################
51 # Connections
52 ##################################################
53 self.connect((self.low_pass_filter_0_0, 0), (self, 0))
ptrkrysik381253a2014-11-19 11:30:53 +010054 self.connect((self.fractional_resampler_xx_0, 0), (self.low_pass_filter_0_0, 0))
55 self.connect((self.gsm_clock_offset_corrector_0, 0), (self.fractional_resampler_xx_0, 0))
ptrkrysikdac3b2a2014-11-06 14:47:33 +010056 self.connect((self, 0), (self.gsm_clock_offset_corrector_0, 0))
57
58 ##################################################
59 # Asynch Message Connections
60 ##################################################
61 self.msg_connect(self, "ppm_in", self.gsm_clock_offset_corrector_0, "ppm_in")
62
63
64 def get_ppm(self):
65 return self.ppm
66
67 def set_ppm(self, ppm):
68 self.ppm = ppm
ptrkrysik381253a2014-11-19 11:30:53 +010069 self.gsm_clock_offset_corrector_0.set_ppm(self.ppm)
ptrkrysikdac3b2a2014-11-06 14:47:33 +010070
71 def get_osr(self):
72 return self.osr
73
74 def set_osr(self, osr):
75 self.osr = osr
ptrkrysik381253a2014-11-19 11:30:53 +010076 self.set_samp_rate_out(1625000.0/6.0*self.osr)
ptrkrysikdac3b2a2014-11-06 14:47:33 +010077
78 def get_fc(self):
79 return self.fc
80
81 def set_fc(self, fc):
82 self.fc = fc
83 self.gsm_clock_offset_corrector_0.set_fc(self.fc)
84
85 def get_samp_rate_in(self):
86 return self.samp_rate_in
87
88 def set_samp_rate_in(self, samp_rate_in):
89 self.samp_rate_in = samp_rate_in
ptrkrysik381253a2014-11-19 11:30:53 +010090 self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out)
ptrkrysikdac3b2a2014-11-06 14:47:33 +010091 self.gsm_clock_offset_corrector_0.set_samp_rate_in(self.samp_rate_in)
92
ptrkrysik381253a2014-11-19 11:30:53 +010093 def get_samp_rate_out(self):
94 return self.samp_rate_out
95
96 def set_samp_rate_out(self, samp_rate_out):
97 self.samp_rate_out = samp_rate_out
98 self.low_pass_filter_0_0.set_taps(firdes.low_pass(1, self.samp_rate_out, 125e3, 5e3, firdes.WIN_HAMMING, 6.76))
99 self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out)
100