def test_002_big_data(self): print("big data test") reps = 5 alpha = .5 M = 127 K = 16 L = 2 taps = get_frequency_domain_filter('rrc', alpha, M, K, L) data = np.array([], dtype=complex) ref = np.array([], dtype=complex) for i in range(reps): d = get_random_qpsk(M * K) ref = np.append(ref, gfdm_demodulate_block(d, taps, K, M, L)) data = np.append(data, d) 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) # set up fg self.tb.run() # check data res = np.array(dst.data()) self.assertComplexTuplesAlmostEqual(ref, res, 4)
def test_001_simple_receiver(self): # make sure advanced receiver works like simple receiver in case no IC iterations are applied! reps = 5 alpha = .5 M = 127 K = 16 L = 2 taps = filters.get_frequency_domain_filter('rrc', alpha, M, K, L) data = np.array([], dtype=np.complex) ref = np.array([], dtype=np.complex) for i in xrange(reps): d = utils.get_random_qpsk(M * K) ref = np.append(ref, gfdm_demodulate_block(d, taps, K, M, L)) data = np.append(data, d) # print data # print ref # print "MAXIMUM ref value: ", np.max(abs(ref)) src = blocks.vector_source_c(data) est_data = np.ones(len(data), dtype=np.complex) est_src = blocks.vector_source_c(est_data) gfdm_constellation = digital.constellation_qpsk().base() mod = gfdm.advanced_receiver_sb_cc(M, K, L, 0, taps, gfdm_constellation, np.arange(K)) dst = blocks.vector_sink_c() self.tb.connect(src, (mod, 0), dst) self.tb.connect(est_src, (mod, 1)) # set up fg self.tb.run() # check data res = np.array(dst.data()) self.assertComplexTuplesAlmostEqual(ref, res, 4)
def test_001_simple_receiver(self): # make sure advanced receiver works like simple receiver in case no IC iterations are applied! reps = 5 alpha = .5 M = 127 K = 16 L = 2 taps = filters.get_frequency_domain_filter('rrc', alpha, M, K, L) data = np.array([], dtype=np.complex) ref = np.array([], dtype=np.complex) for i in xrange(reps): d = utils.get_random_qpsk(M * K) ref = np.append(ref, gfdm_demodulate_block(d, taps, K, M, L)) data = np.append(data, d) # print data # print ref # print "MAXIMUM ref value: ", np.max(abs(ref)) src = blocks.vector_source_c(data) est_data = np.ones(len(data), dtype=np.complex) est_src = blocks.vector_source_c(est_data) gfdm_constellation = digital.constellation_qpsk().base() mod = gfdm.advanced_receiver_sb_cc(M, K, L, 0, taps, gfdm_constellation, np.arange(K), 0) dst = blocks.vector_sink_c() self.tb.connect(src, (mod, 0), dst) self.tb.connect(est_src, (mod, 1)) # set up fg self.tb.run() # check data res = np.array(dst.data()) self.assertComplexTuplesAlmostEqual(ref, res, 4)
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_002_big_data(self): print("big data test") reps = 5 alpha = .5 M = 127 K = 16 L = 2 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 xrange(reps): d = get_random_qpsk(M * K) ref = np.append(ref, gfdm_demodulate_block(d, taps, K, M, L)) 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_receiver_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()) self.assertComplexTuplesAlmostEqual(ref, res, 4)
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)
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)
def test_003_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) 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, 5)
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.j) demod = Demodulator(timeslots, subcarriers, overlap, taps) res = demod.demodulate_equalize(frame * np.exp(1.j), eq_vals) 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.0j) demod = Demodulator(timeslots, subcarriers, overlap, taps) fd_res = demod.fft_equalize_filter_downsample(frame * np.exp(1.0j), eq_vals) res = demod.transform_subcarriers_to_td(fd_res) self.assertComplexTuplesAlmostEqual(ref, res, 5)