示例#1
0
    def test_001_setup(self):
        multiple = 6
        overlap = 1  # must be 1 in this test!
        L = 4
        taps = np.array([0, 1, 2, 1])
        taps = np.append(taps, [0.0, ])
        data = np.arange(1, multiple * L + 1, dtype=np.complex)

        try:  # make sure ctor checks work correctly!
            dummy = fbmc.tx_sdft_vcc([1, 1, 1], L)
        except RuntimeError as e:
            s = str(e)
            pos = s.find("number of filter taps must be equal to")
            if pos < 0:
                raise

        tx_sdft = fbmc.tx_sdft_vcc(taps, L)
        src = blocks.vector_source_c(data, vlen=L)
        snk = blocks.vector_sink_c(vlen=1)
        # set up fg
        self.tb.connect(src, tx_sdft, snk)

        self.tb.run()
        # check data

        print "L: ", tx_sdft.L()
        print "overlap: ", tx_sdft.overlap()
        print "taps: ", tx_sdft.taps()

        res = snk.data()
        print res
示例#2
0
    def test_001_setup(self):
        multiple = 6
        overlap = 1  # must be 1 in this test!
        L = 4
        taps = np.array([0, 1, 2, 1])
        taps = np.append(taps, [
            0.0,
        ])
        data = np.arange(1, multiple * L + 1, dtype=np.complex)

        try:  # make sure ctor checks work correctly!
            dummy = fbmc.tx_sdft_vcc([1, 1, 1], L)
        except RuntimeError as e:
            s = str(e)
            pos = s.find("number of filter taps must be equal to")
            if pos < 0:
                raise

        tx_sdft = fbmc.tx_sdft_vcc(taps, L)
        src = blocks.vector_source_c(data, vlen=L)
        snk = blocks.vector_sink_c(vlen=1)
        # set up fg
        self.tb.connect(src, tx_sdft, snk)

        self.tb.run()
        # check data

        print "L: ", tx_sdft.L()
        print "overlap: ", tx_sdft.overlap()
        print "taps: ", tx_sdft.taps()

        res = snk.data()
        print res
