def test_freq_offset(self, fo): snr = 37 ntaps = 17 sig = signals.SignalWithPilots(64, 2**16, 1024, 32, nframes=3, nmodes=2, fb=24e9) sig2 = sig.resample(2*sig.fb, beta=0.01, renormalise=True) sig3 = impairments.simulate_transmission(sig, snr, freq_off=fo) sig4 = helpers.normalise_and_center(sig3) sig4.sync2frame(corr_coarse_foe=False) s1, s2 = equalisation.pilot_equalizer(sig4, [1e-3, 1e-3], ntaps, True, adaptive_stepsize=True, foe_comp=True) d, ph = phaserec.pilot_cpe(s2, nframes=1) assert np.mean(d.cal_ber()) < 1e-5
def test_cpe(self,lw): snr = 37 ntaps = 17 sig = signals.SignalWithPilots(64, 2**16, 1024, 32, nframes=3, nmodes=2, fb=24e9) sig2 = sig.resample(2*sig.fb, beta=0.01, renormalise=True) sig2 = impairments.apply_phase_noise(sig2, 100e3) sig3 = impairments.change_snr(sig2, snr) sig4 = sig3[:, 20000:] sig4.sync2frame(corr_coarse_foe=False) s1, s2 = equalisation.pilot_equalizer(sig4, [1e-3, 1e-3], ntaps, True, adaptive_stepsize=True, foe_comp=False) d, ph = phaserec.pilot_cpe(s2, nframes=1) assert np.mean(d.cal_ber()) < 1e-5
def test_swap_pols(self): snr = 30. sig = signals.SignalWithPilots(64, 2**16, 1024, 32, nframes=3, nmodes=2, fb=24e9) sig2 = sig.resample(2*sig.fb, beta=0.1, renormalise=True) sig2 = impairments.change_snr(sig2, snr) sig3 = sig2[::-1] sig4 = sig3[:, 20000:] sig4.sync2frame(corr_coarse_foe=False) s1, s2 = equalisation.pilot_equalizer(sig4, [1e-3, 1e-3], 17, True, adaptive_stepsize=True, foe_comp=False) ph = phaserec.find_pilot_const_phase(s2.extract_pilots()[:,:s2._pilot_seq_len], s2.pilot_seq) s2 = phaserec.correct_pilot_const_phase(s2, ph) ser = s2.cal_ser(synced=True) assert np.mean(ser) < 1e-4
def test_recovery_with_rotation(self, theta): snr = 30. ntaps = 17 sig = signals.SignalWithPilots(64, 2**16, 1024, 32, nframes=3, nmodes=2, fb=24e9) sig2 = sig.resample(2*sig.fb, beta=0.1, renormalise=True) sig3 = impairments.change_snr(sig2, snr) sig3 = core.impairments.rotate_field(sig3, np.pi*theta) sig4 = sig3[:, 20000:] sig4.sync2frame(corr_coarse_foe=False) s1, s2 = equalisation.pilot_equalizer(sig4, [5e-3, 5e-3], ntaps, True, adaptive_stepsize=True, foe_comp=False) ph = phaserec.find_pilot_const_phase(s2.extract_pilots()[:,:s2._pilot_seq_len], s2.pilot_seq) s2 = phaserec.correct_pilot_const_phase(s2, ph) ser = s2.cal_ser() assert np.mean(ser) < 1e-4
def run_pilot_receiver2(rec_signal, process_frame_id=0, foe_comp=True, os=2, M=128, Numtaps=(17, 45), frame_length=2**16, method=('cma', 'cma'), pilot_seq_len=512, pilot_ins_ratio=32, Niter=(10, 30), mu=(1e-3, 1e-3), adap_step=(True, True), cpe_average=5, use_cpe_pilot_ratio=1, remove_inital_cpe_output=True, remove_phase_pilots=True, nframes=1): rec_signal.sync2frame(Ntaps=Numtaps[0], mu=mu[0], method=method[0], adaptive_stepsize=adap_step[0]) #shift_factor = pilotbased_receiver.correct_shifts(rec_signal.shiftfctrs, Numtaps, rec_signal.os) #signal = np.roll(signal, -shift_factor[shift_factor>=0].min(), axis=-1) #shift_factors -= shift_factors[shift_factors>=0].min() #signal.shiftfctrs = shift_factors taps_all, eq_mode_sig = pilot_equalizer(rec_signal, mu, Numtaps[1], apply=True, foe_comp=foe_comp, adaptive_stepsize=adap_step[1], Niter=Niter[1], methods=method) #symbs, trace = pilotbased_receiver.pilot_based_cpe(eq_mode_sig[:, eq_mode_sig._pilot_seq_len:eq_mode_sig.frame_len], #eq_mode_sig.ph_pilots, eq_mode_sig._pilot_ins_rat, #use_pilot_ratio=use_cpe_pilot_ratio, num_average=cpe_average, #remove_phase_pilots=True) symbs, trace = phaserec.pilot_cpe(eq_mode_sig, N=cpe_average, pilot_rat=use_cpe_pilot_ratio, nframes=1, use_seq=True) #symbs = eq_mode_sig return symbs, trace, eq_mode_sig, taps_all
sig2 = sig.resample(2 * sig.fb, beta=0.01, renormalise=True) sig2 = impairments.apply_phase_noise(sig2, 100e3) sig3 = impairments.change_snr(sig2, snr) sig3 = core.impairments.rotate_field(sig3, np.pi / 0.1) #sig4 = sig3[::-1, 20000:] #sig4[0,:] = sig3[1,20000:] #sig4[1,:] = sig3[0,20000:] sig4 = sig3[:, 20000:] #sig4 = impairments.apply_PMD(sig4, theta, dgd) #sig4 = impairments.apply_PMD(sig4, theta, dgd) #sig4[0,:] = sig3[1, 20000:] #sig4[1,:] = sig3[0, 20000:] sig4.sync2frame(Ntaps=ntaps) wx, s1 = equalisation.pilot_equalizer(sig4, [1e-3, 1e-3], ntaps, True, adaptive_stepsize=True) s2, ph = phaserec.pilot_cpe(s1, nframes=1) gmi = s2.cal_gmi() evm = s2.cal_evm() ber = s2.cal_ber() ser = s2.cal_ser() ksnr = s2.est_snr() print("gmi {}".format(gmi)) print("ber {}".format(ber)) print("evm {}".format(evm)) print("snr {}".format(snr)) print("ser {}".format(ser)) plt.figure() plt.subplot(121) plt.title("Without CPE")