def test_bps_two_stage(self, dtype, angle, method): s = signals.SignalQAMGrayCoded(32, 2**12, dtype=dtype) s3 = s*np.exp(1.j*angle) s2, ph = phaserec.bps_twostage(s3, 32//2 , 11, method=method) o = ph[0][20:-20]+angle ser = s2[:,20:-20].cal_ser() npt.assert_allclose(0, ser) npt.assert_allclose(0, o, atol=np.pi/4/32)
def test_phaserec_bps_2stage(lw, M): fb = 40.e9 os = 1 fs = os * fb N = 2**17 snr = 30 shiftN = np.random.randint(-N / 2, N / 2, 1) s = signals.SignalQAMGrayCoded(M, N, fb=fb) s = s.resample(fs, beta=0.1, renormalise=True) s = impairments.change_snr(s, snr) s = np.roll(s, shiftN, axis=1) pp = impairments.apply_phase_noise(s, lw) recoverd, ph1 = phaserec.bps_twostage(pp, max(4, M // 2), 14, method='pyt') recoverd = helpers.dump_edges(recoverd, 20) ser = recoverd.cal_ser() npt.assert_allclose(ser, 0)
fb = 40.e9 os = 1 fs = os*fb N = 3*10**5 M = 64 snr = 30 lw_LO = np.linspace(10e1, 1000e1, 4) #lw_LO = [100e3] sers = [] for lw in lw_LO: shiftN = np.random.randint(-N/2, N/2, 1) s = signals.SignalQAMGrayCoded(M, N, fb=fb) s = s.resample(fs, beta=0.1, renormaise=True) s = impairments.change_snr(s, snr) s = np.roll(s, shiftN, axis=1) pp = impairments.apply_phase_noise(s, lw) recoverd, ph1 = phaserec.bps_twostage(pp, 28, s.coded_symbols, 14, method='pyx') recoverd_2, ph2 = phaserec.bps(pp, 64, s.coded_symbols, 14, method='pyx') recoverd = helpers.dump_edges(recoverd, 20) recoverd_2 = helpers.dump_edges(recoverd_2, 20) ser = recoverd.cal_ser() ser2 = recoverd_2.cal_ser() print("1 stage pyx ser=%g"%ser) print("2 stage pyx ser=%g"%ser2)
def test_bps_twostage(self, ndim): s = signals.SignalQAMGrayCoded(32, 2 ** 16, fb=20e9, nmodes=ndim) s2, ph = phaserec.bps_twostage(s, 32, 10) assert type(s2) is type(s)
def test_bps_two_stage(self, dtype): s = signals.SignalQAMGrayCoded(32, 2**12, dtype=dtype) s *= np.exp(1.j*np.pi/3) s2, ph = phaserec.bps_twostage(s, 32, 10, method="pyx") assert s2.dtype is np.dtype(dtype) assert ph.dtype.itemsize is np.dtype(dtype).itemsize//2
import numpy as np from qampy import impairments, phaserec from qampy import signals, helpers fb = 40.e9 os = 1 fs = os * fb N = 3 * 10**5 M = 64 snr = 30 lw_LO = np.linspace(10e1, 1000e1, 4) #lw_LO = [100e3] sers = [] for lw in lw_LO: shiftN = np.random.randint(-N / 2, N / 2, 1) s = signals.SignalQAMGrayCoded(M, N, fb=fb) s = s.resample(fs, beta=0.1, renormaise=True) s = impairments.change_snr(s, snr) s = np.roll(s, shiftN, axis=1) pp = impairments.apply_phase_noise(s, lw) recoverd, ph1 = phaserec.bps_twostage(pp, 28, 14, method='pyx') recoverd_2, ph2 = phaserec.bps(pp, 64, 14, method='pyx') recoverd = helpers.dump_edges(recoverd, 20) recoverd_2 = helpers.dump_edges(recoverd_2, 20) ser = recoverd.cal_ser() ser2 = recoverd_2.cal_ser() print("1 stage pyx ser=%g" % ser) print("2 stage pyx ser=%g" % ser2)