Exemple #1
0
    def test_003_depuncture_bits(self):
        N = 2**6
        K = N // 2
        eta = design_snr_to_bec_eta(0.0, 1.0)
        polar_capacities = calculate_bec_channel_capacities(eta, N)
        f = np.sort(get_frozenBitPositions(polar_capacities, N - K))

        punc = pypolar.Puncturer(N - (N // 4), f)

        outputPositions = get_diff_positions(N, f[0:N // 4])

        vec = np.random.normal(0.0, 1.0, N - (N // 4)).astype(np.float32)
        res = punc.depuncture(vec)
        ref = np.zeros(N, dtype=res.dtype)
        ref[outputPositions] = vec
        self.assertListEqual(ref.tolist(), res.tolist())

        vec = np.random.normal(0.0, 1.0, N - (N // 4)).astype(np.float64)
        res = punc.depuncture(vec)
        ref = np.zeros(N, dtype=res.dtype)
        ref[outputPositions] = vec
        self.assertListEqual(ref.tolist(), res.tolist())

        vec = np.random.randint(0, 256, N - (N // 4), dtype=np.uint8)
        res = punc.depuncture(vec)
        ref = np.zeros(N, dtype=res.dtype)
        ref[outputPositions] = vec
        self.assertListEqual(ref.tolist(), res.tolist())
Exemple #2
0
    def test_002_puncture_bits(self):
        N = 2**6
        K = N // 2
        eta = design_snr_to_bec_eta(0.0, 1.0)
        polar_capacities = calculate_bec_channel_capacities(eta, N)
        f = np.sort(get_frozenBitPositions(polar_capacities, N - K))

        outputPositions = get_diff_positions(N, f[0:N // 4])

        punc = pypolar.Puncturer(N - (N // 4), f)

        vec = np.random.randint(0, 256, N // 8, dtype=np.uint8)
        unpvec = np.unpackbits(vec)
        unpres = punc.puncture(unpvec)
        res = punc.puncturePacked(vec)
        self.assertListEqual(np.unpackbits(res).tolist(), unpres.tolist())

        ref = unpvec[outputPositions]
        self.assertListEqual(ref.tolist(), unpres.tolist())

        fvec = np.arange(N, dtype=np.float32)
        fres = punc.puncture(fvec)
        fref = fvec[outputPositions]
        self.assertListEqual(fref.tolist(), fres.tolist())

        dvec = np.arange(N, dtype=np.float64)
        dres = punc.puncture(dvec)
        dref = dvec[outputPositions]
        self.assertListEqual(dref.tolist(), dres.tolist())
    def test_002_frozen_bit_positions(self):
        for snr in np.arange(-1.5, 3.5, .25):
            for inv_coderate in np.array([8, 6, 5, 4, 3, 2, 1.5, 1.2]):
                for n in range(6, 11):
                    N = 2**n
                    K = int(N / inv_coderate)
                    # print(N, K, inv_coderate)
                    cf = pypolar.frozen_bits(N, K, snr)
                    eta = design_snr_to_bec_eta(snr, 1. * K / N)
                    polar_capacities = calculate_bec_channel_capacities(eta, N)
                    pf = get_frozenBitPositions(polar_capacities, N - K)
                    pf = np.sort(pf)
                    decoder = pypolar.PolarDecoder(N, 1, cf, "mixed")

                    pd = decoder.frozenBits()

                    self.assertListEqual(cf, pd)
                    self.assertListEqual(cf, list(pf))
Exemple #4
0
    def validate_config(self, N, K, snr):
        eta = design_snr_to_bec_eta(snr, 1.0)
        polar_capacities = calculate_bec_channel_capacities(eta, N)
        f = get_frozenBitPositions(polar_capacities, N - K)
        f = np.sort(f)
        frozenBitMap = get_frozenBitMap(polar_capacities, N - K)
        info_pos = np.setdiff1d(np.arange(N, dtype=f.dtype), f)
        self.assertEqual(info_pos.size, K)
        self.assertEqual(f.size, N - K)
        self.assertEqual(np.sum(frozenBitMap), -K)

        p = pypolar.PolarEncoder(N, f)
        self.assertEqual(p.blockLength(), N)

        self.assertTrue(np.all(f == p.frozenBits()))
        self.assertTrue(np.all(f == np.arange(N)[np.where(frozenBitMap == 0)]))

        self.assertTrue(p.isSystematic())
        p.setSystematic(False)
        self.assertFalse(p.isSystematic())
        p.setSystematic(True)
        self.assertTrue(p.isSystematic())
        self.check_matrix_domination_contiguity(N, p.frozenBits())
Exemple #5
0
    def test_001_setup(self):
        for n in range(5, 11):
            N = 2**n
            K = N // 2
            eta = design_snr_to_bec_eta(0.0, 1.0)
            polar_capacities = calculate_bec_channel_capacities(eta, N)
            f = np.sort(get_frozenBitPositions(polar_capacities, N - K))

            outputPositions0 = get_diff_positions(N, f[0:N // 4])

            punc0 = pypolar.Puncturer(N - (N // 4), f)
            self.assertEqual(punc0.parentBlockLength(), N)
            self.assertEqual(punc0.blockLength(), N - (N // 4))
            self.assertListEqual(punc0.blockOutputPositions(),
                                 outputPositions0.tolist())

            outputPositions1 = get_diff_positions(N, f[0:N // 8])

            punc1 = pypolar.Puncturer(N - (N // 8), f)
            self.assertEqual(punc1.parentBlockLength(), N)
            self.assertEqual(punc1.blockLength(), N - (N // 8))

            self.assertListEqual(punc1.blockOutputPositions(),
                                 outputPositions1.tolist())
Exemple #6
0
    def matrix_validation(self, N, K, snr):
        eta = design_snr_to_bec_eta(snr, 1.0)
        polar_capacities = calculate_bec_channel_capacities(eta, N)
        f = np.sort(get_frozenBitPositions(polar_capacities, N - K))
        ip = np.setdiff1d(np.arange(N, dtype=f.dtype), f)
        frozenBitMap = get_frozenBitMap(polar_capacities, N - K)

        n = int(np.log2(N))
        G = get_polar_generator_matrix(n)
        Gs = get_polar_encoder_matrix_systematic(N, f)
        for i in range(10):
            u = np.random.randint(0, 2, K).astype(dtype=np.uint8)
            x = np.zeros(N, dtype=np.uint8)
            x[ip] = u
            xref = np.copy(frozenBitMap)
            xref[np.where(frozenBitMap == -1)] = u
            self.assertTrue(np.all(x == xref))
            x = x.dot(G) % 2
            x[f] = 0
            x = x.dot(G) % 2
            xs = u.dot(Gs) % 2

            self.assertTrue(np.all(x == xs))
        self.matrix_gen_check_validation(Gs, f)