Path: blob/main/course-contents/notebooks/2024-02-26--array-decoding.ipynb
469 views
Kernel: Python 3 (ipykernel)
Let's create a code.
In [58]:
Out[58]:
3
In [49]:
We build the array whose rows are the cosets of C
.
Notice that vectors in W
provide a full set of coset representatives.
In [74]:
In order to decode the vector v
, we find the coset c
containing v
, and return v - c[0]
.
In [71]:
In [76]:
Out[76]:
[((0, 0, 0, 0, 0), True),
((1, 0, 1, 1, 0), True),
((2, 0, 2, 2, 0), True),
((0, 1, 1, 0, 1), True),
((1, 1, 2, 1, 1), True),
((2, 1, 0, 2, 1), True),
((0, 2, 2, 0, 2), True),
((1, 2, 0, 1, 2), True),
((2, 2, 1, 2, 2), True)]
We should be able to correct (d-1)/2 = (3-1)/2 = 1
error.
In [75]:
Out[75]:
[((1, 0, 0, 0, 0),
[((1, 0, 0, 0, 0), (0, 0, 0, 0, 0), True),
((2, 0, 1, 1, 0), (1, 0, 1, 1, 0), True),
((0, 0, 2, 2, 0), (2, 0, 2, 2, 0), True),
((1, 1, 1, 0, 1), (0, 1, 1, 0, 1), True),
((2, 1, 2, 1, 1), (1, 1, 2, 1, 1), True),
((0, 1, 0, 2, 1), (2, 1, 0, 2, 1), True),
((1, 2, 2, 0, 2), (0, 2, 2, 0, 2), True),
((2, 2, 0, 1, 2), (1, 2, 0, 1, 2), True),
((0, 2, 1, 2, 2), (2, 2, 1, 2, 2), True)]),
((0, 1, 0, 0, 0),
[((0, 1, 0, 0, 0), (0, 0, 0, 0, 0), True),
((1, 1, 1, 1, 0), (1, 0, 1, 1, 0), True),
((2, 1, 2, 2, 0), (2, 0, 2, 2, 0), True),
((0, 2, 1, 0, 1), (0, 1, 1, 0, 1), True),
((1, 2, 2, 1, 1), (1, 1, 2, 1, 1), True),
((2, 2, 0, 2, 1), (2, 1, 0, 2, 1), True),
((0, 0, 2, 0, 2), (0, 2, 2, 0, 2), True),
((1, 0, 0, 1, 2), (1, 2, 0, 1, 2), True),
((2, 0, 1, 2, 2), (2, 2, 1, 2, 2), True)]),
((0, 0, 1, 0, 0),
[((0, 0, 1, 0, 0), (0, 0, 0, 0, 0), True),
((1, 0, 2, 1, 0), (1, 0, 1, 1, 0), True),
((2, 0, 0, 2, 0), (2, 0, 2, 2, 0), True),
((0, 1, 2, 0, 1), (0, 1, 1, 0, 1), True),
((1, 1, 0, 1, 1), (1, 1, 2, 1, 1), True),
((2, 1, 1, 2, 1), (2, 1, 0, 2, 1), True),
((0, 2, 0, 0, 2), (0, 2, 2, 0, 2), True),
((1, 2, 1, 1, 2), (1, 2, 0, 1, 2), True),
((2, 2, 2, 2, 2), (2, 2, 1, 2, 2), True)]),
((0, 0, 0, 1, 0),
[((0, 0, 0, 1, 0), (0, 0, 0, 0, 0), True),
((1, 0, 1, 2, 0), (1, 0, 1, 1, 0), True),
((2, 0, 2, 0, 0), (2, 0, 2, 2, 0), True),
((0, 1, 1, 1, 1), (0, 1, 1, 0, 1), True),
((1, 1, 2, 2, 1), (1, 1, 2, 1, 1), True),
((2, 1, 0, 0, 1), (2, 1, 0, 2, 1), True),
((0, 2, 2, 1, 2), (0, 2, 2, 0, 2), True),
((1, 2, 0, 2, 2), (1, 2, 0, 1, 2), True),
((2, 2, 1, 0, 2), (2, 2, 1, 2, 2), True)]),
((0, 0, 0, 0, 1),
[((0, 0, 0, 0, 1), (0, 0, 0, 0, 0), True),
((1, 0, 1, 1, 1), (1, 0, 1, 1, 0), True),
((2, 0, 2, 2, 1), (2, 0, 2, 2, 0), True),
((0, 1, 1, 0, 2), (0, 1, 1, 0, 1), True),
((1, 1, 2, 1, 2), (1, 1, 2, 1, 1), True),
((2, 1, 0, 2, 2), (2, 1, 0, 2, 1), True),
((0, 2, 2, 0, 0), (0, 2, 2, 0, 2), True),
((1, 2, 0, 1, 0), (1, 2, 0, 1, 2), True),
((2, 2, 1, 2, 0), (2, 2, 1, 2, 2), True)])]
But: we shouldn't in general be able to correct 2 errors.
In [69]:
Out[69]:
[((0, 1, 1, 0, 0), (0, 1, 1, 0, 1), False),
((1, 1, 2, 1, 0), (1, 1, 2, 1, 1), False),
((2, 1, 0, 2, 0), (2, 1, 0, 2, 1), False),
((0, 2, 2, 0, 1), (0, 2, 2, 0, 2), False),
((1, 2, 0, 1, 1), (1, 2, 0, 1, 2), False),
((2, 2, 1, 2, 1), (2, 2, 1, 2, 2), False),
((0, 0, 0, 0, 2), (0, 0, 0, 0, 0), False),
((1, 0, 1, 1, 2), (1, 0, 1, 1, 0), False),
((2, 0, 2, 2, 2), (2, 0, 2, 2, 0), False)]
In [ ]: