def generate_integrated_frame(timeslots, subcarriers, active_subcarriers, cp_len, cs_len, alpha=.2): p_seed = utils.generate_seed('awesome preamble') f_seed = utils.generate_seed('awesome frame') subcarrier_map = mapping.get_subcarrier_map(subcarriers, active_subcarriers, dc_free=True) overlap = 2 p, p_vals = preamble.symmetric_mapped_preamble(p_seed, 'rrc', alpha, active_subcarriers, subcarriers, subcarrier_map, overlap, cp_len, cs_len) frame_preamble, x_preamble = p p = gfdm_modulation.modulate_mapped_gfdm_block(np.concatenate((p_vals, p_vals, np.zeros((timeslots - 2) * active_subcarriers))), timeslots, subcarriers, active_subcarriers, overlap, alpha, dc_free=True) x_preamble = p[0:len(x_preamble)] d = utils.get_random_qpsk((timeslots - 4) * active_subcarriers, f_seed) d = np.tile(p_vals, timeslots) # d = np.concatenate((p_vals, p_vals, d, p_vals, p_vals)) # d = utils.get_random_qpsk((timeslots - 2) * active_subcarriers, f_seed) # d = np.concatenate((p_vals, p_vals, d)) d_frame = mod_frame = gfdm_modulation.modulate_mapped_gfdm_block(d, timeslots, subcarriers, active_subcarriers, overlap, alpha, dc_free=True) symbol = cyclic_prefix.add_cyclic_starfix(d_frame, cp_len, cs_len) window_ramp = cyclic_prefix.get_raised_cosine_ramp(cs_len, cyclic_prefix.get_window_len(cp_len, timeslots, subcarriers, cs_len)) # d_frame = cyclic_prefix.pinch_block(symbol, window_ramp) H = filters.get_frequency_domain_filter('rrc', alpha, timeslots, subcarriers, overlap) return p, mod_frame, x_preamble, d, H
def generate_reference_frame(timeslots, subcarriers, active_subcarriers, cp_len, cs_len, alpha=.2): p_seed = utils.generate_seed('awesome preamble') f_seed = utils.generate_seed('awesome frame') subcarrier_map = mapping.get_subcarrier_map(subcarriers, active_subcarriers, dc_free=True) overlap = 2 frame_preamble, x_preamble = preamble.mapped_preamble( p_seed, 'rrc', alpha, active_subcarriers, subcarriers, subcarrier_map, overlap, cp_len, cs_len) d = utils.get_random_qpsk(timeslots * active_subcarriers, f_seed) d_frame = mod_frame = gfdm_modulation.modulate_mapped_gfdm_block( d, timeslots, subcarriers, active_subcarriers, overlap, alpha, dc_free=True) symbol = cyclic_prefix.add_cyclic_starfix(d_frame, cp_len, cs_len) window_ramp = cyclic_prefix.get_raised_cosine_ramp( cs_len, cyclic_prefix.get_window_len(cp_len, timeslots, subcarriers, cs_len)) d_frame = cyclic_prefix.pinch_block(symbol, window_ramp) H = filters.get_frequency_domain_filter('rrc', alpha, timeslots, subcarriers, overlap) return np.concatenate( (frame_preamble, d_frame)), mod_frame, x_preamble, d, H
def modulate_mapped_gfdm_block(data, ts, sc, active_sc, overlap, alpha, dc_free=False): # const gfdm_complex scaling_factor = gfdm_complex(1. / std::sqrt(std::abs(res) / n_timeslots), 0.0f); smap = get_subcarrier_map(sc, active_sc, dc_free=dc_free) dm = map_to_waveform_resource_grid(data, active_sc, sc, smap).T H = get_frequency_domain_filter('rrc', alpha, ts, sc, overlap) filter_energy = calculate_signal_energy(H) scaling_factor = 1. / np.sqrt(filter_energy / ts) H = H * scaling_factor # print filter_energy, scaling_factor, calculate_signal_energy(H) return gfdm_modulate_block(dm, H, ts, sc, overlap, False)
def main(): np.set_printoptions(precision=2, linewidth=150) alpha = .2 active_subcarriers = 52 timeslots = 9 fft_len = 64 cp_len = fft_len // 2 cs_len = cp_len // 2 subcarrier_map = mapping.get_subcarrier_map(fft_len, active_subcarriers, dc_free=True) ref_frame, modulated_frame, x_preamble, data, freq_filter_taps = generate_integrated_frame(timeslots, fft_len, active_subcarriers, cp_len, cs_len, alpha) test_frame = np.concatenate((.001 * utils.get_random_samples(1000), ref_frame, .001 * utils.get_random_samples(1000)))
def main(): np.set_printoptions(precision=2, linewidth=150) alpha = .2 active_subcarriers = 52 timeslots = 9 fft_len = 64 cp_len = fft_len // 2 cs_len = cp_len // 2 subcarrier_map = mapping.get_subcarrier_map(fft_len, active_subcarriers, dc_free=True) print(subcarrier_map) filename = '/lhome/records/gfdm_replay_ref_frame_time_synced.dat' # filename = '/lhome/records/gfdm_gr_fg_synced_frames.dat' # filename = '/lhome/records/gfdm_ref_frame_50ms_slice.dat' slice_len = 800 offset = 0 n_frames = 200 frame_start = 0 frame_end = 800 frame = converter.load_gr_iq_file(filename)[offset:] n_max_frames = int(len(frame) // slice_len) print('max number of frames:', n_max_frames) frame = frame[2000 * slice_len:2000 * slice_len + slice_len * n_frames] frames = np.reshape(frame, (-1, slice_len)) # frames = frames[:, frame_start:frame_end] # frame = converter.load_gr_iq_file(filename) print('num samples', len(frame)) # f_frame = np.fft.fft(frame) # # plt.semilogy(np.abs(f_frame)) # plt.plot(np.abs(frame)) # plt.show() # for f in frames: # plt.plot(np.abs(f)) # # # # # # plt.semilogy(*signal.welch(frame)) # plt.show() # return ref_frame, modulated_frame, x_preamble, data, freq_filter_taps = validation_utils.generate_reference_frame( timeslots, fft_len, active_subcarriers, cp_len, cs_len, alpha) #ref_frame, modulated_frame, x_preamble, data, freq_filter_taps = validation_utils.generate_sc_qpsk_frame(timeslots, fft_len, active_subcarriers, cp_len, cs_len, alpha) rx_kernel = cgfdm.py_receiver_kernel_cc(timeslots, fft_len, 2, freq_filter_taps) demapper = cgfdm.py_resource_demapper_kernel_cc(timeslots, fft_len, active_subcarriers, subcarrier_map, True) # rx_oversampled(frames, ref_frame, modulated_frame, x_preamble, data, rx_kernel, demapper, timeslots, fft_len, cp_len, cs_len) # rx_nyquist_sampled(frames, ref_frame, modulated_frame, x_preamble, data, rx_kernel, demapper, timeslots, fft_len, cp_len, cs_len) rx_demodulate(frames, ref_frame, modulated_frame, x_preamble, data, rx_kernel, demapper, timeslots, fft_len, cp_len, cs_len) return
def generate_integrated_frame(timeslots, subcarriers, active_subcarriers, cp_len, cs_len, alpha=.2): p_seed = utils.generate_seed('awesome preamble') f_seed = utils.generate_seed('awesome frame') subcarrier_map = mapping.get_subcarrier_map(subcarriers, active_subcarriers, dc_free=True) overlap = 2 p, p_vals = preamble.symmetric_mapped_preamble(p_seed, 'rrc', alpha, active_subcarriers, subcarriers, subcarrier_map, overlap, cp_len, cs_len) frame_preamble, x_preamble = p p = gfdm_modulation.modulate_mapped_gfdm_block(np.concatenate( (p_vals, p_vals, np.zeros((timeslots - 2) * active_subcarriers))), timeslots, subcarriers, active_subcarriers, overlap, alpha, dc_free=True) x_preamble = p[0:len(x_preamble)] d = utils.get_random_qpsk((timeslots - 4) * active_subcarriers, f_seed) d = np.tile(p_vals, timeslots) # d = np.concatenate((p_vals, p_vals, d, p_vals, p_vals)) # d = utils.get_random_qpsk((timeslots - 2) * active_subcarriers, f_seed) # d = np.concatenate((p_vals, p_vals, d)) d_frame = mod_frame = gfdm_modulation.modulate_mapped_gfdm_block( d, timeslots, subcarriers, active_subcarriers, overlap, alpha, dc_free=True) symbol = cyclic_prefix.add_cyclic_starfix(d_frame, cp_len, cs_len) window_ramp = cyclic_prefix.get_raised_cosine_ramp( cs_len, cyclic_prefix.get_window_len(cp_len, timeslots, subcarriers, cs_len)) # d_frame = cyclic_prefix.pinch_block(symbol, window_ramp) H = filters.get_frequency_domain_filter('rrc', alpha, timeslots, subcarriers, overlap) return p, mod_frame, x_preamble, d, H
def generate_reference_frame(timeslots, subcarriers, active_subcarriers, cp_len, cs_len, alpha=.2): p_seed = utils.generate_seed('awesome preamble') f_seed = utils.generate_seed('awesome frame') subcarrier_map = mapping.get_subcarrier_map(subcarriers, active_subcarriers, dc_free=True) overlap = 2 frame_preamble, x_preamble = preamble.mapped_preamble(p_seed, 'rrc', alpha, active_subcarriers, subcarriers, subcarrier_map, overlap, cp_len, cs_len) d = utils.get_random_qpsk(timeslots * active_subcarriers, f_seed) d_frame = mod_frame = gfdm_modulation.modulate_mapped_gfdm_block(d, timeslots, subcarriers, active_subcarriers, overlap, alpha, dc_free=True) symbol = cyclic_prefix.add_cyclic_starfix(d_frame, cp_len, cs_len) window_ramp = cyclic_prefix.get_raised_cosine_ramp(cs_len, cyclic_prefix.get_window_len(cp_len, timeslots, subcarriers, cs_len)) d_frame = cyclic_prefix.pinch_block(symbol, window_ramp) H = filters.get_frequency_domain_filter('rrc', alpha, timeslots, subcarriers, overlap) return np.concatenate((frame_preamble, d_frame)), mod_frame, x_preamble, d, H
def main(): np.set_printoptions(precision=2, linewidth=150) alpha = .2 active_subcarriers = 52 timeslots = 9 fft_len = 64 cp_len = fft_len // 2 cs_len = cp_len // 2 subcarrier_map = mapping.get_subcarrier_map(fft_len, active_subcarriers, dc_free=True) print(subcarrier_map) filename = '/lhome/records/gfdm_replay_ref_frame_time_synced.dat' # filename = '/lhome/records/gfdm_gr_fg_synced_frames.dat' # filename = '/lhome/records/gfdm_ref_frame_50ms_slice.dat' slice_len = 800 offset = 0 n_frames = 200 frame_start = 0 frame_end = 800 frame = converter.load_gr_iq_file(filename)[offset:] n_max_frames = int(len(frame) // slice_len) print('max number of frames:', n_max_frames) frame = frame[2000 * slice_len:2000 * slice_len + slice_len * n_frames] frames = np.reshape(frame, (-1, slice_len)) # frames = frames[:, frame_start:frame_end] # frame = converter.load_gr_iq_file(filename) print('num samples', len(frame)) # f_frame = np.fft.fft(frame) # # plt.semilogy(np.abs(f_frame)) # plt.plot(np.abs(frame)) # plt.show() # for f in frames: # plt.plot(np.abs(f)) # # # # # # plt.semilogy(*signal.welch(frame)) # plt.show() # return ref_frame, modulated_frame, x_preamble, data, freq_filter_taps = validation_utils.generate_reference_frame(timeslots, fft_len, active_subcarriers, cp_len, cs_len, alpha) #ref_frame, modulated_frame, x_preamble, data, freq_filter_taps = validation_utils.generate_sc_qpsk_frame(timeslots, fft_len, active_subcarriers, cp_len, cs_len, alpha) rx_kernel = cgfdm.py_receiver_kernel_cc(timeslots, fft_len, 2, freq_filter_taps) demapper = cgfdm.py_resource_demapper_kernel_cc(timeslots, fft_len, active_subcarriers, subcarrier_map, True) # rx_oversampled(frames, ref_frame, modulated_frame, x_preamble, data, rx_kernel, demapper, timeslots, fft_len, cp_len, cs_len) # rx_nyquist_sampled(frames, ref_frame, modulated_frame, x_preamble, data, rx_kernel, demapper, timeslots, fft_len, cp_len, cs_len) rx_demodulate(frames, ref_frame, modulated_frame, x_preamble, data, rx_kernel, demapper, timeslots, fft_len, cp_len, cs_len) return
def main(): np.set_printoptions(precision=2, linewidth=150) alpha = .2 active_subcarriers = 52 timeslots = 9 fft_len = 64 cp_len = fft_len // 2 cs_len = cp_len // 2 subcarrier_map = mapping.get_subcarrier_map(fft_len, active_subcarriers, dc_free=True) ref_frame, modulated_frame, x_preamble, data, freq_filter_taps = generate_integrated_frame( timeslots, fft_len, active_subcarriers, cp_len, cs_len, alpha) test_frame = np.concatenate( (.001 * utils.get_random_samples(1000), ref_frame, .001 * utils.get_random_samples(1000)))
def modulate_mapped_gfdm_block(data, ts, sc, active_sc, overlap, alpha): smap = get_subcarrier_map(sc, active_sc) dm = map_to_waveform_resource_grid(data, active_sc, sc, smap).T H = get_frequency_domain_filter('rrc', alpha, ts, sc, overlap) return gfdm_modulate_block(dm, H, ts, sc, overlap, False)