Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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")