diff options
author | ptrkrysik <ptrkrysik@gmail.com> | 2014-11-19 11:30:53 +0100 |
---|---|---|
committer | ptrkrysik <ptrkrysik@gmail.com> | 2014-11-19 11:30:53 +0100 |
commit | 381253a1d24f1273fad2f4e0d57d75d3ac6e518d (patch) | |
tree | 2ac0ba198a88845d41626a7056b7e0508a669fae /python | |
parent | 7a7b9b0a3a446e83703f53bea11389f030c68fde (diff) |
Changes in clock offset corrector and gsm_input - the previous version wasn't working well when samp_rate_in was different from samp_rate_out.
Now resampling is done outside of clock offset corrector.
Diffstat (limited to 'python')
-rw-r--r-- | python/misc_utils/clock_offset_corrector.py | 44 | ||||
-rw-r--r-- | python/receiver/gsm_input.py | 28 |
2 files changed, 44 insertions, 28 deletions
diff --git a/python/misc_utils/clock_offset_corrector.py b/python/misc_utils/clock_offset_corrector.py index 0633ae5..9063082 100644 --- a/python/misc_utils/clock_offset_corrector.py +++ b/python/misc_utils/clock_offset_corrector.py @@ -3,7 +3,7 @@ # Gnuradio Python Flow Graph # Title: Clock offset corrector # Author: Piotr Krysik -# Generated: Thu Nov 6 10:22:24 2014 +# Generated: Wed Nov 19 08:38:40 2014 ################################################## from gnuradio import blocks @@ -15,7 +15,7 @@ import math class clock_offset_corrector(gr.hier_block2): - def __init__(self, fc=936.6e6, samp_rate_in=1625000.0/6.0*4.0, samp_rate_out=1625000.0/6.0*4.0, ppm=0): + def __init__(self, fc=936.6e6, ppm=0, samp_rate_in=1625000.0/6.0*4.0): gr.hier_block2.__init__( self, "Clock offset corrector", gr.io_signature(1, 1, gr.sizeof_gr_complex*1), @@ -26,9 +26,13 @@ class clock_offset_corrector(gr.hier_block2): # Parameters ################################################## self.fc = fc - self.samp_rate_in = samp_rate_in - self.samp_rate_out = samp_rate_out self.ppm = ppm + self.samp_rate_in = samp_rate_in + + ################################################## + # Variables + ################################################## + self.samp_rate_out = samp_rate_out = samp_rate_in ################################################## # Blocks @@ -36,7 +40,6 @@ class clock_offset_corrector(gr.hier_block2): 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_0 = filter.fractional_resampler_ff(0, samp_rate_in/samp_rate_out) self.fractional_resampler_xx_0 = filter.fractional_resampler_cc(0, samp_rate_in/samp_rate_out) 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, )) @@ -45,16 +48,14 @@ class clock_offset_corrector(gr.hier_block2): ################################################## # Connections ################################################## - self.connect((self.gsm_controlled_const_source_f_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self, 0), (self.fractional_resampler_xx_0, 0)) - self.connect((self.blocks_multiply_const_vxx_0, 0), (self.fractional_resampler_xx_0_0, 0)) - self.connect((self.blocks_add_const_vxx_0, 0), (self.fractional_resampler_xx_0_0, 1)) - self.connect((self.gsm_controlled_rotator_cc_0, 0), (self, 0)) self.connect((self.fractional_resampler_xx_0, 0), (self.gsm_controlled_rotator_cc_0, 0)) self.connect((self.blocks_add_const_vxx_0, 0), (self.fractional_resampler_xx_0, 1)) - self.connect((self.gsm_controlled_const_source_f_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.blocks_add_const_vxx_0, 0)) - self.connect((self.fractional_resampler_xx_0_0, 0), (self.gsm_controlled_rotator_cc_0, 1)) + self.connect((self.blocks_multiply_const_vxx_0, 0), (self.gsm_controlled_rotator_cc_0, 1)) + self.connect((self.gsm_controlled_rotator_cc_0, 0), (self, 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 @@ -69,13 +70,20 @@ class clock_offset_corrector(gr.hier_block2): 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.set_samp_rate_out(self.samp_rate_in) self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) - self.fractional_resampler_xx_0_0.set_resamp_ratio(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.blocks_add_const_vxx_0.set_k((self.samp_rate_in/self.samp_rate_out, )) @@ -84,17 +92,9 @@ class clock_offset_corrector(gr.hier_block2): def set_samp_rate_out(self, samp_rate_out): self.samp_rate_out = samp_rate_out - self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) - self.gsm_controlled_rotator_cc_0.set_samp_rate(self.samp_rate_out) self.blocks_multiply_const_vxx_0.set_k((self.fc/self.samp_rate_out*(2*math.pi)/1e6, )) - self.fractional_resampler_xx_0_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) + self.fractional_resampler_xx_0.set_resamp_ratio(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) self.blocks_add_const_vxx_0.set_k((self.samp_rate_in/self.samp_rate_out, )) - 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) - diff --git a/python/receiver/gsm_input.py b/python/receiver/gsm_input.py index e1a51b0..ffc7782 100644 --- a/python/receiver/gsm_input.py +++ b/python/receiver/gsm_input.py @@ -4,7 +4,7 @@ # Title: GSM input adaptor # Author: Piotr Krysik # 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. -# Generated: Thu Nov 6 14:41:06 2014 +# Generated: Wed Nov 19 08:23:52 2014 ################################################## from gnuradio import filter @@ -30,23 +30,29 @@ class gsm_input(gr.hier_block2): self.samp_rate_in = samp_rate_in ################################################## + # Variables + ################################################## + self.samp_rate_out = samp_rate_out = 1625000.0/6.0*osr + + ################################################## # Blocks ################################################## self.ppm_in = None;self.message_port_register_hier_out("ppm_in") self.low_pass_filter_0_0 = filter.fir_filter_ccf(1, firdes.low_pass( - 1, 1625000.0/6.0*osr, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) + 1, samp_rate_out, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) self.gsm_clock_offset_corrector_0 = gsm.clock_offset_corrector( - fc=fc, + fc=936.6e6, ppm=0, samp_rate_in=samp_rate_in, - samp_rate_out=1625000.0/6.0*4.0, ) + self.fractional_resampler_xx_0 = filter.fractional_resampler_cc(0, samp_rate_in/samp_rate_out) ################################################## # Connections ################################################## self.connect((self.low_pass_filter_0_0, 0), (self, 0)) - self.connect((self.gsm_clock_offset_corrector_0, 0), (self.low_pass_filter_0_0, 0)) + self.connect((self.fractional_resampler_xx_0, 0), (self.low_pass_filter_0_0, 0)) + self.connect((self.gsm_clock_offset_corrector_0, 0), (self.fractional_resampler_xx_0, 0)) self.connect((self, 0), (self.gsm_clock_offset_corrector_0, 0)) ################################################## @@ -60,13 +66,14 @@ class gsm_input(gr.hier_block2): def set_ppm(self, ppm): self.ppm = ppm + self.gsm_clock_offset_corrector_0.set_ppm(self.ppm) def get_osr(self): return self.osr def set_osr(self, osr): self.osr = osr - self.low_pass_filter_0_0.set_taps(firdes.low_pass(1, 1625000.0/6.0*self.osr, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) + self.set_samp_rate_out(1625000.0/6.0*self.osr) def get_fc(self): return self.fc @@ -80,5 +87,14 @@ class gsm_input(gr.hier_block2): def set_samp_rate_in(self, samp_rate_in): self.samp_rate_in = samp_rate_in + self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) self.gsm_clock_offset_corrector_0.set_samp_rate_in(self.samp_rate_in) + 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.low_pass_filter_0_0.set_taps(firdes.low_pass(1, self.samp_rate_out, 125e3, 5e3, firdes.WIN_HAMMING, 6.76)) + self.fractional_resampler_xx_0.set_resamp_ratio(self.samp_rate_in/self.samp_rate_out) + |