示例#3
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))
示例#4
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))
示例#5
0
    def test_002_crunch(self):
        print "\n\n\ntest_002"
        multiple = 6
        overlap = 1
        L = 4
        taps = np.array([
            1,
            1,
            1,
            1,
            2,
            2,
            2,
            2,
        ])
        taps = np.append(taps, [
            0.0,
        ])
        data = np.arange(1, multiple * L + 1, dtype=np.complex)

        tx_sdft = fbmc.tx_sdft_vcc(taps, L)
        src = blocks.vector_source_c(data, vlen=L)
        snk0 = blocks.vector_sink_c(vlen=1)

        ft = fft.fft_vcc(L, False, (), False, 1)
        pfb = fbmc.polyphase_filterbank_vcvc(L, taps)
        comm = fbmc.output_commutator_vcc(L=L)
        snk1 = blocks.vector_sink_c(vlen=1)
        self.tb.connect(src, tx_sdft, snk0)
        self.tb.connect(src, ft, pfb, comm, snk1)

        self.tb.run()
        r0 = np.array(snk0.data()[L // 2:-L // 2])
        r1 = np.array(snk1.data())

        print "sdft overlap = ", tx_sdft.overlap()
        print "sdft history = ", tx_sdft.history()

        print "\ntx_sdft"
        print r0.reshape((-1, L)).T

        print "\npolyphase"
        print r1.reshape((-1, L)).T

        tmp = np.concatenate((r0, r1)).reshape((2, -1)).T
        for x, y in tmp:
            print x, y, "\tis equal", x == y

        self.assertComplexTuplesAlmostEqual(r0, r1[0:len(r0)])
示例#6
0
    def test_003_go_big(self):
        print "\n\n\ntest_003"
        multiple = 2000
        overlap = 4

        # get test data, taps, config, etc.
        self.cfg = fbmc.fbmc_config(num_used_subcarriers=20,
                                    num_payload_sym=16,
                                    num_overlap_sym=overlap,
                                    modulation="QPSK",
                                    preamble="IAM")
        L = self.cfg.num_total_subcarriers()
        taps = np.array(self.cfg.prototype_taps_float(), dtype=np.float)
        taps[-1] = 0

        data = np.arange(1, L + 1, dtype=np.complex)
        data = np.repeat(data, multiple)

        # set up fg
        tx_sdft = fbmc.tx_sdft_vcc(taps, L)
        src = blocks.vector_source_c(data, vlen=L)
        snk0 = blocks.vector_sink_c(vlen=1)
        self.tb.connect(src, tx_sdft, snk0)

        ft = fft.fft_vcc(L, False, (), False, 1)
        pfb = fbmc.polyphase_filterbank_vcvc(L, taps)
        comm = fbmc.output_commutator_vcc(L=L)
        snk1 = blocks.vector_sink_c(vlen=1)
        self.tb.connect(src, ft, pfb, comm, snk1)

        self.tb.run()
        r0 = np.array(snk0.data()[L:])
        r1 = np.array(snk1.data()[:-L])

        print "\ntx_sdft"
        print r0.reshape((-1, L)).T

        print "\npolyphase"
        print r1.reshape((-1, L)).T

        self.assertComplexTuplesAlmostEqual(r0, r1, 4)
示例#7
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())
示例#8
0
    def test_002_crunch(self):
        print "\n\n\ntest_002"
        multiple = 6
        overlap = 1
        L = 4
        taps = np.array([1, 1, 1, 1, 2, 2, 2, 2, ])
        taps = np.append(taps, [0.0, ])
        data = np.arange(1, multiple * L + 1, dtype=np.complex)

        tx_sdft = fbmc.tx_sdft_vcc(taps, L)
        src = blocks.vector_source_c(data, vlen=L)
        snk0 = blocks.vector_sink_c(vlen=1)

        ft = fft.fft_vcc(L, False, (), False, 1)
        pfb = fbmc.polyphase_filterbank_vcvc(L, taps)
        comm = fbmc.output_commutator_vcc(L=L)
        snk1 = blocks.vector_sink_c(vlen=1)
        self.tb.connect(src, tx_sdft, snk0)
        self.tb.connect(src, ft, pfb, comm, snk1)

        self.tb.run()
        r0 = np.array(snk0.data()[L//2:-L//2])
        r1 = np.array(snk1.data())

        print "sdft overlap = ", tx_sdft.overlap()
        print "sdft history = ", tx_sdft.history()

        print "\ntx_sdft"
        print r0.reshape((-1, L)).T

        print "\npolyphase"
        print r1.reshape((-1, L)).T

        tmp = np.concatenate((r0, r1)).reshape((2, -1)).T
        for x, y in tmp:
            print x, y, "\tis equal", x == y

        self.assertComplexTuplesAlmostEqual(r0, r1[0:len(r0)])
示例#9
0
    def test_003_go_big(self):
        print "\n\n\ntest_003"
        multiple = 2000
        overlap = 4

        # get test data, taps, config, etc.
        self.cfg = fbmc.fbmc_config(num_used_subcarriers=20, num_payload_sym=16, num_overlap_sym=overlap,
                                    modulation="QPSK", preamble="IAM")
        L = self.cfg.num_total_subcarriers()
        taps = np.array(self.cfg.prototype_taps_float(), dtype=np.float)
        taps[-1] = 0

        data = np.arange(1, L + 1, dtype=np.complex)
        data = np.repeat(data, multiple)

        # set up fg
        tx_sdft = fbmc.tx_sdft_vcc(taps, L)
        src = blocks.vector_source_c(data, vlen=L)
        snk0 = blocks.vector_sink_c(vlen=1)
        self.tb.connect(src, tx_sdft, snk0)

        ft = fft.fft_vcc(L, False, (), False, 1)
        pfb = fbmc.polyphase_filterbank_vcvc(L, taps)
        comm = fbmc.output_commutator_vcc(L=L)
        snk1 = blocks.vector_sink_c(vlen=1)
        self.tb.connect(src, ft, pfb, comm, snk1)

        self.tb.run()
        r0 = np.array(snk0.data()[L:])
        r1 = np.array(snk1.data()[:-L])

        print "\ntx_sdft"
        print r0.reshape((-1, L)).T

        print "\npolyphase"
        print r1.reshape((-1, L)).T

        self.assertComplexTuplesAlmostEqual(r0, r1, 4)