Ejemplo n.º 1
0
    def test_003_small_frame_mod(self):
        num_frames = 300
        total_subcarriers = 8
        used_subcarriers = 4
        channel_map = np.array(
            (0, 0, 1, 1, 1, 1, 0,
             0))  #ft.get_channel_map(used_subcarriers, total_subcarriers)
        payload_symbols = 8
        overlap = 4
        taps = ft.generate_phydyas_filter(total_subcarriers, overlap)

        preamble = ft.get_preamble(total_subcarriers)
        num_preamble_symbols = len(preamble) // total_subcarriers
        payload = ft.get_payload(payload_symbols, used_subcarriers)
        payload = np.tile(payload, num_frames).flatten()

        src = blocks.vector_source_b(payload, repeat=False)
        framer = fbmc.frame_generator_bvc(used_subcarriers, total_subcarriers,
                                          payload_symbols, overlap,
                                          channel_map, preamble)
        snk_frame = blocks.vector_sink_c(total_subcarriers)  # a debug output

        mod = fbmc.tx_sdft_vcc(taps, total_subcarriers)
        demod = fbmc.rx_sdft_cvc(taps, total_subcarriers)
        skipper = blocks.skiphead(8 * total_subcarriers, 4)

        snk_rx = blocks.vector_sink_c(total_subcarriers)
        deframer = fbmc.deframer_vcb(used_subcarriers, total_subcarriers,
                                     num_preamble_symbols, payload_symbols,
                                     overlap, channel_map)
        snk = blocks.vector_sink_b(1)
        self.tb.connect(src, framer, mod, demod, skipper, deframer, snk)
        self.tb.connect(framer, snk_frame)
        self.tb.connect(skipper, snk_rx)
        self.tb.run()

        res = np.array(snk.data())
        print "len(res) = ", len(res), ", len(payload) = ", len(payload)
        print "ref: ", payload
        print "res: ", res

        moddata = np.array(snk_frame.data())
        print "len(moddata) = ", len(moddata)
        rxdata = np.array(snk_rx.data())
        print "len(rxdata) = ", len(
            rxdata), " diff: ", len(moddata) - len(rxdata)

        # plt.plot(rxdata.real * 0.03)
        # for i in range(len(moddata)):
        #     if (i + 1) % total_subcarriers == 0:
        #         plt.axvline(i)
        # plt.plot(moddata.real)
        # plt.grid()
        # plt.show()

        print "len(payload) = ", len(payload)
        print "len(result ) = ", len(res)

        self.assertTupleEqual(tuple(payload[:len(res)]), tuple(res))
Ejemplo n.º 2
0
    def test_004_config_frame_mod(self):
        num_frames = 10
        cfg = fbmc.fbmc_config(num_used_subcarriers=20, num_payload_sym=16, num_overlap_sym=4, modulation="QPSK",
                                    preamble="IAM", samp_rate=250000)
        total_subcarriers = cfg.num_total_subcarriers()  # 8
        used_subcarriers = cfg.num_used_subcarriers()  # 4
        channel_map = cfg.channel_map()  # ft.get_channel_map(used_subcarriers, total_subcarriers)
        payload_symbols = cfg.num_payload_sym()  # 8
        overlap = cfg.num_overlap_sym()  # 4
        taps = cfg.phydyas_impulse_taps(cfg.num_total_subcarriers(), cfg.num_overlap_sym())  # ft.generate_phydyas_filter(total_subcarriers, overlap)

        preamble = ft.get_preamble(total_subcarriers)
        num_preamble_symbols = len(preamble) // total_subcarriers
        payload = ft.get_payload(payload_symbols, used_subcarriers)
        payload = np.tile(payload, num_frames).flatten()

        src = blocks.vector_source_b(payload, repeat=False)
        framer = fbmc.frame_generator_bvc(used_subcarriers, total_subcarriers, payload_symbols, overlap, channel_map, preamble)
        snk_frame = blocks.vector_sink_c(total_subcarriers)  # a debug output

        mod = fbmc.tx_sdft_vcc(taps, total_subcarriers)
        demod = fbmc.rx_sdft_cvc(taps, total_subcarriers)
        skipper = blocks.skiphead(8 * total_subcarriers, 4)

        snk_rx = blocks.vector_sink_c(total_subcarriers)
        deframer = fbmc.deframer_vcb(used_subcarriers, total_subcarriers, num_preamble_symbols, payload_symbols, overlap, channel_map)
        snk = blocks.vector_sink_b(1)
        self.tb.connect(src, framer, mod, demod, skipper, deframer, snk)
        self.tb.connect(framer, snk_frame)
        self.tb.connect(skipper, snk_rx)
        self.tb.run()

        res = np.array(snk.data())
        print res
        print payload

        moddata = np.array(snk_frame.data())
        print "len(moddata) = ", len(moddata)
        rxdata = np.array(snk_rx.data())
        print "len(rxdata) = ", len(rxdata)

        # plt.plot(rxdata.real * 0.03)
        # for i in range(len(moddata)):
        #     if (i + 1) % total_subcarriers == 0:
        #         plt.axvline(i)
        # plt.plot(moddata.real)
        # plt.grid()
        # plt.show()

        print "len(payload) = ", len(payload)
        print "len(result)  = ", len(res)

        self.assertTupleEqual(tuple(payload[:len(res)]), tuple(res))
