Ejemplo n.º 1
0
    def test_016_system_mu_STOfrac_quarter_overlap(self):
        print("test_016_system_mu_STOfrac_quarter_overlap")
        self.maxDiff = None
        P1_dB = -10  #too high power leads to false detection
        P2_dB = -7
        R = 8

        tau = int(15 * R * N + 17 * R + 3)

        S1 = (5, 10, 20, 30, 40, 50, 60, 70) * 3
        S2 = (42, 101, 89, 15, 127, 0, 74, 94) * 3

        p1 = lora.gen_packet(SF, S1, R=R)
        p2 = lora.gen_packet(SF, S2, R=R)

        x1 = np.sqrt(10**(P1_dB / 10.0)) * np.concatenate(
            [np.zeros(6), p1, np.zeros(tau)])
        x2 = np.sqrt(10**(P2_dB / 10.0)) * np.concatenate(
            [np.zeros(tau), p2, np.zeros(6)])

        x = np.concatenate([x1 + x2, np.zeros(20 * N * R)])

        S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))
        self.assertEqual(S1, S1_out)
        self.assertEqual(S2, S2_out)
Ejemplo n.º 2
0
    def system_mu(self, STO, CFO):
        print "test_system_mu ", STO, CFO
        self.maxDiff = None
        P1_dB = -12  #too high power leads to false detection
        P2_dB = -9

        tau = int(15 * R * N + STO * R)

        S1 = (5, 10, 20, 30, 40, 50, 60, 70) * 3
        S2 = (42, 101, 89, 15, 127, 0, 74, 94) * 3

        p1 = lora.gen_packet(SF, S1, R=R)
        p2 = lora.gen_packet(SF, S2, R=R)

        x1 = np.sqrt(10**(P1_dB / 10.0)) * np.concatenate(
            [np.zeros(0), p1, np.zeros(tau)])
        x2 = np.sqrt(10**(P2_dB / 10.0)) * np.concatenate(
            [np.zeros(tau), p2, np.zeros(0)])

        x2 = lora.add_cfo(SF, x2, CFO, R=R)

        x = np.concatenate([x1 + x2, np.zeros(20 * N * R)])

        S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))
        self.assertEqual(S1, S1_out)
        self.assertEqual(S2, S2_out)
Ejemplo n.º 3
0
    def test_015_system_mu_STOfrac_quarter_inside(
        self
    ):  #very unstable can work or not between tw0 consecutive executions
        print("test_015_system_mu_STOfrac_quarter_inside")
        self.maxDiff = None
        P1_dB = -10  #too high power leads to false detection
        P2_dB = -7
        R = 8

        tau = int(15 * R * N + 32 * R + 1)

        S1 = (5, 10, 20, 30, 40, 50, 60, 70) * 3
        S2 = (42, 101, 89, 15, 127, 0, 74, 94) * 3

        p1 = lora.gen_packet(SF, S1, R=R)
        p2 = lora.gen_packet(SF, S2, R=R)

        x1 = np.sqrt(10**(P1_dB / 10.0)) * np.concatenate(
            [np.zeros(0), p1, np.zeros(tau)])
        x2 = np.sqrt(10**(P2_dB / 10.0)) * np.concatenate(
            [np.zeros(tau), p2, np.zeros(0)])

        x = np.concatenate([x1 + x2, np.zeros(20 * N * R)])

        S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))
        self.assertEqual(S1, S1_out)
        self.assertEqual(S2, S2_out)
