blob: a3e2b0a49fdb5b18ff14082a98bd5cac909b5101 [file] [log] [blame]
Piotr Krysik09826732016-07-15 13:14:24 +02001# -*- coding: utf-8 -*-
2##################################################
3# GNU Radio Python Flow Graph
Piotr Krysik83afe732016-07-17 22:48:35 +02004# Title: Clock Offset Corrector Tagged
Piotr Krysik09826732016-07-15 13:14:24 +02005# Author: Piotr Krysik
6# Description: Clock offset corrector with blocks that use tags to switch offsets
Piotr Krysik83afe732016-07-17 22:48:35 +02007# Generated: Sun Jul 17 22:03:13 2016
Piotr Krysik09826732016-07-15 13:14:24 +02008##################################################
9
10from gnuradio import gr
11from gnuradio.filter import firdes
12import grgsm
13import math
14
15
16class clock_offset_corrector_tagged(grgsm.hier_block):
17
Piotr Krysik83afe732016-07-17 22:48:35 +020018 def __init__(self, fc=936.6e6, osr=4, ppm=0, samp_rate_in=1625000.0/6.0*4.0):
Piotr Krysik09826732016-07-15 13:14:24 +020019 gr.hier_block2.__init__(
Piotr Krysik83afe732016-07-17 22:48:35 +020020 self, "Clock Offset Corrector Tagged",
Piotr Krysik09826732016-07-15 13:14:24 +020021 gr.io_signature(1, 1, gr.sizeof_gr_complex*1),
22 gr.io_signature(1, 1, gr.sizeof_gr_complex*1),
23 )
24 self.message_port_register_hier_in("ctrl")
25
26 ##################################################
27 # Parameters
28 ##################################################
29 self.fc = fc
Piotr Krysik83afe732016-07-17 22:48:35 +020030 self.osr = osr
Piotr Krysik09826732016-07-15 13:14:24 +020031 self.ppm = ppm
32 self.samp_rate_in = samp_rate_in
33
34 ##################################################
35 # Variables
36 ##################################################
Piotr Krysik83afe732016-07-17 22:48:35 +020037 self.gsm_symb_rate = gsm_symb_rate = 1625000.0/6.0
38 self.samp_rate_out = samp_rate_out = osr*gsm_symb_rate
Piotr Krysik09826732016-07-15 13:14:24 +020039
40 ##################################################
41 # Blocks
42 ##################################################
Piotr Krysikd1ca3892016-07-17 11:33:50 +020043 self.gsm_msg_to_tag_0 = grgsm.msg_to_tag()
Piotr Krysik83afe732016-07-17 22:48:35 +020044 self.gsm_controlled_rotator_cc_0 = grgsm.controlled_rotator_cc(ppm/1.0e6*2*math.pi*fc/samp_rate_out)
45 self.gsm_controlled_fractional_resampler_cc_0 = grgsm.controlled_fractional_resampler_cc(0, samp_rate_in/samp_rate_out)
Piotr Krysik09826732016-07-15 13:14:24 +020046
47 ##################################################
48 # Connections
49 ##################################################
Piotr Krysikd1ca3892016-07-17 11:33:50 +020050 self.msg_connect((self, 'ctrl'), (self.gsm_msg_to_tag_0, 'msg'))
51 self.connect((self.gsm_controlled_fractional_resampler_cc_0, 0), (self.gsm_controlled_rotator_cc_0, 0))
Piotr Krysik09826732016-07-15 13:14:24 +020052 self.connect((self.gsm_controlled_rotator_cc_0, 0), (self, 0))
Piotr Krysikd1ca3892016-07-17 11:33:50 +020053 self.connect((self.gsm_msg_to_tag_0, 0), (self.gsm_controlled_fractional_resampler_cc_0, 0))
54 self.connect((self, 0), (self.gsm_msg_to_tag_0, 0))
Piotr Krysik09826732016-07-15 13:14:24 +020055
56 def get_fc(self):
57 return self.fc
58
59 def set_fc(self, fc):
60 self.fc = fc
Piotr Krysik83afe732016-07-17 22:48:35 +020061 self.gsm_controlled_rotator_cc_0.set_phase_inc(self.ppm/1.0e6*2*math.pi*self.fc/self.samp_rate_out)
62
63 def get_osr(self):
64 return self.osr
65
66 def set_osr(self, osr):
67 self.osr = osr
68 self.set_samp_rate_out(self.osr*self.gsm_symb_rate)
Piotr Krysik09826732016-07-15 13:14:24 +020069
70 def get_ppm(self):
71 return self.ppm
72
73 def set_ppm(self, ppm):
74 self.ppm = ppm
Piotr Krysik83afe732016-07-17 22:48:35 +020075 self.gsm_controlled_rotator_cc_0.set_phase_inc(self.ppm/1.0e6*2*math.pi*self.fc/self.samp_rate_out)
Piotr Krysik09826732016-07-15 13:14:24 +020076
77 def get_samp_rate_in(self):
78 return self.samp_rate_in
79
80 def set_samp_rate_in(self, samp_rate_in):
81 self.samp_rate_in = samp_rate_in
Piotr Krysik83afe732016-07-17 22:48:35 +020082 self.gsm_controlled_fractional_resampler_cc_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out)
83
84 def get_gsm_symb_rate(self):
85 return self.gsm_symb_rate
86
87 def set_gsm_symb_rate(self, gsm_symb_rate):
88 self.gsm_symb_rate = gsm_symb_rate
89 self.set_samp_rate_out(self.osr*self.gsm_symb_rate)
Piotr Krysik09826732016-07-15 13:14:24 +020090
91 def get_samp_rate_out(self):
92 return self.samp_rate_out
93
94 def set_samp_rate_out(self, samp_rate_out):
95 self.samp_rate_out = samp_rate_out
Piotr Krysik83afe732016-07-17 22:48:35 +020096 self.gsm_controlled_fractional_resampler_cc_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out)
97 self.gsm_controlled_rotator_cc_0.set_phase_inc(self.ppm/1.0e6*2*math.pi*self.fc/self.samp_rate_out)