Ejemplo n.º 3
0
    def test_003_small_frame_mod(self):
        num_frames = 300
        total_subcarriers = 8
        used_subcarriers = 4
        channel_map = np.array((0, 0, 1, 1, 1, 1, 0, 0)) #ft.get_channel_map(used_subcarriers, total_subcarriers)
        payload_symbols = 8
        overlap = 4
        taps = ft.generate_phydyas_filter(total_subcarriers, overlap)

        preamble = ft.get_preamble(total_subcarriers)
        num_preamble_symbols = len(preamble) // total_subcarriers
        payload = ft.get_payload(payload_symbols, used_subcarriers)
        payload = np.tile(payload, num_frames).flatten()


        src = blocks.vector_source_b(payload, repeat=False)
        framer = fbmc.frame_generator_bvc(used_subcarriers, total_subcarriers, payload_symbols, overlap, channel_map, preamble)
        snk_frame = blocks.vector_sink_c(total_subcarriers)  # a debug output

        mod = fbmc.tx_sdft_vcc(taps, total_subcarriers)
        demod = fbmc.rx_sdft_cvc(taps, total_subcarriers)
        skipper = blocks.skiphead(8 * total_subcarriers, 4)

        snk_rx = blocks.vector_sink_c(total_subcarriers)
        deframer = fbmc.deframer_vcb(used_subcarriers, total_subcarriers, num_preamble_symbols, payload_symbols, overlap, channel_map)
        snk = blocks.vector_sink_b(1)
        self.tb.connect(src, framer, mod, demod, skipper, deframer, snk)
        self.tb.connect(framer, snk_frame)
        self.tb.connect(skipper, snk_rx)
        self.tb.run()

        res = np.array(snk.data())
        print "len(res) = ", len(res), ", len(payload) = ", len(payload)
        print "ref: ", payload
        print "res: ", res

        moddata = np.array(snk_frame.data())
        print "len(moddata) = ", len(moddata)
        rxdata = np.array(snk_rx.data())
        print "len(rxdata) = ", len(rxdata), " diff: ", len(moddata) - len(rxdata)

        # plt.plot(rxdata.real * 0.03)
        # for i in range(len(moddata)):
        #     if (i + 1) % total_subcarriers == 0:
        #         plt.axvline(i)
        # plt.plot(moddata.real)
        # plt.grid()
        # plt.show()

        print "len(payload) = ", len(payload)
        print "len(result ) = ", len(res)

        self.assertTupleEqual(tuple(payload[:len(res)]), tuple(res))
Ejemplo n.º 4
0
 def test_001_setUp(self):
     print "test_001_setUp"
     # test if flowgraph is set up as expected!
     # does not throw any runtime errors unexpectedly!
     overlap = 4
     L = 4
     taps = np.ones(overlap * L, dtype=float)
     taps = np.append(taps, [0.0, ])
     phydyas = fbmc.rx_sdft_cvc(taps, L)
     print "overlap: ", phydyas.overlap()
     print "L: ", phydyas.L()
     assert phydyas.overlap() == overlap
     assert phydyas.L() == L
