コード例 #1
0
    def test_003_t (self):
        """ two states, random switching """
        n_bytes = 10000
        ber = (0, 0.5)
        trans_matrix = (0.5, 0.5,
                        0.5, 0.5)
        src = gr.glfsr_source_b(32)  # Create some pseudo-random bits
        head = gr.head(1, n_bytes)
        chan = cc.markovchan_bb(ber, trans_matrix, 8)
        ber = cc.ber_b(8)
        sink_state = gr.vector_sink_i()

        self.tb.connect(src, head, chan, (ber, 0))
        self.tb.connect(head, (ber, 1))
        self.tb.connect((chan, 1), sink_state)
        self.tb.run ()

        n_times_in_state_1 = np.sum(sink_state.data())
        print "\nNumber of times in state 1 = " + str(n_times_in_state_1)
        print "            Expected value = " + str(n_bytes/2)
        self.assertTrue(n_times_in_state_1 > 3500 and n_times_in_state_1 < 6500,
                 "Due to the statistical nature of the bsc, this can actually fail (though very unlikely). Try again.")
        print "  Measured BER = " + str(ber.ber())
        print "Expected value = 0.25"
        self.assertTrue(abs(ber.ber()- 0.25) < 0.05,
                 msg="Due to the statistical nature of the bsc, this can actually fail (though very unlikely). Try again.")
コード例 #2
0
    def test_stream_interleaving_symbols(self):
        n_rows = 32
        n_cols = 128
        src = gr.glfsr_source_b(32)
        head = gr.head(gr.sizeof_char, n_rows * n_cols * 3)
        interleaver = cc.blockinterleaver_bb(n_rows, n_cols)
        deinterleaver = cc.blockdeinterleaver_bb(n_rows, n_cols)
        ber = cc.ber_b(8)

        self.tb.connect(src, head, interleaver, deinterleaver, ber)
        self.tb.connect(head, (ber, 1))
        self.tb.run()
        self.assertEqual(ber.ber(), 0)
コード例 #3
0
    def test_stream_interleaving_symbols(self):
        n_rows = 32
        n_cols = 128
        src = gr.glfsr_source_b(32)
        head = gr.head(gr.sizeof_char, n_rows * n_cols * 3)
        interleaver = cc.blockinterleaver_bb(n_rows, n_cols)
        deinterleaver = cc.blockdeinterleaver_bb(n_rows, n_cols)
        ber = cc.ber_b(8)

        self.tb.connect(src, head, interleaver, deinterleaver, ber)
        self.tb.connect(head, (ber, 1))
        self.tb.run()
        self.assertEqual(ber.ber(), 0)
コード例 #4
0
    def test_002_packeddata (self):
        """ Pack 4 bits into a byte and run the check again """
        src1 = gr.vector_source_b((0b1111, 0b1111, 0b1111))
        src2 = gr.vector_source_b((0b1111, 0b1111, 0b1110))
        ber = chancoding.ber_b(4)
        sink = gr.vector_sink_f()

        self.tb.connect(src1, (ber, 0))
        self.tb.connect(src2, (ber, 1))
        self.tb.connect(ber, sink)
        self.tb.run()

        self.assertAlmostEqual(ber.ber(), 1./12)
        self.assertEqual(ber.bit_errors(), 1)
        self.assertFloatTuplesAlmostEqual(sink.data(), (0,0,1./12), 8)
コード例 #5
0
    def test_001_berout (self):
        """ Check the float output and the ber() function with unpacked data """
        src1 = gr.vector_source_b((1,1,1,1,1,1,1,1,1,1))
        src2 = gr.vector_source_b((1,1,1,1,1,1,1,1,1,0))
        ber = chancoding.ber_b()
        sink = gr.vector_sink_f()

        self.tb.connect(src1, (ber, 0))
        self.tb.connect(src2, (ber, 1))
        self.tb.connect(ber, sink)
        self.tb.run()

        self.assertAlmostEqual(ber.ber(), 0.1)
        self.assertEqual(ber.bit_errors(), 1)
        self.assertFloatTuplesAlmostEqual(sink.data(), (0,0,0,0,0,0,0,0,0,0.1), 8)
コード例 #6
0
    def test_002_packeddata(self):
        """ Pack 4 bits into a byte and run the check again """
        src1 = gr.vector_source_b((0b1111, 0b1111, 0b1111))
        src2 = gr.vector_source_b((0b1111, 0b1111, 0b1110))
        ber = chancoding.ber_b(4)
        sink = gr.vector_sink_f()

        self.tb.connect(src1, (ber, 0))
        self.tb.connect(src2, (ber, 1))
        self.tb.connect(ber, sink)
        self.tb.run()

        self.assertAlmostEqual(ber.ber(), 1. / 12)
        self.assertEqual(ber.bit_errors(), 1)
        self.assertFloatTuplesAlmostEqual(sink.data(), (0, 0, 1. / 12), 8)
コード例 #7
0
    def test_001_berout(self):
        """ Check the float output and the ber() function with unpacked data """
        src1 = gr.vector_source_b((1, 1, 1, 1, 1, 1, 1, 1, 1, 1))
        src2 = gr.vector_source_b((1, 1, 1, 1, 1, 1, 1, 1, 1, 0))
        ber = chancoding.ber_b()
        sink = gr.vector_sink_f()

        self.tb.connect(src1, (ber, 0))
        self.tb.connect(src2, (ber, 1))
        self.tb.connect(ber, sink)
        self.tb.run()

        self.assertAlmostEqual(ber.ber(), 0.1)
        self.assertEqual(ber.bit_errors(), 1)
        self.assertFloatTuplesAlmostEqual(sink.data(),
                                          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1), 8)
コード例 #8
0
    def test_002_t (self):
        """ two state: one errorless, and the other can never be reached """
        n_bytes = 10000
        ber = (0, 0.5)
        trans_matrix = (1.0, 0.0,
                        1.0, 0.0)

        src = gr.glfsr_source_b(32)  # Create some pseudo-random bits
        head = gr.head(1, n_bytes)
        chan = cc.markovchan_bb(ber, trans_matrix, 8)
        ber = cc.ber_b(8)
        sink_state = gr.vector_sink_i()

        self.tb.connect(src, head, chan, (ber, 0))
        self.tb.connect(head, (ber, 1))
        self.tb.connect((chan, 1), sink_state)
        self.tb.run ()

        self.assertEqual(ber.ber(), 0)
        self.assertEqual(sink_state.data(), (0,) * n_bytes, "State was not always 0!")