Ejemplo n.º 1
0
    def test_002_big_data(self):
        print("big data test")
        reps = 5
        alpha = .5
        M = 127
        K = 16
        L = 4
        taps = get_frequency_domain_filter('rrc', alpha, M, K, L)
        taps /= np.sqrt(calculate_signal_energy(taps) / M)
        data = np.array([], dtype=complex)
        ref = np.array([], dtype=complex)
        for i in range(reps):
            d = get_random_qpsk(M * K)
            D = get_data_matrix(d, K, group_by_subcarrier=False)
            ref = np.append(ref, gfdm_modulate_block(D, taps, M, K, L, False))
            data = np.append(data, d)

        src = blocks.vector_source_c(data)
        mod = gfdm.simple_modulator_cc(M, K, L, taps)
        dst = blocks.vector_sink_c()

        self.tb.connect(src, mod, dst)
        # set up fg
        self.tb.run()
        # check data
        res = np.array(dst.data())
        # res /= M * K

        self.assertComplexTuplesAlmostEqual(ref, res, 2)
Ejemplo n.º 2
0
    def test_002_big_data(self):
        print "big data test"
        reps = 5
        alpha = .5
        M = 127
        K = 16
        L = 4
        taps = get_frequency_domain_filter('rrc', alpha, M, K, L)
        taps /= np.sqrt(calculate_signal_energy(taps) / M)
        data = np.array([], dtype=np.complex)
        ref = np.array([], dtype=np.complex)
        for i in range(reps):
            d = get_random_qpsk(M * K)
            D = get_data_matrix(d, K, group_by_subcarrier=False)
            ref = np.append(ref, gfdm_modulate_block(D, taps, M, K, L, False))
            data = np.append(data, d)
        # print data
        # print ref
        # print "MAXIMUM ref value: ", np.max(abs(ref))

        src = blocks.vector_source_c(data)
        mod = gfdm.simple_modulator_cc(M, K, L, taps)
        dst = blocks.vector_sink_c()

        self.tb.connect(src, mod, dst)
        # set up fg
        self.tb.run()
        # check data
        res = np.array(dst.data())
        # res /= M * K
        # print "MAXIMUM result value: ", np.max(abs(res))

        self.assertComplexTuplesAlmostEqual(ref, res, 2)
Ejemplo n.º 3
0
    def test_001_t(self):
        alpha = .5
        M = 8
        K = 4
        L = 2
        taps = get_frequency_domain_filter('rrc', alpha, M, K, L)
        taps /= np.sqrt(calculate_signal_energy(taps) / M)
        # data = np.repeat(np.arange(1, K + 1), M)
        data = get_random_qpsk(M * K)
        D = get_data_matrix(data, K, group_by_subcarrier=False)

        src = blocks.vector_source_c(data)
        mod = gfdm.simple_modulator_cc(M, K, L, taps)
        dst = blocks.vector_sink_c()

        self.tb.connect(src, mod, dst)
        # set up fg
        self.tb.run()
        # check data
        res = np.array(dst.data())
        # res /= M * K

        # F = gfdm_transform_subcarriers_to_fd(D, M)
        # F = gfdm_upsample_subcarriers_in_fd(F, K, L)
        # F = gfdm_filter_subcarriers_in_fd(F, taps, M, K, L)

        ref = gfdm_modulate_block(D, taps, M, K, L, False)

        self.assertComplexTuplesAlmostEqual(ref, res, 5)
Ejemplo n.º 4
0
    def test_001_t(self):
        alpha = .5
        M = 8
        K = 4
        L = 2
        taps = get_frequency_domain_filter('rrc', alpha, M, K, L)
        taps /= np.sqrt(calculate_signal_energy(taps) / M)
        # data = np.repeat(np.arange(1, K + 1), M)
        data = get_random_qpsk(M * K)
        D = get_data_matrix(data, K, group_by_subcarrier=False)
        # print data
        # print D
        src = blocks.vector_source_c(data)
        mod = gfdm.simple_modulator_cc(M, K, L, taps)
        dst = blocks.vector_sink_c()

        self.tb.connect(src, mod, dst)
        # set up fg
        self.tb.run()
        # check data
        res = np.array(dst.data())
        # res /= M * K

        # F = gfdm_transform_subcarriers_to_fd(D, M)
        # F = gfdm_upsample_subcarriers_in_fd(F, K, L)
        # F = gfdm_filter_subcarriers_in_fd(F, taps, M, K, L)

        ref = gfdm_modulate_block(D, taps, M, K, L, False)

        self.assertComplexTuplesAlmostEqual(ref, res, 5)
