def test_dist(self, M1, M2): s = signals.TDHQAMSymbols((M1, M2), 1000, fr=0.5) d1_r = np.min(np.diff(np.unique(s._symbols_M1.real))) d2_r = np.min(np.diff(np.unique(s._symbols_M2.real))) d1_i = np.min(np.diff(np.unique(s._symbols_M1.imag))) d2_i = np.min(np.diff(np.unique(s._symbols_M2.imag))) npt.assert_approx_equal(d1_r, d2_r) npt.assert_approx_equal(d1_i, d2_i)
def test_preserveattr(self, attr): s1 = signals.TDHQAMSymbols((16, 4), 1000, 0.5) 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
def test_from_arrays_ratio(self, r1, r2): import math if math.gcd(r1, r2) > 1: assert True return r = r1 + r2 s1 = signals.SignalQAMGrayCoded(16, 1000 * r1, seed=[1, 2]) s2 = signals.SignalQAMGrayCoded(4, 1000 * r2, seed=[1, 2]) o = signals.TDHQAMSymbols.from_symbol_arrays(s1, s2, r2 / r) o2 = signals.TDHQAMSymbols((16, 4), 1000 * (r1 + r2), fr=r2 / r, seed=[1, 2]) npt.assert_array_almost_equal(o, o2)
def test_ratio(self, r1, r2): import math if math.gcd(r1, r2) > 1: assert True return r = r1 + r2 o = signals.TDHQAMSymbols((16, 4), 1000, fr=r2 / r) for i in range(r): s = o[0, i::r] if i % r < r1: d = np.min(abs(s[:, np.newaxis] - o._symbols_M1), axis=1) npt.assert_array_almost_equal(d, 0) else: d = np.min(abs(s[:, np.newaxis] - o._symbols_M2), axis=1) npt.assert_array_almost_equal(d, 0)
def testclass(self): s = signals.TDHQAMSymbols((16, 4), 1000) type(s._symbols_M1) is signals.SignalQAMGrayCoded type(s._symbols_M2) is signals.SignalQAMGrayCoded
def test_attr_present(self, attr): s = signals.TDHQAMSymbols((64, 128), 2**12) assert getattr(s, attr) is not None
def test_tdhqam(self, dt): s = signals.TDHQAMSymbols((64, 128), 2**12, dtype=dt) assert np.dtype(dt) is s.dtype assert np.dtype(dt) is s._symbols_M1.dtype assert np.dtype(dt) is s._symbols_M2.dtype