summaryrefslogtreecommitdiff
path: root/gr-fec/python/fec/_qa_helper.py
diff options
context:
space:
mode:
Diffstat (limited to 'gr-fec/python/fec/_qa_helper.py')
-rwxr-xr-xgr-fec/python/fec/_qa_helper.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/gr-fec/python/fec/_qa_helper.py b/gr-fec/python/fec/_qa_helper.py
new file mode 100755
index 0000000000..8722453441
--- /dev/null
+++ b/gr-fec/python/fec/_qa_helper.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+#
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from gnuradio import blocks
+from gnuradio import gr
+import sys, numpy
+
+from extended_encoder import extended_encoder
+from extended_decoder import extended_decoder
+
+class map_bb(gr.sync_block):
+ def __init__(self, bitmap):
+ gr.sync_block.__init__(
+ self,
+ name = "map_bb",
+ in_sig = [numpy.int8],
+ out_sig = [numpy.int8])
+ self.bitmap = bitmap
+
+ def work(self, input_items, output_items):
+ output_items[0][:] = map(lambda x: self.bitmap[x], input_items[0])
+ return len(output_items[0])
+
+
+class _qa_helper(gr.top_block):
+
+ def __init__(self, data_size, enc, dec, threading):
+ gr.top_block.__init__(self, "_qa_helper")
+
+ self.puncpat = puncpat = '11'
+
+ self.enc = enc
+ self.dec = dec
+ self.data_size = data_size
+ self.threading = threading
+
+ self.ext_encoder = extended_encoder(enc, threading=self.threading, puncpat=self.puncpat)
+ self.ext_decoder= extended_decoder(dec, threading=self.threading, ann=None,
+ puncpat=self.puncpat, integration_period=10000)
+
+ self.src = blocks.vector_source_b(data_size*[0, 1, 2, 3, 5, 7, 9, 13, 15, 25, 31, 45, 63, 95, 127], False)
+ self.unpack = blocks.unpack_k_bits_bb(8)
+ self.map = map_bb([-1, 1])
+ self.to_float = blocks.char_to_float(1)
+ self.snk_input = blocks.vector_sink_b()
+ self.snk_output = blocks.vector_sink_b()
+
+ self.connect(self.src, self.unpack, self.ext_encoder)
+ self.connect(self.ext_encoder, self.map, self.to_float)
+ self.connect(self.to_float, self.ext_decoder)
+ self.connect(self.unpack, self.snk_input)
+ self.connect(self.ext_decoder, self.snk_output)
+
+if __name__ == '__main__':
+ frame_size = 30
+ enc = fec.dummy_encoder_make(frame_size*8)
+ #enc = fec.repetition_encoder_make(frame_size*8, 3)
+ dec = fec.dummy_decoder.make(frame_size*8)
+
+ tb = _qa_helper(10*frame_size, enc, dec, None)
+ tb.run()
+
+ errs = 0
+ for i,o in zip(tb.snk_input.data(), tb.snk_output.data()):
+ if i-o != 0:
+ errs += 1
+
+ if errs == 0:
+ print "Decoded properly"
+ else:
+ print "Problem Decoding"