diff options
author | Piotr K <pkrysik@elka.pw.edu.pl> | 2014-08-13 19:04:57 +0200 |
---|---|---|
committer | Piotr K <pkrysik@elka.pw.edu.pl> | 2014-08-13 19:04:57 +0200 |
commit | 66bb3cdc3137e46436ed18a1c453d59176051158 (patch) | |
tree | 8072de4539dccfbabfd8f6b2f5de7ee50e0e20f9 /python/misc_utils | |
parent | c917af4e3a7c4c66f5b4e2494e1456f41dd12a47 (diff) |
Changed directory structure.
Corrected clock_offset_corrector (for some streange and yet unknown reason fractional resampler eats strem tags for some values of sps).
(this commit may contain some changes that are not described)
Diffstat (limited to 'python/misc_utils')
-rw-r--r-- | python/misc_utils/clock_offset_corrector.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/python/misc_utils/clock_offset_corrector.py b/python/misc_utils/clock_offset_corrector.py new file mode 100644 index 0000000..807e6cc --- /dev/null +++ b/python/misc_utils/clock_offset_corrector.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +################################################## +# Gnuradio Python Flow Graph +# Title: Clock offset corrector +# Author: Piotr Krysik +# Generated: Wed Aug 13 16:43:12 2014 +################################################## + +from gnuradio import blocks +from gnuradio import filter +from gnuradio import gr +from gnuradio.filter import firdes +import gsm +import math + +class clock_offset_corrector(gr.hier_block2): + + def __init__(self, fc=936.6e6, ppm=0, samp_rate_in=1625000.0/6.0*4.0, samp_rate_out=1625000.0/6.0*4.0): + gr.hier_block2.__init__( + self, "Clock offset corrector", + gr.io_signature(1, 1, gr.sizeof_gr_complex*1), + gr.io_signature(1, 1, gr.sizeof_gr_complex*1), + ) + + ################################################## + # Parameters + ################################################## + self.fc = fc + self.ppm = ppm + self.samp_rate_in = samp_rate_in + self.samp_rate_out = samp_rate_out + + ################################################## + # Blocks + ################################################## + self.ppm_in = None;self.message_port_register_hier_out("ppm_in") + self.gsm_controlled_rotator_cc_0 = gsm.controlled_rotator_cc(0,samp_rate_out) + self.gsm_controlled_const_source_f_0 = gsm.controlled_const_source_f(ppm) + self.fractional_resampler_xx_0 = filter.fractional_resampler_cc(0, 1) + self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff((1.0e-6*samp_rate_in/samp_rate_out, )) + self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((fc/samp_rate_out*(2*math.pi)/1e6, )) + self.blocks_add_const_vxx_0 = blocks.add_const_vff((samp_rate_in/samp_rate_out, )) + + ################################################## + # Connections + ################################################## + self.connect((self.blocks_add_const_vxx_0, 0), (self.fractional_resampler_xx_0, 1)) + self.connect((self.blocks_multiply_const_vxx_0, 0), (self.gsm_controlled_rotator_cc_0, 1)) + self.connect((self.fractional_resampler_xx_0, 0), (self.gsm_controlled_rotator_cc_0, 0)) + self.connect((self.gsm_controlled_rotator_cc_0, 0), (self, 0)) + self.connect((self, 0), (self.fractional_resampler_xx_0, 0)) + self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.blocks_add_const_vxx_0, 0)) + self.connect((self.gsm_controlled_const_source_f_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) + self.connect((self.gsm_controlled_const_source_f_0, 0), (self.blocks_multiply_const_vxx_0, 0)) + + ################################################## + # Asynch Message Connections + ################################################## + self.msg_connect(self, "ppm_in", self.gsm_controlled_const_source_f_0, "constant_msg") + + + def get_fc(self): + return self.fc + + def set_fc(self, fc): + self.fc = fc + self.blocks_multiply_const_vxx_0.set_k((self.fc/self.samp_rate_out*(2*math.pi)/1e6, )) + + def get_ppm(self): + return self.ppm + + def set_ppm(self, ppm): + self.ppm = ppm + self.gsm_controlled_const_source_f_0.set_constant(self.ppm) + + def get_samp_rate_in(self): + return self.samp_rate_in + + def set_samp_rate_in(self, samp_rate_in): + self.samp_rate_in = samp_rate_in + self.blocks_add_const_vxx_0.set_k((self.samp_rate_in/self.samp_rate_out, )) + self.blocks_multiply_const_vxx_0_0.set_k((1.0e-6*self.samp_rate_in/self.samp_rate_out, )) + + def get_samp_rate_out(self): + return self.samp_rate_out + + def set_samp_rate_out(self, samp_rate_out): + self.samp_rate_out = samp_rate_out + self.blocks_multiply_const_vxx_0.set_k((self.fc/self.samp_rate_out*(2*math.pi)/1e6, )) + self.blocks_add_const_vxx_0.set_k((self.samp_rate_in/self.samp_rate_out, )) + self.blocks_multiply_const_vxx_0_0.set_k((1.0e-6*self.samp_rate_in/self.samp_rate_out, )) + self.gsm_controlled_rotator_cc_0.set_samp_rate(self.samp_rate_out) + |