Ejemplo n.º 5
0
 def test_001_setUp(self):
     print "test_001_setUp"
     # test if flowgraph is set up as expected!
     # does not throw any runtime errors unexpectedly!
     overlap = 4
     L = 4
     taps = np.ones(overlap * L, dtype=float)
     taps = np.append(taps, [
         0.0,
     ])
     phydyas = fbmc.rx_sdft_cvc(taps, L)
     print "overlap: ", phydyas.overlap()
     print "L: ", phydyas.L()
     assert phydyas.overlap() == overlap
     assert phydyas.L() == L
Ejemplo n.º 6
0
    def test_005_legacy(self):
        print "\ntest_005_legacy"
        # test if flowgraph is set up as expected!
        multiple = 9
        overlap = 4
        L = 32
        taps = ft.generate_phydyas_filter(L, overlap)
        data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex)

        # instatiated blocks and flowgraph
        phydyas = fbmc.rx_sdft_cvc(taps, L)
        pfb = fbmc.rx_polyphase_cvc(taps, L)
        print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap()
        src = blocks.vector_source_c(data, vlen=1)
        snk0 = blocks.vector_sink_c(L)
        snk1 = blocks.vector_sink_c(L)
        tb = gr.top_block()
        tb.connect(src, phydyas, snk0)
        tb.connect(src, pfb, snk1)

        # run fg and get results
        tb.run()
        res0 = np.array(snk0.data())
        res1 = np.array(snk1.data())

        ref = self.get_reference_output(data, taps, L, overlap, multiple)

        ftref = ft.rx(data[:-L // 2], taps, L)
        print "\nFBMC blocks"
        print ftref

        lcut = 2
        rcut = 5
        print "\nGR blocks"
        print res0[lcut * L:-rcut * L].reshape((-1, L)).T

        print "\nIOTA blocks"
        print res1[8 * L:].reshape((-1, L)).T

        ftref = ftref.T
        ftref = ftref.flatten()
        self.assertComplexTuplesAlmostEqual(ftref, res0[lcut * L:-rcut * L], 3)
        self.assertComplexTuplesAlmostEqual(ftref, res1[8 * L:], 3)
Ejemplo n.º 7
0
    def test_005_legacy(self):
        print "\ntest_005_legacy"
    # test if flowgraph is set up as expected!
        multiple = 9
        overlap = 4
        L = 32
        taps = ft.generate_phydyas_filter(L, overlap)
        data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex)

        # instatiated blocks and flowgraph
        phydyas = fbmc.rx_sdft_cvc(taps, L)
        pfb = fbmc.rx_polyphase_cvc(taps, L)
        print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap()
        src = blocks.vector_source_c(data, vlen=1)
        snk0 = blocks.vector_sink_c(L)
        snk1 = blocks.vector_sink_c(L)
        tb = gr.top_block()
        tb.connect(src, phydyas, snk0)
        tb.connect(src, pfb, snk1)

        # run fg and get results
        tb.run()
        res0 = np.array(snk0.data())
        res1 = np.array(snk1.data())

        ref = self.get_reference_output(data, taps, L, overlap, multiple)

        ftref = ft.rx(data[: -L // 2], taps, L)
        print "\nFBMC blocks"
        print ftref

        lcut = 2
        rcut = 5
        print "\nGR blocks"
        print res0[lcut * L: -rcut * L].reshape((-1, L)).T

        print "\nIOTA blocks"
        print res1[8 * L:].reshape((-1, L)).T

        ftref = ftref.T
        ftref = ftref.flatten()
        self.assertComplexTuplesAlmostEqual(ftref, res0[lcut * L: -rcut * L], 3)
        self.assertComplexTuplesAlmostEqual(ftref, res1[8 * L:], 3)
Ejemplo n.º 8
0
    def test_003_filter(self):
        print "\ntest003_filter"
        multiple = 9
        overlap = 2
        L = 4
        taps = np.append([
            0.0,
        ], np.ones(overlap * L - 1, dtype=float))
        taps = np.append(taps, [
            0.0,
        ])
        data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex)
        print "len(data) = ", len(data)
        print taps
        print data

        # instatiated blocks and flowgraph
        phydyas = fbmc.rx_sdft_cvc(taps, L)
        print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap(
        ), ", history() = ", phydyas.history()
        src = blocks.vector_source_c(data, vlen=1)
        snk = blocks.vector_sink_c(L)
        tb = gr.top_block()
        tb.connect(src, phydyas, snk)

        # run fg and get results
        tb.run()
        res = np.array(snk.data())
        print "len(res) = ", len(res)

        ref = self.get_reference_output(data, taps, L, overlap, multiple)

        ftref = ft.rx(data[:-L // 2], taps, L)
        print "\nFBMC blocks"
        print ftref
        print "\nGR blocks"
        print res.reshape((-1, L)).T

        ftref = ftref.T
        ftref = ftref.flatten()
        self.assertComplexTuplesAlmostEqual(ftref, res[2 * L:-L])
Ejemplo n.º 9
0
    def test_002_modulation(self):
        total_subcarriers = 8
        overlap = 4
        taps = ft.generate_phydyas_filter(total_subcarriers, overlap)

        zvals = np.zeros(overlap * total_subcarriers, dtype=complex)
        rvals = np.arange(1, total_subcarriers + 1, dtype=complex)
        dummy_frame = np.concatenate((zvals, rvals))

        data = np.tile(dummy_frame, 4).flatten()


        src = blocks.vector_source_c(data, repeat=False, vlen=total_subcarriers)
        mod = fbmc.tx_sdft_vcc(taps, total_subcarriers)
        demod = fbmc.rx_sdft_cvc(taps, total_subcarriers)
        snk = blocks.vector_sink_c(total_subcarriers)

        self.tb.connect(src, mod, demod, snk)
        self.tb.run()

        res = np.array(snk.data())
Ejemplo n.º 10
0
    def test_004_phydyas_taps(self):
        print "\ntest_004_phydyas_taps"
        # test if flowgraph is set up as expected!
        multiple = 9
        overlap = 4
        L = 32
        taps = ft.generate_phydyas_filter(L, overlap)
        # taps = np.append([0.0, ], np.ones(overlap * L - 1, dtype=float))
        # taps = np.append(taps, [0.0, ])
        data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex)

        # instatiated blocks and flowgraph
        phydyas = fbmc.rx_sdft_cvc(taps, L)
        print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap()
        src = blocks.vector_source_c(data, vlen=1)
        snk = blocks.vector_sink_c(L)
        tb = gr.top_block()
        tb.connect(src, phydyas, snk)

        # run fg and get results
        tb.run()
        res = np.array(snk.data())

        ref = self.get_reference_output(data, taps, L, overlap, multiple)

        ftref = ft.rx(data[:-L // 2], taps, L)
        print "\nFBMC blocks"
        print np.shape(ftref)
        print ftref

        lcut = 2
        rcut = 5
        print "\nGR blocks"
        print np.shape(res)
        print res[lcut * L:-rcut * L].reshape((-1, L)).T
        # print res.reshape((-1, L)).T

        ftref = ftref.T
        ftref = ftref.flatten()
        self.assertComplexTuplesAlmostEqual(ftref, res[lcut * L:-rcut * L], 3)
Ejemplo n.º 11
0
    def test_004_phydyas_taps(self):
        print "\ntest_004_phydyas_taps"
    # test if flowgraph is set up as expected!
        multiple = 9
        overlap = 4
        L = 32
        taps = ft.generate_phydyas_filter(L, overlap)
        # taps = np.append([0.0, ], np.ones(overlap * L - 1, dtype=float))
        # taps = np.append(taps, [0.0, ])
        data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex)

        # instatiated blocks and flowgraph
        phydyas = fbmc.rx_sdft_cvc(taps, L)
        print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap()
        src = blocks.vector_source_c(data, vlen=1)
        snk = blocks.vector_sink_c(L)
        tb = gr.top_block()
        tb.connect(src, phydyas, snk)

        # run fg and get results
        tb.run()
        res = np.array(snk.data())

        ref = self.get_reference_output(data, taps, L, overlap, multiple)

        ftref = ft.rx(data[: -L // 2], taps, L)
        print "\nFBMC blocks"
        print np.shape(ftref)
        print ftref

        lcut = 2
        rcut = 5
        print "\nGR blocks"
        print np.shape(res)
        print res[lcut * L: -rcut * L].reshape((-1, L)).T
        # print res.reshape((-1, L)).T

        ftref = ftref.T
        ftref = ftref.flatten()
        self.assertComplexTuplesAlmostEqual(ftref, res[lcut * L: -rcut * L], 3)
Ejemplo n.º 12
0
    def test_002_modulation(self):
        total_subcarriers = 8
        overlap = 4
        taps = ft.generate_phydyas_filter(total_subcarriers, overlap)

        zvals = np.zeros(overlap * total_subcarriers, dtype=complex)
        rvals = np.arange(1, total_subcarriers + 1, dtype=complex)
        dummy_frame = np.concatenate((zvals, rvals))

        data = np.tile(dummy_frame, 4).flatten()

        src = blocks.vector_source_c(data,
                                     repeat=False,
                                     vlen=total_subcarriers)
        mod = fbmc.tx_sdft_vcc(taps, total_subcarriers)
        demod = fbmc.rx_sdft_cvc(taps, total_subcarriers)
        snk = blocks.vector_sink_c(total_subcarriers)

        self.tb.connect(src, mod, demod, snk)
        self.tb.run()

        res = np.array(snk.data())
Ejemplo n.º 13
0
    def test_002_buffers(self):
        print "\ntest002_buffers"
        # test if fg runs as expected on a minimum example!
        multiple = 5
        overlap = 1  # must be 1 in this test!
        L = 4
        taps = np.array([0, 1, 2, 1])  #  np.ones(overlap * L, dtype=float)
        taps = np.append(taps, [
            0.0,
        ])
        data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex)

        # set Up flowgraph
        phydyas = fbmc.rx_sdft_cvc(taps, L)
        print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap()
        src = blocks.vector_source_c(data, vlen=1)
        snk = blocks.vector_sink_c(L)
        tb = gr.top_block()
        tb.connect(src, phydyas, snk)

        # run fg and get results
        tb.run()
        res = np.array(snk.data())

        # check results
        ref = self.get_reference_output(data, taps, L, overlap, multiple)
        print "\nJohannes test"
        print ref.reshape((-1, L)).T

        ftref = ft.rx(data[:-L // 2], taps, L)

        print "\nFBMC blocks"
        print ftref
        print "\nGR blocks"
        print res.reshape((-1, L)).T

        ftref = ftref.T
        self.assertComplexTuplesAlmostEqual(ftref.flatten(),
                                            res.flatten()[2 * L:])
Ejemplo n.º 14
0
    def test_003_filter(self):
        print "\ntest003_filter"
        multiple = 9
        overlap = 2
        L = 4
        taps = np.append([0.0, ], np.ones(overlap * L - 1, dtype=float))
        taps = np.append(taps, [0.0, ])
        data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex)
        print "len(data) = ", len(data)
        print taps
        print data

        # instatiated blocks and flowgraph
        phydyas = fbmc.rx_sdft_cvc(taps, L)
        print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap(), ", history() = ", phydyas.history()
        src = blocks.vector_source_c(data, vlen=1)
        snk = blocks.vector_sink_c(L)
        tb = gr.top_block()
        tb.connect(src, phydyas, snk)

        # run fg and get results
        tb.run()
        res = np.array(snk.data())
        print "len(res) = ", len(res)

        ref = self.get_reference_output(data, taps, L, overlap, multiple)

        ftref = ft.rx(data[: -L // 2], taps, L)
        print "\nFBMC blocks"
        print ftref
        print "\nGR blocks"
        print res.reshape((-1, L)).T

        ftref = ftref.T
        ftref = ftref.flatten()
        self.assertComplexTuplesAlmostEqual(ftref, res[2 * L: -L])
Ejemplo n.º 15
0
    def test_002_buffers(self):
        print "\ntest002_buffers"
        # test if fg runs as expected on a minimum example!
        multiple = 5
        overlap = 1  # must be 1 in this test!
        L = 4
        taps = np.array([0, 1, 2, 1]) #  np.ones(overlap * L, dtype=float)
        taps = np.append(taps, [0.0, ])
        data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex)

        # set Up flowgraph
        phydyas = fbmc.rx_sdft_cvc(taps, L)
        print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap()
        src = blocks.vector_source_c(data, vlen=1)
        snk = blocks.vector_sink_c(L)
        tb = gr.top_block()
        tb.connect(src, phydyas, snk)

        # run fg and get results
        tb.run()
        res = np.array(snk.data())

        # check results
        ref = self.get_reference_output(data, taps, L, overlap, multiple)
        print "\nJohannes test"
        print ref.reshape((-1, L)).T

        ftref = ft.rx(data[: -L // 2], taps, L)

        print "\nFBMC blocks"
        print ftref
        print "\nGR blocks"
        print res.reshape((-1, L)).T

        ftref = ftref.T
        self.assertComplexTuplesAlmostEqual(ftref.flatten(), res.flatten()[2*L:])
Ejemplo n.º 16
0
    def test_004_config_frame_mod(self):
        num_frames = 10
        cfg = fbmc.fbmc_config(num_used_subcarriers=20,
                               num_payload_sym=16,
                               num_overlap_sym=4,
                               modulation="QPSK",
                               preamble="IAM",
                               samp_rate=250000)
        total_subcarriers = cfg.num_total_subcarriers()  # 8
        used_subcarriers = cfg.num_used_subcarriers()  # 4
        channel_map = cfg.channel_map(
        )  # ft.get_channel_map(used_subcarriers, total_subcarriers)
        payload_symbols = cfg.num_payload_sym()  # 8
        overlap = cfg.num_overlap_sym()  # 4
        taps = cfg.phydyas_impulse_taps(
            cfg.num_total_subcarriers(), cfg.num_overlap_sym(
            ))  # ft.generate_phydyas_filter(total_subcarriers, overlap)

        preamble = ft.get_preamble(total_subcarriers)
        num_preamble_symbols = len(preamble) // total_subcarriers
        payload = ft.get_payload(payload_symbols, used_subcarriers)
        payload = np.tile(payload, num_frames).flatten()

        src = blocks.vector_source_b(payload, repeat=False)
        framer = fbmc.frame_generator_bvc(used_subcarriers, total_subcarriers,
                                          payload_symbols, overlap,
                                          channel_map, preamble)
        snk_frame = blocks.vector_sink_c(total_subcarriers)  # a debug output

        mod = fbmc.tx_sdft_vcc(taps, total_subcarriers)
        demod = fbmc.rx_sdft_cvc(taps, total_subcarriers)
        skipper = blocks.skiphead(8 * total_subcarriers, 4)

        snk_rx = blocks.vector_sink_c(total_subcarriers)
        deframer = fbmc.deframer_vcb(used_subcarriers, total_subcarriers,
                                     num_preamble_symbols, payload_symbols,
                                     overlap, channel_map)
        snk = blocks.vector_sink_b(1)
        self.tb.connect(src, framer, mod, demod, skipper, deframer, snk)
        self.tb.connect(framer, snk_frame)
        self.tb.connect(skipper, snk_rx)
        self.tb.run()

        res = np.array(snk.data())
        print res
        print payload

        moddata = np.array(snk_frame.data())
        print "len(moddata) = ", len(moddata)
        rxdata = np.array(snk_rx.data())
        print "len(rxdata) = ", len(rxdata)

        # plt.plot(rxdata.real * 0.03)
        # for i in range(len(moddata)):
        #     if (i + 1) % total_subcarriers == 0:
        #         plt.axvline(i)
        # plt.plot(moddata.real)
        # plt.grid()
        # plt.show()

        print "len(payload) = ", len(payload)
        print "len(result)  = ", len(res)

        self.assertTupleEqual(tuple(payload[:len(res)]), tuple(res))