diff options
author | Martin Braun <martin.braun@kit.edu> | 2013-11-02 16:01:46 +0100 |
---|---|---|
committer | Martin Braun <martin.braun@kit.edu> | 2013-11-03 19:20:56 +0100 |
commit | 909251e6082c83a3211369a494152199bbaef00a (patch) | |
tree | c2794ae7fe2f9280a7ce81576612daf5f03f9621 | |
parent | a4225692e6f3db974dcbda9d93ede13a561029a6 (diff) |
digital: OFDM Tx hier block preserves head tag position
-rw-r--r-- | gr-digital/python/digital/ofdm_txrx.py | 27 | ||||
-rwxr-xr-x | gr-digital/python/digital/qa_ofdm_txrx.py | 28 |
2 files changed, 37 insertions, 18 deletions
diff --git a/gr-digital/python/digital/ofdm_txrx.py b/gr-digital/python/digital/ofdm_txrx.py index 06e375e3d6..b04c42cbfa 100644 --- a/gr-digital/python/digital/ofdm_txrx.py +++ b/gr-digital/python/digital/ofdm_txrx.py @@ -194,7 +194,11 @@ class ofdm_tx(gr.hier_block2): scramble_header=scramble_bits ) header_gen = digital.packet_headergenerator_bb(formatter_object.base(), self.packet_length_tag_key) - header_payload_mux = blocks.tagged_stream_mux(gr.sizeof_gr_complex*1, self.packet_length_tag_key) + header_payload_mux = blocks.tagged_stream_mux( + itemsize=gr.sizeof_gr_complex*1, + lengthtagname=self.packet_length_tag_key, + tag_preserve_head_pos=1 # Head tags on the payload stream stay on the head + ) self.connect( self, crc, @@ -212,17 +216,18 @@ class ofdm_tx(gr.hier_block2): self.scramble_seed, 7, 0, # Don't reset after fixed length (let the reset tag do that) - bits_per_byte=bps_payload, + bits_per_byte=8, # This is before unpacking reset_tag_key=self.packet_length_tag_key ) + payload_unpack = blocks.repack_bits_bb( + 8, # Unpack 8 bits per byte + bps_payload, + self.packet_length_tag_key + ) self.connect( crc, payload_scrambler, - blocks.repack_bits_bb( - 8, # Unpack 8 bits per byte - bps_payload, - self.packet_length_tag_key - ), + payload_unpack, payload_mod, (header_payload_mux, 1) ) @@ -418,10 +423,10 @@ class ofdm_rx(gr.hier_block2): self.scramble_seed, 7, 0, # Don't reset after fixed length - bits_per_byte=bps_payload, + bits_per_byte=8, # This is after packing reset_tag_key=self.packet_length_tag_key ) - repack = blocks.repack_bits_bb(bps_payload, 8, self.packet_length_tag_key, True) + payload_pack = blocks.repack_bits_bb(bps_payload, 8, self.packet_length_tag_key, True) self.crc = digital.crc32_bb(True, self.packet_length_tag_key) self.connect( (hpd, 1), @@ -429,7 +434,7 @@ class ofdm_rx(gr.hier_block2): payload_eq, payload_serializer, payload_demod, - repack, + payload_pack, self.payload_descrambler, self.crc, self @@ -440,7 +445,7 @@ class ofdm_rx(gr.hier_block2): self.connect(payload_eq, blocks.file_sink(gr.sizeof_gr_complex*fft_len, 'post-payload-eq.dat')) self.connect(payload_serializer, blocks.file_sink(gr.sizeof_gr_complex, 'post-payload-serializer.dat')) self.connect(payload_demod, blocks.file_sink(1, 'post-payload-demod.dat')) - self.connect(repack, blocks.file_sink(1, 'post-payload-repack.dat')) + self.connect(payload_pack, blocks.file_sink(1, 'post-payload-pack.dat')) self.connect(crc, blocks.file_sink(1, 'post-payload-crc.dat')) diff --git a/gr-digital/python/digital/qa_ofdm_txrx.py b/gr-digital/python/digital/qa_ofdm_txrx.py index 6f5bd2ed10..ac267d2389 100755 --- a/gr-digital/python/digital/qa_ofdm_txrx.py +++ b/gr-digital/python/digital/qa_ofdm_txrx.py @@ -23,7 +23,11 @@ import random import numpy -from gnuradio import gr, gr_unittest, digital, blocks, channels +import pmt +from gnuradio import gr, gr_unittest +from gnuradio import digital +from gnuradio import blocks +from gnuradio import channels from gnuradio.digital.ofdm_txrx import ofdm_tx, ofdm_rx from gnuradio.digital.utils import tagged_streams @@ -31,10 +35,10 @@ from gnuradio.digital.utils import tagged_streams LOG_DEBUG_INFO=False class ofdm_tx_fg (gr.top_block): - def __init__(self, data, len_tag_key, scramble_bits=False): + def __init__(self, data, len_tag_key, scramble_bits=False, additional_tags=[]): gr.top_block.__init__(self, "ofdm_tx") tx_data, tags = tagged_streams.packets_to_vectors((data,), len_tag_key) - src = blocks.vector_source_b(data, False, 1, tags) + src = blocks.vector_source_b(data, False, 1, tags + additional_tags) self.tx = ofdm_tx(packet_length_tag_key=len_tag_key, debug_log=LOG_DEBUG_INFO, scramble_bits=scramble_bits) self.sink = blocks.vector_sink_c() self.connect(src, self.tx, self.sink) @@ -69,16 +73,26 @@ class test_ofdm_txrx (gr_unittest.TestCase): def test_001_tx (self): """ Just make sure the Tx works in general """ + # This tag gets put onto the first item of the transmit data, + # it should be transmitted first, too + timing_tag = gr.tag_t() + timing_tag.offset = 0 + timing_tag.key = pmt.string_to_symbol('tx_timing') + timing_tag.value = pmt.to_pmt('now') len_tag_key = 'frame_len' n_bytes = 52 n_samples_expected = (numpy.ceil(1.0 * (n_bytes + 4) / 6) + 3) * 80 test_data = [random.randint(0, 255) for x in range(n_bytes)] - tx_data, tags = tagged_streams.packets_to_vectors((test_data,), len_tag_key) - src = blocks.vector_source_b(test_data, False, 1, tags) - tx = ofdm_tx(packet_length_tag_key=len_tag_key) - tx_fg = ofdm_tx_fg(test_data, len_tag_key) + tx_fg = ofdm_tx_fg(test_data, len_tag_key, additional_tags=[timing_tag,]) tx_fg.run() self.assertEqual(len(tx_fg.get_tx_samples()), n_samples_expected) + tags_rx = [gr.tag_to_python(x) for x in tx_fg.sink.tags()] + tags_rx = sorted([(x.offset, x.key, x.value) for x in tags_rx]) + tags_expected = [ + (0, 'frame_len', n_samples_expected), + (0, 'tx_timing', 'now'), + ] + self.assertEqual(tags_rx, tags_expected) def test_002_rx_only_noise(self): """ Run the RX with only noise, check it doesn't crash |