From 0982673af1e91b91c4b983f0f423277e09089e7e Mon Sep 17 00:00:00 2001 From: Piotr Krysik Date: Fri, 15 Jul 2016 13:14:24 +0200 Subject: New clock offset corrector and clock offset control --- python/CMakeLists.txt | 4 +- python/__init__.py | 1 + python/misc_utils/clock_offset_corrector_tagged.py | 81 ++++++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 python/misc_utils/clock_offset_corrector_tagged.py (limited to 'python') diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index aa77ff1..a9c4599 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -41,7 +41,8 @@ GR_PYTHON_INSTALL( receiver/fcch_detector.py receiver/chirpz.py misc_utils/arfcn.py - misc_utils/clock_offset_corrector.py + misc_utils/clock_offset_corrector.py + misc_utils/clock_offset_corrector_tagged.py misc_utils/hier_block.py DESTINATION ${GR_PYTHON_DIR}/grgsm ) @@ -63,3 +64,4 @@ GR_ADD_TEST(qa_burst_fnr_filter ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} GR_ADD_TEST(qa_dummy_burst_filter ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_dummy_burst_filter.py) GR_ADD_TEST(qa_arfcn ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_arfcn.py) GR_ADD_TEST(qa_msg_to_tag ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_msg_to_tag.py) +GR_ADD_TEST(qa_controlled_fractional_resampler_cc ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_controlled_fractional_resampler_cc.py) diff --git a/python/__init__.py b/python/__init__.py index dfa7a0e..2e35f6c 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -51,6 +51,7 @@ from fcch_burst_tagger import fcch_burst_tagger from sch_detector import sch_detector from fcch_detector import fcch_detector from clock_offset_corrector import clock_offset_corrector +from clock_offset_corrector_tagged import clock_offset_corrector_tagged from gsm_input import gsm_input from gsm_wideband_input import gsm_wideband_input from gsm_bcch_ccch_demapper import gsm_bcch_ccch_demapper diff --git a/python/misc_utils/clock_offset_corrector_tagged.py b/python/misc_utils/clock_offset_corrector_tagged.py new file mode 100644 index 0000000..5d198b0 --- /dev/null +++ b/python/misc_utils/clock_offset_corrector_tagged.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +################################################## +# GNU Radio Python Flow Graph +# Title: Clock offset corrector +# Author: Piotr Krysik +# Description: Clock offset corrector with blocks that use tags to switch offsets +# Generated: Fri Jul 15 10:09:22 2016 +################################################## + +from gnuradio import gr +from gnuradio.filter import firdes +import grgsm +import math + + +class clock_offset_corrector_tagged(grgsm.hier_block): + + 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 tagged", + gr.io_signature(1, 1, gr.sizeof_gr_complex*1), + gr.io_signature(1, 1, gr.sizeof_gr_complex*1), + ) + self.message_port_register_hier_in("ctrl") + + ################################################## + # Parameters + ################################################## + self.fc = fc + self.ppm = ppm + self.samp_rate_in = samp_rate_in + + ################################################## + # Variables + ################################################## + self.samp_rate_out = samp_rate_out = samp_rate_in + + ################################################## + # Blocks + ################################################## + self.gsm_controlled_rotator_cc_0 = grgsm.controlled_rotator_cc(ppm/1.0e6*2*math.pi*fc/samp_rate_in,samp_rate_out) + self.grgsm_msg_to_tag_0 = grgsm.msg_to_tag() + self.grgsm_controlled_fractional_resampler_cc_0 = grgsm.controlled_fractional_resampler_cc(0, 1.0) + + ################################################## + # Connections + ################################################## + self.msg_connect((self, 'ctrl'), (self.grgsm_msg_to_tag_0, 'msg')) + self.connect((self.grgsm_controlled_fractional_resampler_cc_0, 0), (self.gsm_controlled_rotator_cc_0, 0)) + self.connect((self.grgsm_msg_to_tag_0, 0), (self.grgsm_controlled_fractional_resampler_cc_0, 0)) + self.connect((self.gsm_controlled_rotator_cc_0, 0), (self, 0)) + self.connect((self, 0), (self.grgsm_msg_to_tag_0, 0)) + + def get_fc(self): + return self.fc + + def set_fc(self, fc): + self.fc = fc + self.gsm_controlled_rotator_cc_0.set_phase_inc(self.ppm/1.0e6*2*math.pi*self.fc/self.samp_rate_in) + + def get_ppm(self): + return self.ppm + + def set_ppm(self, ppm): + self.ppm = ppm + self.gsm_controlled_rotator_cc_0.set_phase_inc(self.ppm/1.0e6*2*math.pi*self.fc/self.samp_rate_in) + + 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.gsm_controlled_rotator_cc_0.set_phase_inc(self.ppm/1.0e6*2*math.pi*self.fc/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.gsm_controlled_rotator_cc_0.set_samp_rate(self.samp_rate_out) -- cgit v1.2.3