예제 #1
0
class TestReturnObject(object):
    s = signals.ResampledQAM(16, 2 ** 16, fb=20e9, fs=40e9, nmodes=2)
    os = 2

    def test_apply_filter_basic(self):
        s2 = cimpairments.simulate_transmission(self.s, self.s.fb, self.s.fs, snr=20, dgd=100e-12)
        wx, err = equalisation.equalise_signal(s2, 1e-3, Ntaps=11)
        s3 = equalisation.apply_filter(s2, wx)
        assert type(s3) is type(self.s)

    def test_eq_applykw(self):
        s2 = cimpairments.simulate_transmission(self.s, self.s.fb, self.s.fs, snr=20, dgd=100e-12)
        s3, wx, err = equalisation.equalise_signal(s2, 1e-3, Ntaps=11, apply=True)
        assert type(s3) is type(self.s)

    def test_eq_applykw_dual(self):
        s2 = cimpairments.simulate_transmission(self.s, self.s.fb, self.s.fs, snr=20, dgd=100e-12)
        s3, wx, err = equalisation.dual_mode_equalisation(s2, (1e-3, 1e-3), 11, apply=True)
        assert type(s3) is type(self.s)

    @pytest.mark.xfail(reason="The core equalisation functions are not expected to preserve subclasses")
    def test_apply_filter_adv(self):
        s2 = cimpairments.simulate_transmission(self.s, self.s.fb, self.s.fs, snr=20, dgd=100e-12)
        wx, err = cequalisation.equalise_signal(s2, self.os, 1e-3, s2.M, Ntaps=11)
        s3 = equalisation.apply_filter(s2, self.os, wx)
        assert type(s3) is type(self.s)
예제 #2
0
 def test_nd_dualmode(self, N):
     import numpy as np
     from qampy import impairments
     s = signals.ResampledQAM(16, 2**16, fb=20e9, fs=40e9, nmodes=N)
     s2 = impairments.change_snr(s, 25)
     E, wx, err = equalisation.dual_mode_equalisation(
         s2, (1e-3, 1e-3), 11, apply=True, adaptive_stepsize=(True, True))
     assert np.mean(E.cal_ber() < 1e-3)
예제 #3
0
 def test_preserveattr(self, attr):
     s1 = signals.ResampledQAM(16, 1000, fs=2)
     s2 = s1 + 10
     a1 = getattr(s1, attr)
     a2 = getattr(s2, attr)
     if isinstance(a1, np.ndarray):
         npt.assert_array_almost_equal(a1, a2)
     else:
         assert a1 == a2