Ejemplo n.º 5
0
    def test_001_norm_preamble(self):
        alpha = .5
        K = 32
        cp_len = K

        pre_gen = gfdm.preamble_generator(K, alpha, K * 2)
        preamble = np.array(pre_gen.get_preamble())

        kernel = gfdm.improved_sync_algorithm_kernel_cc(K, cp_len, preamble, 4000)
        kernel_preamble = np.array(kernel.preamble())

        # normalize preamble
        preamble /= np.sqrt(np.abs(calculate_signal_energy(preamble)))
        print 'norm_preamble energy:', calculate_signal_energy(preamble)

        self.assertComplexTuplesAlmostEqual(kernel_preamble, preamble)
Ejemplo n.º 6
0
    def test_001_norm_preamble(self):
        alpha = .5
        K = 32
        cp_len = K

        pre_gen = gfdm.preamble_generator(K, alpha, K * 2)
        preamble = np.array(pre_gen.get_preamble())

        kernel = gfdm.improved_sync_algorithm_kernel_cc(
            K, cp_len, preamble, 4000)
        kernel_preamble = np.array(kernel.preamble())

        # normalize preamble
        preamble /= np.sqrt(np.abs(calculate_signal_energy(preamble)))
        print 'norm_preamble energy:', calculate_signal_energy(preamble)

        self.assertComplexTuplesAlmostEqual(kernel_preamble, preamble)
Ejemplo n.º 7
0
    def test_001_t(self):
        alpha = .5
        M = 8
        K = 4
        L = 2
        taps = get_frequency_domain_filter('rrc', alpha, M, K, L)
        taps /= np.sqrt(calculate_signal_energy(taps) / M)
        data = get_random_qpsk(M * K)
        src = blocks.vector_source_c(data)
        mod = gfdm.simple_receiver_cc(M, K, L, taps)
        dst = blocks.vector_sink_c()

        self.tb.connect(src, mod, dst)
        self.tb.run()
        res = np.array(dst.data())

        ref = gfdm_demodulate_block(data, taps, K, M, L)
        res *= np.sqrt(
            calculate_signal_energy(ref) / calculate_signal_energy(res))
        self.assertComplexTuplesAlmostEqual(ref, res, 5)
Ejemplo n.º 8
0
    def test_001_t(self):
        alpha = .5
        M = 8
        K = 4
        L = 2
        taps = get_frequency_domain_filter('rrc', alpha, M, K, L)
        taps /= np.sqrt(calculate_signal_energy(taps) / M)
        data = get_random_qpsk(M * K)
        src = blocks.vector_source_c(data)
        mod = gfdm.simple_receiver_cc(M, K, L, taps)
        dst = blocks.vector_sink_c()

        self.tb.connect(src, mod, dst)
        self.tb.run()
        res = np.array(dst.data())

        ref = gfdm_demodulate_block(data, taps, K, M, L)
        # print calculate_signal_energy(ref), calculate_signal_energy(res)
        res *= np.sqrt(calculate_signal_energy(ref) / calculate_signal_energy(res))
        self.assertComplexTuplesAlmostEqual(ref, res, 5)
