def test_001_t(self): nsubcarrier = 4 ntimeslots = 16 filter_alpha = 0.35 tag_key = "frame_len" fft_length = nsubcarrier * ntimeslots taps = get_frequency_domain_filter('rrc', filter_alpha, ntimeslots, nsubcarrier, 2) data = get_random_qpsk(nsubcarrier * ntimeslots) D = get_data_matrix(data, nsubcarrier, group_by_subcarrier=False) print D md = gfdms.modulator_cc(nsubcarrier, ntimeslots, filter_alpha, fft_length, 1, tag_key) tagger = blocks.stream_to_tagged_stream(gr.sizeof_gr_complex, 1, fft_length, tag_key) src = blocks.vector_source_c(data) dst = blocks.vector_sink_c() self.tb.connect(src, tagger, md, dst) self.tb.run() res = np.array(dst.data()) print res ref = gfdm_modulate_block(D, taps, ntimeslots, nsubcarrier, 2, True) print ref self.assertComplexTuplesAlmostEqual(ref, res, 2)
def test_001_t(self): nsubcarrier = 4 ntimeslots = 16 filter_alpha = 0.35 tag_key = "frame_len" fft_length = nsubcarrier * ntimeslots taps = get_frequency_domain_filter('rrc', filter_alpha, ntimeslots, nsubcarrier, 2) data = get_random_qpsk(nsubcarrier * ntimeslots) # data = np.zeros(nsubcarrier) # data[0] = 1 # data = np.repeat(data, ntimeslots) D = get_data_matrix(data, nsubcarrier, group_by_subcarrier=False) print D md = gfdms.modulator_cc(nsubcarrier, ntimeslots, filter_alpha, fft_length, 1, tag_key) tagger = blocks.stream_to_tagged_stream(gr.sizeof_gr_complex, 1, fft_length, tag_key) src = blocks.vector_source_c(data) dst = blocks.vector_sink_c() self.tb.connect(src, tagger, md, dst) self.tb.run() res = np.array(dst.data()) print res ref = gfdm_modulate_block(D, taps, ntimeslots, nsubcarrier, 2, True) print ref self.assertComplexTuplesAlmostEqual(ref, res, 2)
def test_001_t(self): alpha = .5 M = 8 K = 4 L = 2 taps = get_frequency_domain_filter('rrc', alpha, M, K, L) # 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)
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) 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)
def test_005_steps(self): timeslots = 5 subcarriers = 32 overlap = 2 filter_alpha = 0.35 taps = get_frequency_domain_filter('rrc', filter_alpha, timeslots, subcarriers, overlap) data = get_random_qpsk(timeslots * subcarriers) D = get_data_matrix(data, subcarriers, group_by_subcarrier=False) frame = gfdm_modulate_block(D, taps, timeslots, subcarriers, overlap, False) ref = gfdm_demodulate_block( frame, taps, subcarriers, timeslots, overlap) demod = Demodulator(timeslots, subcarriers, overlap, taps) fd_res = demod.fft_filter_downsample(frame) res = demod.transform_subcarriers_to_td(fd_res) self.assertComplexTuplesAlmostEqual(ref, res, 5) for _ in range(2): ic_res = demod.cancel_sc_interference(data, fd_res) res = demod.transform_subcarriers_to_td(ic_res) self.assertComplexTuplesAlmostEqual(data, res, 1)
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)
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)
def test_001_t(self): np.set_printoptions(precision=2) n_frames = 7 alpha = .5 active_subcarriers = 52 timeslots = 9 subcarriers = 64 overlap = 2 cp_len = 8 cs_len = 4 ramp_len = 4 window_len = get_window_len(cp_len, timeslots, subcarriers, cs_len) taps = get_frequency_domain_filter('rrc', alpha, timeslots, subcarriers, overlap) # taps /= np.sqrt(calculate_signal_energy(taps) / time) window_taps = get_raised_cosine_ramp(ramp_len, window_len) pn_symbols = get_random_qpsk(subcarriers) H_preamble = get_frequency_domain_filter('rrc', alpha, 2, subcarriers, overlap) preamble = get_sync_symbol(pn_symbols, H_preamble, subcarriers, overlap, cp_len, ramp_len)[0] smap = get_subcarrier_map(subcarriers, active_subcarriers, True) ref = np.array([], dtype=np.complex) data = np.array([], dtype=np.complex) for i in range(n_frames): d = get_random_qpsk(active_subcarriers * timeslots) dd = map_to_waveform_resources(d, active_subcarriers, subcarriers, smap) D = get_data_matrix(dd, subcarriers, group_by_subcarrier=False) b = gfdm_modulate_block(D, taps, timeslots, subcarriers, overlap, False) b = add_cyclic_starfix(b, cp_len, cs_len) b = pinch_block(b, window_taps) ref = np.concatenate((ref, preamble, b)) data = np.concatenate((data, d)) src = blocks.vector_source_c(data) dut = gfdm.transmitter_cc(timeslots, subcarriers, active_subcarriers, cp_len, cs_len, ramp_len, smap, True, overlap, taps, window_taps, preamble, "packet_len") dst = blocks.vector_sink_c() self.tb.connect(src, dut, dst) self.tb.run() res = np.array(dst.data())[0:len(ref)] self.assertComplexTuplesAlmostEqual(ref, res, 5) tags = dst.tags() for t in tags: print(t.offset, t.value)
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)
def generate_reference_frame(symbols, timeslots, subcarriers, active_subcarriers, subcarrier_map, taps, overlap, cp_len, cs_len, window_taps, cyclic_shifts, preambles): dd = map_to_waveform_resources(symbols, active_subcarriers, subcarriers, subcarrier_map) D = get_data_matrix(dd, subcarriers, group_by_subcarrier=False) b = gfdm_modulate_block(D, taps, timeslots, subcarriers, overlap, False) frame = [] for cs, p in zip(cyclic_shifts, preambles): data = np.roll(b, cs) data = add_cyclic_starfix(data, cp_len, cs_len) data = pinch_block(data, window_taps) frame.append(np.concatenate((p, data))) return frame
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)
def test_002_big(self): timeslots = 21 subcarriers = 128 overlap = 2 filter_alpha = 0.35 taps = get_frequency_domain_filter("rrc", filter_alpha, timeslots, subcarriers, overlap) data = get_random_qpsk(timeslots * subcarriers) D = get_data_matrix(data, subcarriers, group_by_subcarrier=False) ref = gfdm_modulate_block(D, taps, timeslots, subcarriers, overlap, False) mod = Modulator(timeslots, subcarriers, overlap, taps) res = mod.modulate(data) self.assertComplexTuplesAlmostEqual(ref, res, 5)
def test_002_small(self): timeslots = 16 subcarriers = 4 overlap = 2 filter_alpha = 0.35 taps = get_frequency_domain_filter("rrc", filter_alpha, timeslots, subcarriers, overlap) data = get_random_qpsk(timeslots * subcarriers) D = get_data_matrix(data, subcarriers, group_by_subcarrier=False) frame = gfdm_modulate_block(D, taps, timeslots, subcarriers, overlap, False) ref = gfdm_demodulate_block(frame, taps, subcarriers, timeslots, overlap) demod = Demodulator(timeslots, subcarriers, overlap, taps) res = demod.demodulate(frame) self.assertComplexTuplesAlmostEqual(ref, res, 6)
def test_004_big_equalize(self): timeslots = 21 subcarriers = 128 overlap = 2 filter_alpha = 0.35 taps = get_frequency_domain_filter("rrc", filter_alpha, timeslots, subcarriers, overlap) data = get_random_qpsk(timeslots * subcarriers) D = get_data_matrix(data, subcarriers, group_by_subcarrier=False) frame = gfdm_modulate_block(D, taps, timeslots, subcarriers, overlap, False) ref = gfdm_demodulate_block(frame, taps, subcarriers, timeslots, overlap) eq_vals = np.ones(ref.size, ref.dtype) * np.exp(1.0j) demod = Demodulator(timeslots, subcarriers, overlap, taps) res = demod.demodulate_equalize(frame * np.exp(1.0j), eq_vals) self.assertComplexTuplesAlmostEqual(ref, res, 5)
def test_001_t(self): np.set_printoptions(precision=2) n_frames = 3 alpha = .5 M = 8 K = 4 L = 2 cp_len = 8 ramp_len = 4 block_len = M * K window_len = get_window_len(cp_len, M, K) taps = get_frequency_domain_filter('rrc', alpha, M, K, L) 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) ref = np.array([], dtype=np.complex) data = np.array([], dtype=np.complex) for i in range(n_frames): d = get_random_qpsk(block_len) D = get_data_matrix(d, K, group_by_subcarrier=False) b = gfdm_modulate_block(D, taps, M, K, L, False) b = add_cyclic_prefix(b, cp_len) b = pinch_block(b, window_taps) ref = np.concatenate((ref, preamble, b)) data = np.concatenate((data, d)) src = blocks.vector_source_c(data) mod = gfdm.simple_modulator_cc(M, K, L, taps) prefixer = gfdm.cyclic_prefixer_cc(cp_len, ramp_len, block_len, window_taps) preambler = blocks.vector_insert_c(preamble, window_len + len(preamble), 0) dst = blocks.vector_sink_c() self.tb.connect(src, mod, prefixer, preambler, dst) self.tb.run() res = np.array(dst.data())[0:len(ref)] self.assertComplexTuplesAlmostEqual(ref, res, 5)
def test_006_steps_equalize(self): timeslots = 5 subcarriers = 32 overlap = 2 filter_alpha = 0.35 taps = get_frequency_domain_filter('rrc', filter_alpha, timeslots, subcarriers, overlap) data = get_random_qpsk(timeslots * subcarriers) D = get_data_matrix(data, subcarriers, group_by_subcarrier=False) frame = gfdm_modulate_block(D, taps, timeslots, subcarriers, overlap, False) ref = gfdm_demodulate_block( frame, taps, subcarriers, timeslots, overlap) eq_vals = np.ones(ref.size, ref.dtype) * np.exp(1.j) demod = Demodulator(timeslots, subcarriers, overlap, taps) fd_res = demod.fft_equalize_filter_downsample( frame * np.exp(1.j), eq_vals) res = demod.transform_subcarriers_to_td(fd_res) self.assertComplexTuplesAlmostEqual(ref, res, 5)