diff options
-rw-r--r-- | grc/CMakeLists.txt | 1 | ||||
-rw-r--r-- | grc/gsm_block_tree.xml | 1 | ||||
-rw-r--r-- | grc/transmitter/CMakeLists.txt | 1 | ||||
-rw-r--r-- | grc/transmitter/gsm_gmsk_mod.xml | 47 | ||||
-rw-r--r-- | python/__init__.py | 1 | ||||
-rw-r--r-- | python/transmitter/gsm_gmsk_mod.py | 69 |
6 files changed, 120 insertions, 0 deletions
diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt index 045d6a5..26a91d5 100644 --- a/grc/CMakeLists.txt +++ b/grc/CMakeLists.txt @@ -24,6 +24,7 @@ add_subdirectory(receiver) add_subdirectory(flow_control) add_subdirectory(misc_utils) add_subdirectory(trx_interface) +add_subdirectory(transmitter) install(FILES gsm_block_tree.xml DESTINATION share/gnuradio/grc/blocks ) diff --git a/grc/gsm_block_tree.xml b/grc/gsm_block_tree.xml index 0ceec47..ac3670e 100644 --- a/grc/gsm_block_tree.xml +++ b/grc/gsm_block_tree.xml @@ -24,6 +24,7 @@ <cat> <name>Transmitter</name> <block>gsm_txtime_bursts_tagger</block> + <block>gsm_gmsk_mod</block> </cat> <cat> <name>Logical channels demapping</name> diff --git a/grc/transmitter/CMakeLists.txt b/grc/transmitter/CMakeLists.txt index e4f5c0b..c41f56a 100644 --- a/grc/transmitter/CMakeLists.txt +++ b/grc/transmitter/CMakeLists.txt @@ -18,5 +18,6 @@ # Boston, MA 02110-1301, USA. install(FILES + gsm_gmsk_mod.xml gsm_txtime_bursts_tagger.xml DESTINATION share/gnuradio/grc/blocks ) diff --git a/grc/transmitter/gsm_gmsk_mod.xml b/grc/transmitter/gsm_gmsk_mod.xml new file mode 100644 index 0000000..4aad01b --- /dev/null +++ b/grc/transmitter/gsm_gmsk_mod.xml @@ -0,0 +1,47 @@ +<block> + <name>GMSK Modulator for GSM</name> + <key>gsm_gmsk_mod</key> + <import>from grgsm import gsm_gmsk_mod</import> + <make>gsm_gmsk_mod( + BT=$BT, + pulse_duration=$pulse_duration, + sps=$sps, +)</make> + <callback>set_BT($BT)</callback> + <callback>set_pulse_duration($pulse_duration)</callback> + <callback>set_sps($sps)</callback> + <param> + <name>3 dB Time-Bandwidth Product</name> + <key>BT</key> + <value>4</value> + <type>raw</type> + </param> + <param> + <name>Pulse Duration</name> + <key>pulse_duration</key> + <value>4</value> + <type>raw</type> + </param> + <param> + <name>Samples/Symbol</name> + <key>sps</key> + <value>4</value> + <type>raw</type> + </param> + <sink> + <name>in</name> + <type>byte</type> + <vlen>1</vlen> + <optional>1</optional> + </sink> + <source> + <name>out</name> + <type>complex</type> + <vlen>1</vlen> + <optional>1</optional> + </source> + <doc>Piotr Krysik +GMSK Modulator for GSM + </doc> + <grc_source>gr-gsm/hier_blocks/transmitter/gsm_gmsk_mod.grc</grc_source> +</block> diff --git a/python/__init__.py b/python/__init__.py index f29e154..9e99e72 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -55,6 +55,7 @@ from gsm_input import gsm_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 +from gsm_gmsk_mod import gsm_gmsk_mod from fn_time import * from txtime_bursts_tagger import * #from ctrl_if import * diff --git a/python/transmitter/gsm_gmsk_mod.py b/python/transmitter/gsm_gmsk_mod.py new file mode 100644 index 0000000..e8ecc7a --- /dev/null +++ b/python/transmitter/gsm_gmsk_mod.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +################################################## +# GNU Radio Python Flow Graph +# Title: GMSK Modulator for GSM +# Author: Piotr Krysik +# Description: GMSK Modulator for GSM +# Generated: Wed Sep 20 21:12:04 2017 +################################################## + +from gnuradio import blocks +from gnuradio import digital +from gnuradio import gr +from gnuradio.analog import cpm +from gnuradio.filter import firdes +import grgsm + +class gsm_gmsk_mod(grgsm.hier_block): + + def __init__(self, BT=4, pulse_duration=4, sps=4): + gr.hier_block2.__init__( + self, "GMSK Modulator for GSM", + gr.io_signature(1, 1, gr.sizeof_char*1), + gr.io_signature(1, 1, gr.sizeof_gr_complex*1), + ) + + ################################################## + # Parameters + ################################################## + self.BT = BT + self.pulse_duration = pulse_duration + self.sps = sps + + ################################################## + # Blocks + ################################################## + self.digital_gmskmod_bc_0 = digital.gmskmod_bc(sps, pulse_duration, BT) + self.digital_diff_decoder_bb_0 = digital.diff_decoder_bb(2) + self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bf(([1,-1]), 1) + self.blocks_tagged_stream_multiply_length_0 = blocks.tagged_stream_multiply_length(gr.sizeof_gr_complex*1, "packet_len", sps) + self.blocks_float_to_char_0 = blocks.float_to_char(1, 1) + + ################################################## + # Connections + ################################################## + self.connect((self.blocks_float_to_char_0, 0), (self.digital_gmskmod_bc_0, 0)) + self.connect((self.blocks_tagged_stream_multiply_length_0, 0), (self, 0)) + self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_float_to_char_0, 0)) + self.connect((self.digital_diff_decoder_bb_0, 0), (self.digital_chunks_to_symbols_xx_0, 0)) + self.connect((self.digital_gmskmod_bc_0, 0), (self.blocks_tagged_stream_multiply_length_0, 0)) + self.connect((self, 0), (self.digital_diff_decoder_bb_0, 0)) + + def get_BT(self): + return self.BT + + def set_BT(self, BT): + self.BT = BT + + def get_pulse_duration(self): + return self.pulse_duration + + def set_pulse_duration(self, pulse_duration): + self.pulse_duration = pulse_duration + + def get_sps(self): + return self.sps + + def set_sps(self, sps): + self.sps = sps + self.blocks_tagged_stream_multiply_length_0.set_scalar(self.sps) |