Example #1
0
 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)
Example #3
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)


Example #4
0
 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)
Example #5
0
 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
Example #6
0
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)