Ejemplo n.º 4
0
    def test_001_simple_packet(self):
        print("test_001_simple_packet")

        S = np.arange(Nsyms)
        x = np.concatenate([lora.gen_packet(SF, S, R=R), np.zeros(10 * N * R)])

        user_tags = {
            0: ('new_user', {
                'power': 1.0,
                'sto_int': 0,
                'sto_frac': 0.0,
                'cfo_int': 0,
                'cfo_frac': 0.0
            })
        }
        y, window_tags = self._feed_synchro(x, user_tags)

        self.assertEqual(len(window_tags), 13 + Nsyms)
        self.check_preamble(window_tags)

        # Payload
        for i, w in enumerate(window_tags[13:13 + Nsyms]):
            self.assertEqual(w.offset, N * 12 + N / 4 + N * i)
            self.assertEqual(w.value['power1'], 1)
            self.assertEqual(w.value['win_len'], N)
            self.assertEqual(w.value['Tu'], SYNC_TYPE_PAYLOAD)
            self.assertEqual(w.value['Ti1'], SYNC_TYPE_VOID)
            self.assertEqual(w.value['Ti2'], SYNC_TYPE_VOID)
Ejemplo n.º 5
0
    def test_052_full_packet(self):
        S = [0, 64, 32, 96, 0, 64, 24, 100] * 4
        x = np.concatenate([lora.gen_packet(SF, S, R=R), np.zeros(15 * N * R)])

        y, detects = self._feed_detector(x)

        self.assertEqual(len(detects), 1)
        d = detects[0]
        self.assertEqual(d.offset, BUFFER_LEN)
Ejemplo n.º 6
0
    def test_001_system_su(self):
        print("test_001_system_su")

        R = 8
        S1 = (0, 10, 20, 30, 40, 50, 60, 70)

        x = np.concatenate(
            [lora.gen_packet(SF, S1, R=R),
             np.zeros(15 * N * R)])
        S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))

        self.assertEqual(S1, S1_out)
        self.assertEqual(len(S2_out), 0)
Ejemplo n.º 7
0
    def test_005_system_su_twice(self):
        print("test_005_system_su_twice")

        R = 8
        S1 = (0, 10, 20, 30, 40, 50, 60, 70, 80)

        p = lora.gen_packet(SF, S1, R=R)
        n_z = 6 * N * R + 3 * N / 4 * R
        x = np.concatenate([p, np.zeros(n_z), p, np.zeros(20 * N * R)])

        S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))

        self.assertEqual(S1 * 2, S1_out)
        self.assertEqual(len(S2_out), 0)
Ejemplo n.º 8
0
    def test_002_system_su_cfo(self):
        print("test_002_system_su_cfo")

        R = 8
        S1 = (0, 10, 20, 30, 40, 50, 60, 70, 80)
        cfo = 10.5  # Should trigger an integer offset of 1 in the detection bock

        x = np.concatenate(
            [lora.gen_packet(SF, S1, R=R),
             np.zeros(15 * N * R)])
        x = lora.add_cfo(SF, x, cfo, R=R)
        S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))

        self.assertEqual(S1, S1_out)
        self.assertEqual(len(S2_out), 0)
Ejemplo n.º 9
0
    def test_010_system_mu_sync(self):
        print("test_010_system_mu_sync")

        P1_dB = 0
        P2_dB = 3
        R = 8

        tau = int(14.0 * R * N)

        R = 8
        S1 = (5, 10, 20, 30, 40, 50, 60, 70) * 2
        S2 = (42, 101, 89, 15, 127, 0, 74, 94) * 2

        p1 = lora.gen_packet(SF, S1, R=R)
        p2 = lora.gen_packet(SF, S2, R=R)

        x1 = np.sqrt(10**(P1_dB / 10.0)) * np.concatenate([p1, np.zeros(tau)])
        x2 = np.sqrt(10**(P2_dB / 10.0)) * np.concatenate([np.zeros(tau), p2])

        x = np.concatenate([x1 + x2, np.zeros(20 * N * R)])

        S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))
        self.assertEqual(S1, S1_out)
        self.assertEqual(S2, S2_out)
Ejemplo n.º 10
0
    def test_003_system_su_sto(self):
        print("test_003_system_su_sto")

        R = 8
        S1 = (0, 10, 20, 30, 40, 50, 60, 70, 80)

        tau = 30.5
        tau_samples = int(round(tau * R))

        x = np.concatenate([
            np.zeros(tau_samples),
            lora.gen_packet(SF, S1, R=R),
            np.zeros(15 * N * R)
        ])
        S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))

        self.assertEqual(S1, S1_out)
        self.assertEqual(len(S2_out), 0)
