Esempio n. 1
0
 def test_recovery_with_pmd(self, theta, dgd):
     snr = 30.
     ntaps = 41
     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 = impairments.apply_PMD(sig3, theta * np.pi, dgd)
     sig4 = sig3[:, 20000:]
     sig4.sync2frame(corr_coarse_foe=False)
     s1, s2 = equalisation.pilot_equaliser(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(synced=False)
     snr_m = s2.est_snr(synced=False)
     snr_db = 10 * np.log10(np.mean(snr_m))
     assert np.mean(ser) < 1e-4
Esempio n. 2
0
 def test_coarse_freq_offset(self, fo, mode_offset):
     snr = 37
     ntaps = 19
     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(sig2,
                                              snr,
                                              freq_off=fo,
                                              modal_delay=[0, mode_offset])
     sig4 = helpers.normalise_and_center(sig3)
     sig4 = sig4[:, 2000:]
     sig4.sync2frame(corr_coarse_foe=True)
     s1, s2 = equalisation.pilot_equaliser(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
Esempio n. 3
0
 def test_data_mix_realandcomplexmethods(self, method):
     # currently we do not support to mix real-valued and complex equaliser methods
     sig = signals.SignalWithPilots(64,
                                    2**16,
                                    1024,
                                    32,
                                    nframes=2,
                                    nmodes=2,
                                    fb=20e9)
     s2 = sig.resample(sig.fb * 2, beta=0.1)
     s3 = impairments.simulate_transmission(s2,
                                            25,
                                            modal_delay=[10000, 10000])
     s3.sync2frame()
     with pytest.raises(ValueError):
         equalisation.pilot_equaliser(s3, (1e-3, 1e-3),
                                      11,
                                      methods=(method, "sbd"))
Esempio n. 4
0
 def test_pilot_based(self, rollframe, modal_delay, method):
     from qampy import phaserec
     mysig = signals.SignalWithPilots(64,2**16,2**10,32,nmodes=2,Mpilots=4,nframes=3,fb=24e9)
     mysig2 = mysig.resample(mysig.fb*2,beta=0.01)
     mysig3 = impairments.simulate_transmission(mysig2,snr=25,dgd=10e-12, freq_off=100e6,lwdth=100e3,roll_frame_sync=rollframe, modal_delay=modal_delay)
     mysig3.sync2frame()
     mysig3.corr_foe()
     wxy, eq_sig = equalisation.pilot_equaliser(mysig3, (1e-3, 1e-3), 45, foe_comp=False, methods=method)
     cpe_sig, ph = phaserec.pilot_cpe(eq_sig,N=5,use_seq=False)
     gmi = np.mean(cpe_sig.cal_gmi()[0])
     assert gmi > 5.5
Esempio 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_equaliser(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
Esempio n. 6
0
 def test_apply_filter_frames(self, frames, modal_delay):
     Ntaps = 45
     s = signals.SignalWithPilots(64,
                                  2**16,
                                  1024,
                                  32,
                                  nframes=4,
                                  nmodes=2,
                                  fb=24e9)
     s2 = s.resample(2 * s.fb, beta=0.1, renormalise=True)
     s3 = impairments.simulate_transmission(
         s2, 30, modal_delay=[2000, 2000 + modal_delay])
     s3.sync2frame(Ntaps=Ntaps - 14 * 2)
     wx = equalisation.pilot_equaliser(s3,
                                       1e-3,
                                       Ntaps,
                                       apply=False,
                                       foe_comp=False)
     sout = equalisation.apply_filter(s3, wx, frames=frames)
     assert sout.shape[-1] == s.frame_len * len(frames)
     for ber in sout.cal_ber():
         assert ber < 1e-3
Esempio n. 7
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_equaliser(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_oversampling_ratios(self, os, taps):
     snr = 30.
     sig = signals.SignalWithPilots(64,
                                    2**16,
                                    1024,
                                    32,
                                    nframes=3,
                                    nmodes=2,
                                    fb=24e9)
     sig2 = sig.resample(os * sig.fb, beta=0.1, renormalise=True)
     sig2 = impairments.change_snr(sig2, snr)
     #sig3 = sig2[::-1]
     #sig4 = sig3[:, 20000:]
     sig2.sync2frame(corr_coarse_foe=False)
     s1, s2 = equalisation.pilot_equaliser(sig2, [1e-3, 1e-3],
                                           17 + taps * 2,
                                           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_ber(synced=True)
     assert np.mean(ser) < 1e-3
Esempio n. 9
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_equaliser(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")
Esempio n. 10
0
                                 Mpilots=4,
                                 nframes=3,
                                 fb=24e9)
mysig2 = mysig.resample(mysig.fb * 2, beta=0.01)
mysig3 = impairments.simulate_transmission(mysig2,
                                           snr=20,
                                           dgd=10e-12,
                                           freq_off=00e6,
                                           lwdth=000e3,
                                           roll_frame_sync=True,
                                           modal_delay=[2000, 3000])
mysig3.sync2frame()
print(mysig3.shiftfctrs)
mysig3.corr_foe()
wxy, eq_sig = equalisation.pilot_equaliser(mysig3, (1e-3, 1e-3),
                                           45,
                                           foe_comp=False,
                                           methods=("cma", "sbd_data"))
cpe_sig, ph = phaserec.pilot_cpe(eq_sig, N=5, use_seq=False)
#cpe_sig = eq_sig
print(cpe_sig.cal_gmi())
plt.figure()
plt.subplot(121)
plt.hist2d(cpe_sig[0].real, cpe_sig[0].imag, bins=200)
#plt.plot(wxy[0][0].real, '-k')
#plt.plot(wxy[0][1].real, '--k')
#plt.plot(wxy[0][0].imag, '-c')
#plt.plot(wxy[0][1].imag, '--c')
plt.subplot(122)
plt.hist2d(cpe_sig[1].real, cpe_sig[1].imag, bins=200)
#plt.plot(wxy[1][0].real, '-k')
#plt.plot(wxy[1][1].real, '--k')