Ejemplo n.º 9
0
    def test_001_t(self):
        np.set_printoptions(precision=2)
        n_frames = 3
        alpha = .5
        active = 8
        M = 8
        K = 16
        L = 2
        cp_len = 8
        cs_len = 4
        ramp_len = 4
        block_len = M * K
        window_len = get_window_len(cp_len, M, K, cs_len)
        taps = get_frequency_domain_filter('rrc', alpha, M, K, L)
        taps /= np.sqrt(calculate_signal_energy(taps) / M)
        window_taps = get_raised_cosine_ramp(ramp_len, window_len)
        pn_symbols = get_random_qpsk(K)
        H_preamble = get_frequency_domain_filter('rrc', alpha, 2, K, L)
        preamble = get_sync_symbol(pn_symbols, H_preamble, K, L, cp_len,
                                   ramp_len)[0]
        smap = get_subcarrier_map(K, active, dc_free=True)

        ref = np.array([], dtype=complex)
        data = np.array([], dtype=complex)
        frame_len = window_len + len(preamble)
        frame_gap = np.zeros(frame_len)
        for i in range(n_frames):
            d = get_random_qpsk(active * M)
            dd = map_to_waveform_resources(d, active, K, smap)
            D = get_data_matrix(dd, K, group_by_subcarrier=False)
            b = gfdm_modulate_block(D, taps, M, K, L, False)
            b = add_cyclic_starfix(b, cp_len, cs_len)
            b = pinch_block(b, window_taps)
            ref = np.concatenate((ref, frame_gap, preamble, b))
            data = np.concatenate((data, d))

        src = blocks.vector_source_c(data)
        mapper = gfdm.resource_mapper_cc(active, K, M, smap, True)
        mod = gfdm.simple_modulator_cc(M, K, L, taps)
        prefixer = gfdm.cyclic_prefixer_cc(block_len, cp_len, cs_len, ramp_len,
                                           window_taps)
        preambler = blocks.vector_insert_c(preamble,
                                           window_len + len(preamble), 0)
        gapper = blocks.vector_insert_c(frame_gap, frame_len + len(frame_gap),
                                        0)
        dst = blocks.vector_sink_c()

        self.tb.connect(src, mapper, mod, prefixer, preambler, gapper, dst)
        # self.tb.connect(src, mapper, dst)
        self.tb.run()
        res = np.array(dst.data())[0:len(ref)]

        self.assertComplexTuplesAlmostEqual(ref, res, 5)
Ejemplo n.º 10
0
    def test_001_t(self):
        np.set_printoptions(precision=2)
        n_frames = 3
        alpha = .5
        active = 8
        M = 8
        K = 16
        L = 2
        cp_len = 8
        cs_len = 4
        ramp_len = 4
        block_len = M * K
        window_len = get_window_len(cp_len, M, K, cs_len)
        taps = get_frequency_domain_filter('rrc', alpha, M, K, L)
        taps /= np.sqrt(calculate_signal_energy(taps) / M)
        window_taps = get_raised_cosine_ramp(ramp_len, window_len)
        pn_symbols = get_random_qpsk(K)
        H_preamble = get_frequency_domain_filter('rrc', alpha, 2, K, L)
        preamble = get_sync_symbol(pn_symbols, H_preamble, K, L, cp_len, ramp_len)[0]
        smap = get_subcarrier_map(K, active, dc_free=True)

        ref = np.array([], dtype=np.complex)
        data = np.array([], dtype=np.complex)
        frame_len = window_len + len(preamble)
        frame_gap = np.zeros(frame_len)
        for i in range(n_frames):
            d = get_random_qpsk(active * M)
            dd = map_to_waveform_resources(d, active, K, smap)
            D = get_data_matrix(dd, K, group_by_subcarrier=False)
            b = gfdm_modulate_block(D, taps, M, K, L, False)
            b = add_cyclic_starfix(b, cp_len, cs_len)
            b = pinch_block(b, window_taps)
            ref = np.concatenate((ref, frame_gap, preamble, b))
            data = np.concatenate((data, d))

        src = blocks.vector_source_c(data)
        mapper = gfdm.resource_mapper_cc(active, K, M, smap, True)
        mod = gfdm.simple_modulator_cc(M, K, L, taps)
        prefixer = gfdm.cyclic_prefixer_cc(block_len, cp_len, cs_len, ramp_len, window_taps)
        preambler = blocks.vector_insert_c(preamble, window_len + len(preamble), 0)
        gapper = blocks.vector_insert_c(frame_gap, frame_len + len(frame_gap), 0)
        dst = blocks.vector_sink_c()

        self.tb.connect(src, mapper, mod, prefixer, preambler, gapper, dst)
        # self.tb.connect(src, mapper, dst)
        self.tb.run()
        res = np.array(dst.data())[0:len(ref)]

        self.assertComplexTuplesAlmostEqual(ref, res, 5)