Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 1 | # -*- coding: utf-8 -*- |
| 2 | ################################################## |
| 3 | # GNU Radio Python Flow Graph |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 4 | # Title: Clock Offset Corrector Tagged |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 5 | # Author: Piotr Krysik |
| 6 | # Description: Clock offset corrector with blocks that use tags to switch offsets |
Piotr Krysik | 7973538 | 2016-07-20 21:39:40 +0200 | [diff] [blame] | 7 | # Generated: Wed Jul 20 20:07:11 2016 |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 8 | ################################################## |
| 9 | |
| 10 | from gnuradio import gr |
| 11 | from gnuradio.filter import firdes |
| 12 | import grgsm |
| 13 | import math |
| 14 | |
| 15 | |
| 16 | class clock_offset_corrector_tagged(grgsm.hier_block): |
| 17 | |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 18 | def __init__(self, fc=936.6e6, osr=4, ppm=0, samp_rate_in=1625000.0/6.0*4.0): |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 19 | gr.hier_block2.__init__( |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 20 | self, "Clock Offset Corrector Tagged", |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 21 | 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 Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 30 | self.osr = osr |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 31 | self.ppm = ppm |
| 32 | self.samp_rate_in = samp_rate_in |
| 33 | |
| 34 | ################################################## |
| 35 | # Variables |
| 36 | ################################################## |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 37 | self.gsm_symb_rate = gsm_symb_rate = 1625000.0/6.0 |
| 38 | self.samp_rate_out = samp_rate_out = osr*gsm_symb_rate |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 39 | |
| 40 | ################################################## |
| 41 | # Blocks |
| 42 | ################################################## |
Piotr Krysik | d1ca389 | 2016-07-17 11:33:50 +0200 | [diff] [blame] | 43 | self.gsm_msg_to_tag_0 = grgsm.msg_to_tag() |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 44 | self.gsm_controlled_rotator_cc_0 = grgsm.controlled_rotator_cc(ppm/1.0e6*2*math.pi*fc/samp_rate_out) |
Piotr Krysik | 7973538 | 2016-07-20 21:39:40 +0200 | [diff] [blame] | 45 | self.gsm_controlled_fractional_resampler_cc_0 = grgsm.controlled_fractional_resampler_cc(0, (1-ppm/1.0e6)*(samp_rate_in/samp_rate_out)) |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 46 | |
| 47 | ################################################## |
| 48 | # Connections |
| 49 | ################################################## |
Piotr Krysik | d1ca389 | 2016-07-17 11:33:50 +0200 | [diff] [blame] | 50 | 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 Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 52 | self.connect((self.gsm_controlled_rotator_cc_0, 0), (self, 0)) |
Piotr Krysik | d1ca389 | 2016-07-17 11:33:50 +0200 | [diff] [blame] | 53 | 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 Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 55 | |
| 56 | def get_fc(self): |
| 57 | return self.fc |
| 58 | |
| 59 | def set_fc(self, fc): |
| 60 | self.fc = fc |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 61 | 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 Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 69 | |
| 70 | def get_ppm(self): |
| 71 | return self.ppm |
| 72 | |
| 73 | def set_ppm(self, ppm): |
| 74 | self.ppm = ppm |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 75 | self.gsm_controlled_rotator_cc_0.set_phase_inc(self.ppm/1.0e6*2*math.pi*self.fc/self.samp_rate_out) |
Piotr Krysik | 7973538 | 2016-07-20 21:39:40 +0200 | [diff] [blame] | 76 | self.gsm_controlled_fractional_resampler_cc_0.set_resamp_ratio((1-self.ppm/1.0e6)*(self.samp_rate_in/self.samp_rate_out)) |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 77 | |
| 78 | def get_samp_rate_in(self): |
| 79 | return self.samp_rate_in |
| 80 | |
| 81 | def set_samp_rate_in(self, samp_rate_in): |
| 82 | self.samp_rate_in = samp_rate_in |
Piotr Krysik | 7973538 | 2016-07-20 21:39:40 +0200 | [diff] [blame] | 83 | self.gsm_controlled_fractional_resampler_cc_0.set_resamp_ratio((1-self.ppm/1.0e6)*(self.samp_rate_in/self.samp_rate_out)) |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 84 | |
| 85 | def get_gsm_symb_rate(self): |
| 86 | return self.gsm_symb_rate |
| 87 | |
| 88 | def set_gsm_symb_rate(self, gsm_symb_rate): |
| 89 | self.gsm_symb_rate = gsm_symb_rate |
| 90 | self.set_samp_rate_out(self.osr*self.gsm_symb_rate) |
Piotr Krysik | 0982673 | 2016-07-15 13:14:24 +0200 | [diff] [blame] | 91 | |
| 92 | def get_samp_rate_out(self): |
| 93 | return self.samp_rate_out |
| 94 | |
| 95 | def set_samp_rate_out(self, samp_rate_out): |
| 96 | self.samp_rate_out = samp_rate_out |
Piotr Krysik | 83afe73 | 2016-07-17 22:48:35 +0200 | [diff] [blame] | 97 | self.gsm_controlled_rotator_cc_0.set_phase_inc(self.ppm/1.0e6*2*math.pi*self.fc/self.samp_rate_out) |
Piotr Krysik | 7973538 | 2016-07-20 21:39:40 +0200 | [diff] [blame] | 98 | self.gsm_controlled_fractional_resampler_cc_0.set_resamp_ratio((1-self.ppm/1.0e6)*(self.samp_rate_in/self.samp_rate_out)) |