예제 #1
0
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
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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)))
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
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
예제 #9
0
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)))
예제 #10
0
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)