Ejemplo n.º 11
0
    def test_004_system_su_powers(self):
        print("test_004_system_su_powers")

        R = 8
        S1 = (0, 10, 20, 30, 40, 50, 60, 70, 80)

        theta_u = np.pi / 4
        P1 = [0, 1, 2, 3, 4, 6, 20]  # TODO more powers

        for P in P1:
            P_lin = 10**(P / 10.0)
            x = np.sqrt(P_lin) * np.exp(1j * theta_u) * np.concatenate(
                [lora.gen_packet(SF, S1, R=R),
                 np.zeros(15 * N * R)])
            S1_out, S2_out = self._feed_system(x, R=R, Nsyms=len(S1))
            self.assertEqual(S1, S1_out)
            self.assertEqual(len(S2_out), 0)

            theta_u += np.pi / 4
Ejemplo n.º 12
0
    def test_002_two_packets(self):
        print("test_003_two_packets")

        S = np.arange(Nsyms)

        p = lora.gen_packet(SF, S, R=R)
        print(len(p))
        n_z = 6 * N * R + 3 * N / 4 * R
        x = np.concatenate([p, np.zeros(n_z), p, np.zeros(10 * N * R)])

        i1 = 0
        i2 = len(p) + n_z
        assert i2 % N * R == 0

        user_tags = {}
        user_tags[i1] = ('new_user', {
            'power': 1.0,
            'sto_int': 0,
            'sto_frac': 0.0,
            'cfo_int': 0,
            'cfo_frac': 0.0
        })
        user_tags[i2] = ('new_user', {
            'power': 1.0,
            'sto_int': 0,
            'sto_frac': 0.0,
            'cfo_int': 0,
            'cfo_frac': 0.0
        })

        y, window_tags = self._feed_synchro(x, user_tags)

        self.assertEqual(len(window_tags), (13 + Nsyms) * 2)

        # First user
        self.check_preamble(window_tags, start_offset=0)
        for i, w in enumerate(window_tags[13:13 + Nsyms]):
            self.assertEqual(w.offset, N * 12 + N / 4 + N * i)
            self.assertEqual(w.value['power1'], 1)
            self.assertEqual(w.value['win_len'], N)
            self.assertEqual(w.value['Tu'], SYNC_TYPE_PAYLOAD)
            self.assertEqual(w.value['Ti1'], SYNC_TYPE_VOID)
            self.assertEqual(w.value['Ti2'], SYNC_TYPE_VOID)

        self.assertFloatTuplesAlmostEqual(y[0:len(p) / R], x[0:len(p):R])

        window_tags = window_tags[13 + Nsyms:]

        # Second user
        off = len(p) / R
        self.check_preamble(window_tags, start_offset=off)
        for i, w in enumerate(window_tags[13:13 + Nsyms]):
            self.assertEqual(w.offset, off + N * 12 + N / 4 + N * i)
            self.assertEqual(w.value['power1'], 1)
            self.assertEqual(w.value['win_len'], N)
            self.assertEqual(w.value['Tu'], SYNC_TYPE_PAYLOAD)
            self.assertEqual(w.value['Ti1'], SYNC_TYPE_VOID)
            self.assertEqual(w.value['Ti2'], SYNC_TYPE_VOID)

        # for i in range(13):
        #     print(i, "y[{}:{}], x[{}:{}]".format(len(p)+N*i, len(p)+N*i+N, i2+N*i, i2+N*i+N))

        #     a = y[len(p)+N*i : len(p)+N*i+N]
        #     b = x[i2+N*i : i2+N*i+N]
        #     for c,d in zip(a,b):
        #         print(c,d)

        #     self.assertFloatTuplesAlmostEqual(y[len(p)+N*i : len(p)+N*i+N], x[i2+N*i : i2+N*i+N])

        self.assertFloatTuplesAlmostEqual(y[len(p) / R:2 * len(p) / R],
                                          x[i2:i2 + len(p):R],
                                          places=5)