diff options
author | Piotr Krysik <ptrkrysik@gmail.com> | 2016-05-20 12:45:54 +0200 |
---|---|---|
committer | Piotr Krysik <ptrkrysik@gmail.com> | 2016-05-20 12:45:54 +0200 |
commit | 773a194c327c89161b3d11e5246dfea04d9b45dc (patch) | |
tree | d81ba89769c7a807a4b155b84e8d4bfb3e2bae16 /python | |
parent | bac8284599e137981f178e8998d6426f011d9dab (diff) |
Big change of the universal control channels demapper:
-simplification of the universal demapper,
-addition of hierarhical blocks for each of the demappers - so they also look well and readable in python,
-addition of helper script for compilation of the demappers.
Diffstat (limited to 'python')
-rw-r--r-- | python/CMakeLists.txt | 3 | ||||
-rw-r--r-- | python/__init__.py | 3 | ||||
-rw-r--r-- | python/demapping/gsm_bcch_ccch_demapper.py | 46 | ||||
-rw-r--r-- | python/demapping/gsm_bcch_ccch_sdcch4_demapper.py | 46 | ||||
-rw-r--r-- | python/demapping/gsm_sdcch8_demapper.py | 46 |
5 files changed, 144 insertions, 0 deletions
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 04a97c2..8fc48de 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -31,6 +31,9 @@ endif() GR_PYTHON_INSTALL( FILES __init__.py + demapping/gsm_bcch_ccch_demapper.py + demapping/gsm_bcch_ccch_sdcch4_demapper.py + demapping/gsm_sdcch8_demapper.py receiver/gsm_input.py receiver/gsm_wideband_input.py receiver/fcch_burst_tagger.py diff --git a/python/__init__.py b/python/__init__.py index 247c040..dfa7a0e 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -53,6 +53,9 @@ from fcch_detector import fcch_detector from clock_offset_corrector import clock_offset_corrector from gsm_input import gsm_input from gsm_wideband_input import gsm_wideband_input +from gsm_bcch_ccch_demapper import gsm_bcch_ccch_demapper +from gsm_bcch_ccch_sdcch4_demapper import gsm_bcch_ccch_sdcch4_demapper +from gsm_sdcch8_demapper import gsm_sdcch8_demapper import arfcn diff --git a/python/demapping/gsm_bcch_ccch_demapper.py b/python/demapping/gsm_bcch_ccch_demapper.py new file mode 100644 index 0000000..adb4c12 --- /dev/null +++ b/python/demapping/gsm_bcch_ccch_demapper.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +################################################## +# GNU Radio Python Flow Graph +# Title: BCCH + CCCH demapper +# Author: Piotr Krysik +# Description: Demapper for BCCH + CCCH control channels. This corresponds to channel combination iv specified in GSM 05.02, section 6.4 +# Generated: Fri May 20 12:11:59 2016 +################################################## + +from gnuradio import gr +from gnuradio.filter import firdes +import grgsm + + +class gsm_bcch_ccch_demapper(grgsm.hier_block): + + def __init__(self, timeslot_nr=0): + grgsm.hier_block.__init__( + self, "BCCH + CCCH demapper", + gr.io_signature(0, 0, 0), + gr.io_signature(0, 0, 0), + ) + self.message_port_register_hier_in("bursts") + self.message_port_register_hier_out("bursts") + + ################################################## + # Parameters + ################################################## + self.timeslot_nr = timeslot_nr + + ################################################## + # Blocks + ################################################## + self.gsm_universal_ctrl_chans_demapper_0 = grgsm.universal_ctrl_chans_demapper(timeslot_nr, ([0,0,2,2,2,2,6,6,6,6,0,0,12,12,12,12,16,16,16,16,0,0,22,22,22,22,26,26,26,26,0,0,32,32,32,32,36,36,36,36,0,0,42,42,42,42,46,46,46,46,0,]), ([0,0,1,1,1,1,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,]), ([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,]), ([0,0,0,0,0,0,6,6,6,6,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,37,41,41,41,41,0,0,47,47,47,47]), ([2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,]), ([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,])) + + ################################################## + # Connections + ################################################## + self.msg_connect((self.gsm_universal_ctrl_chans_demapper_0, 'bursts'), (self, 'bursts')) + self.msg_connect((self, 'bursts'), (self.gsm_universal_ctrl_chans_demapper_0, 'bursts')) + + def get_timeslot_nr(self): + return self.timeslot_nr + + def set_timeslot_nr(self, timeslot_nr): + self.timeslot_nr = timeslot_nr diff --git a/python/demapping/gsm_bcch_ccch_sdcch4_demapper.py b/python/demapping/gsm_bcch_ccch_sdcch4_demapper.py new file mode 100644 index 0000000..92fb5f0 --- /dev/null +++ b/python/demapping/gsm_bcch_ccch_sdcch4_demapper.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +################################################## +# GNU Radio Python Flow Graph +# Title: BCCH + CCCH + SDCCH/4 demapper +# Author: Piotr Krysik +# Description: Demapper for BCCH + CCCH + SDCCH/4 + SACCH/C4 control channels. This corresponds to channel combination v specified in GSM 05.02, section 6.4 +# Generated: Fri May 20 12:12:01 2016 +################################################## + +from gnuradio import gr +from gnuradio.filter import firdes +import grgsm + + +class gsm_bcch_ccch_sdcch4_demapper(grgsm.hier_block): + + def __init__(self, timeslot_nr=0): + grgsm.hier_block.__init__( + self, "BCCH + CCCH + SDCCH/4 demapper", + gr.io_signature(0, 0, 0), + gr.io_signature(0, 0, 0), + ) + self.message_port_register_hier_in("bursts") + self.message_port_register_hier_out("bursts") + + ################################################## + # Parameters + ################################################## + self.timeslot_nr = timeslot_nr + + ################################################## + # Blocks + ################################################## + self.gsm_universal_ctrl_chans_demapper_0 = grgsm.universal_ctrl_chans_demapper(timeslot_nr, ([0,0,2,2,2,2,6,6,6,6,0,0,12,12,12,12,16,16,16,16,0,0,22,22,22,22,26,26,26,26,0,0,32,32,32,32,36,36,36,36,0,0,42,42,42,42,46,46,46,46,0,]), ([0,0,1,1,1,1,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,7,7,7,7,7,7,7,7,0,0,7,7,7,7,7,7,7,7,0,0,135,135,135,135,135,135,135,135,0]), ([0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0,0,0,1,1,1,1,0,0,2,2,2,2,3,3,3,3,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0,0,0,1,1,1,1,0,0,2,2,2,2,3,3,3,3,0,0,2,2,2,2,3,3,3,3,0,]), ([0,0,0,0,0,0,6,6,6,6,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,37,41,41,41,41,0,0,47,47,47,47,]), ([7,7,7,7,0,0,135,135,135,135,135,135,135,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,0,0,7,7,7,7,]), ([0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,0,0,3,3,3,3,0,0,0,0,0,0,2,2,2,2,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,0,0,3,3,3,3,])) + + ################################################## + # Connections + ################################################## + self.msg_connect((self.gsm_universal_ctrl_chans_demapper_0, 'bursts'), (self, 'bursts')) + self.msg_connect((self, 'bursts'), (self.gsm_universal_ctrl_chans_demapper_0, 'bursts')) + + def get_timeslot_nr(self): + return self.timeslot_nr + + def set_timeslot_nr(self, timeslot_nr): + self.timeslot_nr = timeslot_nr diff --git a/python/demapping/gsm_sdcch8_demapper.py b/python/demapping/gsm_sdcch8_demapper.py new file mode 100644 index 0000000..e69d277 --- /dev/null +++ b/python/demapping/gsm_sdcch8_demapper.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +################################################## +# GNU Radio Python Flow Graph +# Title: SDCCH/8 demapper +# Author: Piotr Krysik +# Description: Demapper for SDCCH/8 + SACCH/C8 control channels. This corresponds to channel combination vii specified in GSM 05.02, section 6.4 +# Generated: Fri May 20 12:12:04 2016 +################################################## + +from gnuradio import gr +from gnuradio.filter import firdes +import grgsm + + +class gsm_sdcch8_demapper(grgsm.hier_block): + + def __init__(self, timeslot_nr=1): + grgsm.hier_block.__init__( + self, "SDCCH/8 demapper", + gr.io_signature(0, 0, 0), + gr.io_signature(0, 0, 0), + ) + self.message_port_register_hier_in("bursts") + self.message_port_register_hier_out("bursts") + + ################################################## + # Parameters + ################################################## + self.timeslot_nr = timeslot_nr + + ################################################## + # Blocks + ################################################## + self.gsm_universal_ctrl_chans_demapper_0 = grgsm.universal_ctrl_chans_demapper(timeslot_nr, ([0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12,16,16,16,16,20,20,20,20,24,24,24,24,28,28,28,28,32,32,32,32,36,36,36,36,40,40,40,40,44,44,44,44,0,0,0]), ([0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,0,0,0]), ([0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,0,0,0,]), ([136,136,136,136,136,136,136,136,136,136,136,136,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,136,136,136,136]), ([1,1,1,1,2,2,2,2,3,3,3,3,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,0,0,0,0,5,5,5,5,6,6,6,6,7,7,7,7,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,4,4,4,4]), ([1,1,1,1,2,2,2,2,3,3,3,3,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,0,0,0,0,5,5,5,5,6,6,6,6,7,7,7,7,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,4,4,4,4,])) + + ################################################## + # Connections + ################################################## + self.msg_connect((self.gsm_universal_ctrl_chans_demapper_0, 'bursts'), (self, 'bursts')) + self.msg_connect((self, 'bursts'), (self.gsm_universal_ctrl_chans_demapper_0, 'bursts')) + + def get_timeslot_nr(self): + return self.timeslot_nr + + def set_timeslot_nr(self, timeslot_nr): + self.timeslot_nr = timeslot_nr |