예제 #4
0
class TestReturnObjects(object):
    s = signals.ResampledQAM(16, 2**14, fs=2, nmodes=2)

    def test_rotate_field(self):
        s2 = impairments.rotate_field(self.s, np.pi / 3)
        assert type(self.s) is type(s2)

    def test_apply_PMD(self):
        s2 = impairments.apply_PMD(self.s, np.pi / 3, 1e-3)
        assert type(self.s) is type(s2)

    def test_apply_phase_noise(self):
        s2 = impairments.apply_phase_noise(self.s, 1e-3)
        assert type(self.s) is type(s2)

    def test_change_snr(self):
        s2 = impairments.change_snr(self.s, 30)
        assert type(self.s) is type(s2)

    def test_add_carrier_offset(self):
        s2 = impairments.add_carrier_offset(self.s, 1e-3)
        assert type(self.s) is type(s2)

    def test_simulate_transmission(self):
        s2 = impairments.simulate_transmission(self.s,
                                               snr=20,
                                               freq_off=1e-4,
                                               lwdth=1e-4,
                                               dgd=1e-2)
        assert type(self.s) is type(s2)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_add_awgn(self, attr):
        s2 = impairments.add_awgn(self.s, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_rotate_field_attr(self, attr):
        s2 = impairments.rotate_field(self.s, np.pi / 3)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_apply_PMD_attr(self, attr):
        s2 = impairments.apply_PMD(self.s, np.pi / 3, 1e-3)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_apply_phase_noise_attr(self, attr):
        s2 = impairments.apply_phase_noise(self.s, 1e-3)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_add_awgn_attr(self, attr):
        s2 = impairments.add_awgn(self.s, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)
예제 #5
0
class TestReturnObjectsAdv(object):
    s = signals.ResampledQAM(16, 2 ** 14, fs=2, nmodes=2)

    @pytest.mark.xfail(reason="core version does not preserve subclass")
    def test_pre_filter(self):
        s2 = cfilter.pre_filter(self.s, 0.01)
        assert type(self.s) is type(s2)

    @pytest.mark.xfail(reason="core version does not preserve subclass")
    def test_filter_signal(self):
        s2 = cfilter.filter_signal(self.s, self.s.fs, 0.001)
        assert type(self.s) is type(s2)

    def test_filter_signal_analog(self):
        s2 = cfilter.filter_signal_analog(self.s, self.s.fs, 0.001)
        assert type(self.s) is type(s2)

    @pytest.mark.xfail(reason="core version does not preserve subclass")
    def test_rrcos_pulseshaping(self):
        s2 = cfilter.rrcos_pulseshaping(self.s, self.s.fs, 1 / self.s.fb, 0.1)
        assert type(self.s) is type(s2)

    def test_mvg_avg(self):
        s2 = cfilter.moving_average(self.s)
        assert type(self.s) is type(s2)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    @pytest.mark.xfail(reason="core version does not preserve subclass")
    def test_pre_filter_attr(self, attr):
        s2 = cfilter.pre_filter(self.s, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.xfail(reason="core version does not preserve subclass")
    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_filter_signal_attr(self, attr):
        s2 = cfilter.filter_signal(self.s, self.s.fs, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_filter_signal_analog_attr(self, attr):
        s2 = cfilter.filter_signal_analog(self.s, self.s.fs, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.xfail(reason="core version does not preserve subclass")
    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_rrcos_pulseshaping_attr(self, attr):
        s2 = cfilter.rrcos_pulseshaping(self.s, self.s.fs, 1 / self.s.fb, 0.1)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_mvg_avg_attr(self, attr):
        s2 = cfilter.moving_average(self.s)
        assert getattr(self.s, attr) is getattr(s2, attr)
예제 #6
0
class TestReturnObjectsBasic(object):
    s = signals.ResampledQAM(16, 2 ** 14, fs=2, nmodes=2)

    def test_pre_filter(self):
        s2 = filtering.pre_filter(self.s, 0.01)
        assert type(self.s) is type(s2)

    @pytest.mark.xfail(reason="filter_signal is not exported to basic")
    def test_filter_signal(self):
        s2 = filtering.filter_signal(self.s, self.s.fs, 0.001)
        assert type(self.s) is type(s2)

    def test_filter_signal_analog(self):
        s2 = filtering.filter_signal_analog(self.s, 0.001)
        assert type(self.s) is type(s2)

    def test_rrcos_pulseshaping(self):
        s2 = filtering.rrcos_pulseshaping(self.s, 0.1)
        assert type(self.s) is type(s2)

    def test_mvg_avg(self):
        s2 = filtering.moving_average(self.s)
        assert type(self.s) is type(s2)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_pre_filter_attr(self, attr):
        s2 = filtering.pre_filter(self.s, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.xfail(reason="filter_signal is not exported to basic")
    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_filter_signal_attr(self, attr):
        s2 = filtering.filter_signal(self.s, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_filter_signal_analog_attr(self, attr):
        s2 = filtering.filter_signal_analog(self.s, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_rrcos_pulseshaping_attr(self, attr):
        s2 = filtering.rrcos_pulseshaping(self.s, 0.1)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_mvg_avg_attr(self, attr):
        s2 = filtering.moving_average(self.s)
        assert getattr(self.s, attr) is getattr(s2, attr)
예제 #7
0
 def test_ber_value(self):
     s = signals.ResampledQAM(16, 2**16)
     s += 0.05 * (np.random.randn(2**16) + 1.j * np.random.randn(2**16))
     ber = s.cal_ber()
     assert ber[0] == 0
예제 #8
0
 def test_ber_shape(self, nmodes):
     s = signals.ResampledQAM(16, 2**16, nmodes=nmodes)
     ber = s.cal_ber()
     assert ber.shape[0] == nmodes
예제 #9
0
 def test_evm_value(self):
     s = signals.ResampledQAM(16, 2**16)
     evm = s.cal_evm()
     assert evm[0] < 1e-4
예제 #10
0
 def test_evm_shape(self, nmodes):
     s = signals.ResampledQAM(16, 2**16, nmodes=nmodes)
     evm = s.cal_evm()
     assert evm.shape[0] == nmodes
예제 #11
0
 def test_mvg_avg(self, dtype):
     s = signals.ResampledQAM(16, 2 ** 14, fs=2, nmodes=2, dtype=dtype)
     s2 = filtering.moving_average(s)
     assert type(s) is type(s2)
     assert s.dtype is s2.dtype
예제 #12
0
 def test_add_carrier_offset(self, dtype):
     s = signals.ResampledQAM(16, 2**14, fs=2, nmodes=2, dtype=dtype)
     s2 = impairments.add_carrier_offset(s, 1e-3)
     assert np.dtype(dtype) is s2.dtype
예제 #13
0
 def test_apply_phase_noise(self, dtype):
     s = signals.ResampledQAM(16, 2**14, fs=2, nmodes=2, dtype=dtype)
     s2 = impairments.apply_phase_noise(s, 1e-3)
     assert np.dtype(dtype) is s2.dtype
예제 #14
0
theta = 1 * np.pi / 4.5
theta2 = np.pi / 4.3
M = 64
snr = 25
muCMA = 0.19e-2
muRDE = 0.19e-2
ntaps = 15
t_pmd = 100.e-12
Ncma = None
Nrde = None

sig = signals.ResampledQAM(M,
                           N,
                           nmodes=2,
                           fb=fb,
                           fs=fs,
                           resamplekwargs={
                               "beta": 0.01,
                               "renormalise": True
                           })
sig = impairments.change_snr(sig, snr)

SS = impairments.apply_PMD(sig, theta, t_pmd)

E_m, wxy_m, (err_m, err_rde_m) = equalisation.dual_mode_equalisation(
    SS.astype(np.complex64), (muCMA, muRDE),
    ntaps,
    TrSyms=(Ncma, Nrde),
    methods=("mcma", "sbd"),
    adaptive_stepsize=(True, True))
E_s, wxy_s, (err_s, err_rde_s) = equalisation.dual_mode_equalisation(
예제 #15
0
 def test_cal_gmi_shape(self, nmodes):
     s = signals.ResampledQAM(16, 2**16, nmodes=nmodes)
     gmi, gmi_pb = s.cal_gmi()
     assert gmi.shape[0] == nmodes
예제 #16
0
 def test_est_snr_shape(self, nmodes):
     s = signals.ResampledQAM(16, 2**16, nmodes=nmodes)
     snr = s.est_snr()
     assert snr.shape[0] == nmodes
예제 #17
0
 def test_attr_present(self, attr):
     s = signals.ResampledQAM(128, 2**12)
     assert getattr(s, attr) is not None
예제 #18
0
 def test_filter_signal_analog_attr(self, attr):
     s = signals.ResampledQAM(16, 2 ** 14, fs=2, nmodes=2)
     s2 = filtering.filter_signal_analog(s, 0.01)
     assert getattr(s, attr) is getattr(s2, attr)
예제 #19
0
 def test_rrcos_pulseshaping_attr(self, attr):
     s = signals.ResampledQAM(16, 2 ** 14, fs=2, nmodes=2)
     s2 = filtering.rrcos_pulseshaping(s, 0.1)
     assert getattr(s, attr) is getattr(s2, attr)
예제 #20
0
 def test_mvg_avg_attr(self, attr):
     s = signals.ResampledQAM(16, 2 ** 14, fs=2, nmodes=2)
     s2 = filtering.moving_average(s)
     assert getattr(s, attr) is getattr(s2, attr)
예제 #21
0
 def test_est_snr_value(self):
     s = signals.ResampledQAM(16, 2**16)
     snr = s.est_snr()
     assert snr[0] > 1e25
예제 #22
0
 def test_samplerate(self, os, nmodes):
     N = 1000
     Nn = os * N
     s = signals.ResampledQAM(16, N, fs=os, nmodes=nmodes)
     assert s.shape == (nmodes, Nn)
예제 #23
0
 def test_cal_gmi_value(self, M):
     s = signals.ResampledQAM(M, 2**16)
     s += 0.0004 * (np.random.randn(2**16) + 1.j * np.random.randn(2**16))
     nbits = np.log2(M)
     gmi, gmi_pb = s.cal_gmi()
     npt.assert_almost_equal(gmi[0], nbits)
예제 #24
0
 def test_symbols_implace_op(self):
     s = signals.ResampledQAM(4, 2**12)
     avg1 = (abs(s.symbols)**2).mean()
     s += 5
     avg2 = (abs(s.symbols)**2).mean()
     npt.assert_array_almost_equal(avg1, avg2)
예제 #25
0
 def test_rotate_field(self, dtype):
     s = signals.ResampledQAM(16, 2**14, fs=2, nmodes=2, dtype=dtype)
     s2 = impairments.rotate_field(s, np.pi / 3)
     assert np.dtype(dtype) is s2.dtype
예제 #26
0
 def test_symbolinherit3(self):
     N = 1000
     s = signals.ResampledQAM(16, N, fs=2)
     sn = s.resample(1, beta=0.2)
     npt.assert_array_almost_equal(s.symbols, sn.symbols)
예제 #27
0
 def test_change_snr(self, dtype):
     s = signals.ResampledQAM(16, 2**14, fs=2, nmodes=2, dtype=dtype)
     s2 = impairments.change_snr(s, 30)
     assert np.dtype(dtype) is s2.dtype
예제 #28
0
 def test_symbol_attr(self, attr):
     s = signals.ResampledQAM(16, 2000, fs=2)
     a = getattr(s, attr)
     assert a is not None
예제 #29
0
class TestReturnObjects(object):
    s = signals.ResampledQAM(16, 2**14, fs=2, nmodes=2)

    def test_rotate_field(self):
        s2 = impairments.rotate_field(self.s, np.pi / 3)
        assert type(self.s) is type(s2)

    def test_apply_PMD(self):
        s2 = impairments.apply_PMD(self.s, np.pi / 3, 1e-3)
        assert type(self.s) is type(s2)

    def test_apply_phase_noise(self):
        s2 = impairments.apply_phase_noise(self.s, 1e-3)
        assert type(self.s) is type(s2)

    def test_change_snr(self):
        s2 = impairments.change_snr(self.s, 30)
        assert type(self.s) is type(s2)

    def test_add_carrier_offset(self):
        s2 = impairments.add_carrier_offset(self.s, 1e-3)
        assert type(self.s) is type(s2)

    def test_simulate_transmission(self):
        s2 = impairments.simulate_transmission(self.s,
                                               snr=20,
                                               freq_off=1e-4,
                                               lwdth=1e-4,
                                               dgd=1e-2)
        assert type(self.s) is type(s2)

    def test_sim_tx_response(self):
        s = signals.SignalQAMGrayCoded(64, 2**15, fb=20e9, nmodes=1)
        s2 = s.resample(s.fb * 2, beta=0.1)
        s3 = impairments.sim_tx_response(s2)
        assert type(s) is type(s2)

    def test_sim_DAC_response(self):
        s = signals.SignalQAMGrayCoded(64, 2**15, fb=20e9, nmodes=1)
        s2 = s.resample(s.fb * 2, beta=0.1)
        s3 = impairments.sim_DAC_response(s2)
        assert type(s) is type(s2)

    def test_sim_mod_response(self):
        s = signals.SignalQAMGrayCoded(64, 2**15, fb=20e9, nmodes=1)
        s2 = s.resample(s.fb * 2, beta=0.1)
        s3 = impairments.sim_mod_response(s2)
        assert type(s) is type(s2)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_sim_tx_response(self, attr):
        s2 = impairments.sim_tx_response(self.s, dac_params={"cutoff": 0.9})
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_sim_DAC_response(self, attr):
        s2 = impairments.sim_DAC_response(self.s, cutoff=0.9)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_sim_mod_response(self, attr):
        s2 = impairments.sim_mod_response(self.s)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_add_awgn(self, attr):
        s2 = impairments.add_awgn(self.s, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_rotate_field_attr(self, attr):
        s2 = impairments.rotate_field(self.s, np.pi / 3)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_apply_PMD_attr(self, attr):
        s2 = impairments.apply_PMD(self.s, np.pi / 3, 1e-3)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_apply_phase_noise_attr(self, attr):
        s2 = impairments.apply_phase_noise(self.s, 1e-3)
        assert getattr(self.s, attr) is getattr(s2, attr)

    @pytest.mark.parametrize("attr", ["fs", "symbols", "fb"])
    def test_add_awgn_attr(self, attr):
        s2 = impairments.add_awgn(self.s, 0.01)
        assert getattr(self.s, attr) is getattr(s2, attr)
예제 #30
0
 def test_ser_value(self):
     s = signals.ResampledQAM(16, 2**16)
     ser = s.cal_ser()
     assert ser[0] == 0