Reed-Muller code RM(r,m) | |||||||
Namesake: | Irving S. Reed and David E. Muller | ||||||
Type: | Linear block code | ||||||
Block Length: | 2m | ||||||
Message Length: |
\binom{m}{i} | ||||||
Rate: | k/2m | ||||||
Distance: | 2m-r | ||||||
Alphabet Size: | 2 | ||||||
Notation: | [2m,k,2m-r]2 |
Reed–Muller codes are error-correcting codes that are used in wireless communications applications, particularly in deep-space communication.[1] Moreover, the proposed 5G standard[2] relies on the closely related polar codes[3] for error correction in the control channel. Due to their favorable theoretical and mathematical properties, Reed–Muller codes have also been extensively studied in theoretical computer science.
Reed–Muller codes generalize the Reed–Solomon codes and the Walsh–Hadamard code. Reed–Muller codes are linear block codes that are locally testable, locally decodable, and list decodable. These properties make them particularly useful in the design of probabilistically checkable proofs.
Traditional Reed–Muller codes are binary codes, which means that messages and codewords are binary strings. When r and m are integers with 0 ≤ r ≤ m, the Reed–Muller code with parameters r and m is denoted as RM(r, m). When asked to encode a message consisting of k bits, where
r | |
stylek=\sum | |
i=0 |
\binom{m}{i}
Reed–Muller codes are named after David E. Muller, who discovered the codes in 1954,[4] and Irving S. Reed, who proposed the first efficient decoding algorithm.[5]
Reed–Muller codes can be described in several different (but ultimately equivalent) ways. The description that is based on low-degree polynomials is quite elegant and particularly suited for their application as locally testable codes and locally decodable codes.[6]
r | |
stylek=\sum | |
i=0 |
\binom{m}{i}
stylen=2m
The fact that the codeword
C(x)
x
C(0)=0
C(x+y)=C(x)+C(y)\bmod2
x,y\in\{0,1\}k
C
For the code, the parameters are as follows:
Let be the encoding function just defined. To encode the string x = 1 1010 010101 of length 11, the encoder first constructs the polynomial in 4 variables:Then it evaluates this polynomial at all 16 evaluation points (0101 means
Z1=0,Z2=1,Z3=0,Z4=1)
As a result, C(1 1010 010101) = 1101 1110 0001 0010 holds.
As was already mentioned, Lagrange interpolation can be used to efficiently retrieve the message from a codeword. However, a decoder needs to work even if the codeword has been corrupted in a few positions, that is, when the received word is different from any codeword. In this case, a local decoding procedure can help.
The algorithm from Reed is based on the following property:you start from the code word, that is a sequence of evaluation points from an unknown polynomial of of degree at most that you want to find. The sequence may contains any number of errors up to included.
If you consider a monomial of the highest degree in and sum all the evaluation points of the polynomial where all variables in have the values 0 or 1, and all the other variables have value 0, you get the value of the coefficient (0 or 1) of in (There are such points). This is due to the fact that all lower monomial divisors of appears an even number of time in the sum, and only appears once.
To take into account the possibility of errors, you can also remark that you can fix the value of other variables to any value. So instead of doing the sum only once for other variables not in with 0 value, you do it times for each fixed valuations of the other variables. If there is no error, all those sums should be equals to the value of the coefficient searched. The algorithm consists here to take the majority of the answers as the value searched. If the minority is larger than the maximum number of errors possible, the decoding step fails knowing there are too many errors in the input code.
Once a coefficient is computed, if it's 1, update the code to remove the monomial from the input code and continue to next monomial, in reverse order of their degree.
Let's consider the previous example and start from the code. With we can fix at most 1 error in the code.Consider the input code as 1101 1110 0001 0110 (this is the previous code with one error).
We know the degree of the polynomial is at most , we start by searching for monomial of degree 2.
The four sums don't agree (so we know there is an error), but the minority report is not larger than the maximum number of error allowed (1), so we take the majority and the coefficient of is 1.
We remove from the code before continue : code : 1101 1110 0001 0110, valuation of is 0001000100010001, the new code is 1100 1111 0000 0111
One error detected, coefficient is 0, no change to current code.
One error detected, coefficient is 0, no change to current code.
One error detected, coefficient is 1, valuation of is 0000 0011 0000 0011, current code is now 1100 1100 0000 0100.
One error detected, coefficient is 1, valuation of is 0000 0000 0011 0011, current code is now 1100 1100 0011 0111.
One error detected, coefficient is 0, no change to current code.We know now all coefficient of degree 2 for the polynomial, we can start mononials of degree 1. Notice that for each next degree, there are twice as much sums, and each sums is half smaller.
One error detected, coefficient is 0, no change to current code.
One error detected, coefficient is 1, valuation of is 0011 0011 0011 0011, current code is now 1111 1111 0000 0100.
Then we'll find 0 for , 1 for and the current code become 1111 1111 1111 1011.
For the degree 0, we have 16 sums of only 1 bit. The minority is still of size 1, and we found and the corresponding initial word 1 1010 010101
Using low-degree polynomials over a finite field
F
q
q
m
d
m
d
k=style\binom{m+d}{m}
m
px
d
F
style\binom{m+d}{m}
x
px(a)
a\inFm
n=qm
A generator matrix for a Reed - Muller code of length can be constructed as follows. Let us write the set of all m-dimensional binary vectors as:
X=
m | |
F | |
2 |
=\{x1,\ldots,xN\}.
We define in N-dimensional space
N | |
F | |
2 |
IA\in
N | |
F | |
2 |
on subsets
A\subsetX
\left(IA\right)i=\begin{cases}1&ifxi\inA\ 0&otherwise\ \end{cases}
together with, also in
N | |
F | |
2 |
w\wedgez=(w1 ⋅ z1,\ldots,wN ⋅ zN),
referred to as the wedge product (not to be confused with the wedge product defined in exterior algebra). Here,
w=(w1,w2,\ldots,wN)
z=(z1,z2,\ldots,zN)
N | |
F | |
2 |
⋅
F2
m | |
F | |
2 |
F2
m | |
(F | |
2) |
=\{(ym,\ldots,y1)\midyi\inF2\}.
We define in N-dimensional space
N | |
F | |
2 |
N:v0=(1,1,\ldots,1)
vi=
I | |
Hi |
,
where 1 ≤ i ≤ m and the Hi are hyperplanes in
m | |
(F | |
2) |
Hi=\{y\in(F2)m\midyi=0\}.
The Reed - Muller code of order r and length N = 2m is the code generated by v0 and the wedge products of up to r of the vi, (where by convention a wedge product of fewer than one vector is the identity for the operation). In other words, we can build a generator matrix for the code, using vectors and their wedge product permutations up to r at a time
{v0,v1,\ldots,vn,\ldots,
(v | |
i1 |
\wedge
v | |
i2 |
),\ldots
(v | |
i1 |
\wedge
v | |
i2 |
\ldots\wedge
v | |
ir |
)}
Let m = 3. Then N = 8, and
X=
3 | |
F | |
2 |
=\{(0,0,0),(0,0,1),(0,1,0)\ldots,(1,1,1)\},
and
\begin{align} v0&=(1,1,1,1,1,1,1,1)\\[2pt] v1&=(1,0,1,0,1,0,1,0)\\[2pt] v2&=(1,1,0,0,1,1,0,0)\\[2pt] v3&=(1,1,1,1,0,0,0,0). \end{align}
The RM(1,3) code is generated by the set
\{v0,v1,v2,v3\},
or more explicitly by the rows of the matrix:
\begin{pmatrix} 1&1&1&1&1&1&1&1\\ 1&0&1&0&1&0&1&0\\ 1&1&0&0&1&1&0&0\\ 1&1&1&1&0&0&0&0 \end{pmatrix}
The RM(2,3) code is generated by the set:
\{v0,v1,v2,v3,v1\wedgev2,v1\wedgev3,v2\wedgev3\}
or more explicitly by the rows of the matrix:
\begin{pmatrix} 1&1&1&1&1&1&1&1\\ 1&0&1&0&1&0&1&0\\ 1&1&0&0&1&1&0&0\\ 1&1&1&1&0&0&0&0\\ 1&0&0&0&1&0&0&0\\ 1&0&1&0&0&0&0&0\\ 1&1&0&0&0&0&0&0\\ \end{pmatrix}
The following properties hold:
N | |
F | |
2 |
r | |
\sum | |
s=0 |
{m\chooses}.
RM(r, m) codes can be decoded using majority logic decoding. The basic idea of majority logic decoding isto build several checksums for each received code word element. Since each of the different checksums must allhave the same value (i.e. the value of the message word element weight), we can use a majority logic decoding to decipherthe value of the message word element. Once each order of the polynomial is decoded, the received word is modifiedaccordingly by removing the corresponding codewords weighted by the decoded message contributions, up to the present stage.So for a rth order RM code, we have to decode iteratively r+1, times before we arrive at the finalreceived code-word. Also, the values of the message bits are calculated through this scheme; finally we can calculatethe codeword by multiplying the message word (just decoded) with the generator matrix.
One clue if the decoding succeeded, is to have an all-zero modified received word, at the end of (r + 1)-stage decodingthrough the majority logic decoding. This technique was proposed by Irving S. Reed, and is more general when appliedto other finite geometry codes.
A Reed–Muller code RM(r,m) exists for any integers
m\ge0
0\ler\lem
2m,2m,1
2m,0,infty
RM(r,m)=\{(u,u+v)\midu\inRM(r,m-1),v\inRM(r-1,m-1)\}.
From this construction, RM(r,m) is a binary linear block code (n, k, d) with length, dimension
k(r,m)=k(r,m-1)+k(r-1,m-1)
d=2m-r
r\ge0
All codes with
0\lem\le5
style[2m,k,2m-r]2
style2m
style2m-r
0 | 1 | 2 | 3 | 4 | 5 | m | ||
(1) | universe codes | |||||||
RM(5,5) (32,32,1) | ||||||||
RM(4,4) (16,16,1) | SPC codes | |||||||
RM(3,3) (8,8,1) | RM(4,5) (32,31,2) | |||||||
RM(2,2) (4,4,1) | RM(3,4) (16,15,2) | extended Hamming codes | ||||||
RM(1,1) (2,2,1) | RM(2,3) (8,7,2) | RM(3,5) (32,26,4) | ||||||
RM(0,0) (1,1,1) | RM(1,2) (4,3,2) | RM(2,4) (16,11,4) | ||||||
RM(0,1) (2,1,2) | RM(1,3) (8,4,4) | RM(2,5) (32,16,8) | self-dual codes | |||||
RM(-1,0) (1,0, infty | RM(0,2) (4,1,4) | RM(1,4) (16,5,8) | ||||||
RM(−1,1) (2,0, infty | RM(0,3) (8,1,8) | RM(1,5) (32,6,16) | ||||||
RM(−1,2) (4,0, infty | RM(0,4) (16,1,16) | punctured Hadamard codes | ||||||
RM(-1,3) (8,0, infty | RM(0,5) (32,1,32) | |||||||
RM(-1,4) (16,0, infty | repetition codes | |||||||
RM(-1,5) (32,0, infty | ||||||||
trivial codes |
{R=\tfrac{1}{N}}
dmin=N
R=\tfrac{m+1}{N}
dmin=\tfrac{N}{2}
R=\tfrac{N-1}{N}
dmin=2
dmin=4