Coding and Decoding of Reed-Muller Codes - Kodning och avkodning av Reed-Muller koder Linda Meyer - DIVA

Page created by Jeffery Hawkins
 
CONTINUE READING
Coding and Decoding of Reed-Muller Codes - Kodning och avkodning av Reed-Muller koder Linda Meyer - DIVA
Coding and Decoding of
 Reed-Muller Codes

 Kodning och avkodning av
 Reed-Muller koder
 Linda Meyer

Faculty of Health, Science and Technology
Mathematics, Bachelor Degree Project
15 ECTS
Supervisor: Igor Gachkov
Examiner: Sorina Barza
Date: June 2021
Abstract

In this thesis some families of linear error-correcting codes are presented.
The reader will find a general description of binary codes and more specific
details about linear codes such as Hamming, repetition codes, Reed-Muller
codes, etc. To fully immerse ourselves in the methods of coding and
decoding, we will introduce examples in order to describe the presented
theories. The examples are the author's contribution to the subject, and the
content of this thesis are based on previous research in the scientific field of
error-correcting codes.
 In these times of much communication through computer technology, our
daily lives involve a substantial amount of data transmission. It is essential
that these data are transmitted without errors through the communication
channels. Therefore, the scientific field of error-correcting codes holds a
significant importance in many aspects of today’s society.
 The main goal of this thesis is to study linear block codes which belong to
the class of binary codes. In this case we will attribute a more prominent
role to first order Reed-Muller codes.
Sammanfattning

I den här uppsatsen kommer flera varianter av linjära felrättande koder att
presenteras. Läsaren får ta del av en allmän beskrivning av binära koder och
en mer detaljerad framställning av linjära koder så som Hamming,
repetitionskod, Reed-Muller kod med mera. Tillsammans med en
fördjupning i ämnet, avseende metoder för kodning och avkodning, kommer
vi att ge exempel för att bidra till förståelsen. Dessa exempel utgör
författarens bidrag till ämnesområdet och innehållet i uppsatsen baseras på
tidigare forskning om felrättande koder.
 Den digitala eran, som vi lever i, innefattar att datatransmission är en del
av vår vardag. Vår frekventa användning av mobila enheter visar på hur
viktigt det är att data överförs korrekt via kommunikationskanalerna. Av
den anledningen är vetenskapen om felrättande koder högaktuell i dagens
samhälle.
 Det huvudsakliga syftet med uppsatsen är att studera linjära block-koder
som tillhör klassen binära koder. I det här fallet kommer vi att fokusera lite
extra på Reed-Muller koder av första ordningen.
Contents

1 Introduction 1

2 Linear Codes 3
 2.1 The Importance of Linear Codes……………………………………...3
 2.2 Parameters…………………………………………………………….6
 2.3 Generator Matrix……………………………………………………...7
 2.4 Various Linear Codes…………………………………………………7
 2.5 Hamming Code……………………………………………………….9
 2.6 Maximum Likelihood Decoding…………………………………….10

3 Reed-Muller Codes 12
 3.1 Introduction to Reed-Muller Codes………………………………….12
 3.2 First-Order RM Codes……………………………………………….12
 3.3 Encoding……………………………………………………………..15
 3.4 Decoding……………………………………………………………..18

4 Conclusions 20
Chapter 1

Introduction
The importance of coding theory in today´s society can hardly be
overestimated. It plays a considerable role in computer technology and
consequently forms the foundation of the digital era of our time. We are
now used to communication over large distances and simultaneously rely on
fast-paced data transmission. But equally important, although most people
rarely think about it, is the prospect of receiving the same message as the
one being sent. In this aspect we depend on the theory of error-correcting
codes.
 One of the first error-correcting codes was invented by Richard Hamming
in 1950 and is therefore known as the Hamming code. We will account for
this family of error-correcting codes, among other linear ECC, in Chapter 2.
Furthermore, the reader will there find general concepts of linear codes and
coding theory.
 The readers may perhaps ask themselves why error-correcting codes
holds such an importance in communication technology. An answer to this
question is that we cannot expect that a communication channel transmits
messages without errors.
 Even in the beginning of the era of long-distance communication, with
innovations such as the telegraph, this statement became evident. Due to
noisy channels a message sent, for example, from London to Manchester
could easily be transmitted with errors. Let us say that the message was an
order for cotton, and one may realize that a simple number transmitted
erroneous could be quite troublesome. The person at the receiving end could
possibly apprehend that the message might be wrong and thus ask for it to
be transmitted again. However, in an emergency, or for various other
reasons, that might not be possible to achieve. One of the earliest solutions
to this problem is also considered the most basic form of ECC, namely the

 1
repetition code. The telegraphist simply formed the procedure of repeating
each message so that the person working in the receiving end could recreate
the original message.
 In our days, the error-correction is mainly automatically handled by
computers instead of human individuals. We also rely on more efficient
error-correcting codes than repetition codes. In addition, the ECC applied
today can correct many errors. An example of this is the Reed-Muller codes
that also has the advantage of working over particularly noisy channels.
 Nevertheless, different types of ECC are useful in different situations and,
like many other innovations, numerous error-correcting codes have been
created to solve specific problems that have appeared, in communication
technology, over time.

As we previously have described, some linear ECC are considered the
simplest types of error-correcting codes, for example the repetition codes.
However, the favorable mathematical properties of Reed-Muller codes etc.
have added to their relevance in the development of modern communication
technology. In Chapter 3, we find a more substantial account of RM codes
and that specifically with regards to first-order Reed-Muller codes.
 There are many reasons for studying Reed-Muller codes in specific. We
have accounted for some of them, though RM codes usefulness ranges over
many fields. These codes are included in a basic knowledge of coding and
they are therefore often used in educational purposes and as a general
introduction to coding theory. Additionally, RM codes are practical codes
with many advantageous properties and, as a result, they are the origin of
several other codes. To highlight the modern use of linear error-correcting
block codes, we can, for example, look to the Polar codes which are applied
in today’s 5G technology.

 2
Chapter 2

Linear Codes

2.1 The Importance of Linear Codes
The scientific field of coding theory has proved useful, both historically and
in our society today. Computer technology and communication involves a
great deal of coding theory.
 In this chapter we will, more specifically, focus on linear block codes.
The idea is to present examples of linear codes, such as repetition code and
Hamming code, and their definitions. For a description of the linear Reed-
Muller codes, the reader can turn to Chapter 3.

In the introduction we gave an example of a telegraph wire from London to
Manchester. If this wire were a binary symmetric channel of communication
the telegraphist would be able to send 0’s or 1’s. Let us assume that a
hundred symbols have bent sent from London, out of which 10 is received
erroneous in Manchester. This means that the error probability = 1/10. In
other words, there is a 10 % chance that a 0 will be received as a 1, or a 1 as
a 0. At the same time, there is a 90 % chance that each symbol is received
correctly. The purpose of codes is to correct errors and, as a result, create
reliable message transmissions over noisy channels [4].

In this thesis we will describe block codes. Block codes are encoded
information that can be divided into blocks of symbols. Every block of
code can then be decoded independently of any other block. Each block is a
codeword and together the codewords form a block code [3]. It generally
applies for a block code that information is encoded using an alphabet 
with different symbols. Let be the set of all ( 1 , 2 , … , ) where
 1 , 2 , … , ∈ . The information we wish to encode consists of a set of

 3
 messages, for example, and signifies the set of all codewords. is then
a subset to . A block code can therefore be regarded as a function:
 → ⊆ .
Consequently, an error-correcting code is in general a subset of a set 
with the alphabet Q. When the alphabet consists of two different symbols,
0’s and 1’s, it results in the binary codes which are the main field of this
study. In other words, a linear code is a linear subspace of the vector
space . is a finite field with symbols. The code has a total of 
different codewords and this is called the size of the code. The dimension 
of a code is the number of basis codewords which are represented in the
rows of the generator matrix [1].

To safely transmit a message and protect it against errors, we choose to
encode it into a codeword. A codeword consists of n symbols which is more
than the original message with k symbols, so > . The message symbols
form the first part of the codeword:
 1 = 1 , 2 = 2 , … , = .
The rest of the codeword has − check symbols:
 +1 , … , .
The check symbols are chosen using a specific method. The codewords
must satisfy:
 1
 2
 ( ⋮ ) = = 0 ( ℎ 2).
 
H is called the parity check matrix of the code. It is a ( − ) × matrix.
Additionally,
 = [ | − ],
where A is a ( − ) × matrix of 0’s and 1’s and − is the unit matrix
( − ) × ( − ) [4].

Definition 1. A linear code with a parity check matrix, H, consists of all
vectors , where:
 = 0 ( 2).

 4
Example 1. A [6,3, 3] code has the parity check matrix:
 1 0 1 1 0 0
 = [1 1 0 0 1 0]
 1 1 1 0 0 1
In other words, = 6, = 3 and = 3.
In this case:
 1 0 1
 = [1 1 0] and the unit matrix is 3 .
 1 1 1
As a result, the message 1 2 3 is encoded into the codeword:
 = 1 2 3 4 5 6 .
The check symbols are 4 5 6 . They are chosen so that the codeword
satisfy the parity check equations:
 1 + 3 + 4 = 0,
 1 + 2 + 5 = 0,
 1 + 2 + 3 + 6 = 0.
If the message is = 110 then 1 = 1, 2 = 1, 3 = 0 and the check
symbols are:
 4 = −1 = 1,
 5 = −1 − 1 = 1 + 1 = 2 = 0,
 6 = −1 − 1 = 2 = 0.
So, the codeword is = 110100.

Each of 1 2 3 is either 0 or 1. Consequently, there are 23 = 8 codewords.
We present them here:
000000 011110 110100
001101 100111 111001
010011 101010
This code is a single-error-correcting code, as we will show later in this
chapter.

 5
2.2 Parameters
The parameters for linear codes are specified by , and . As we
previously have described is the length of the codewords. signifies the
number of message symbols and it is also called the dimension of the code.
 denotes the minimum distance of the code and it is often defined as the
minimum weight of any nonzero codeword. As a result, is a [ , , ] code.
A linear code that begins with message bits and ends with − check
bits is called a systematic code. It signifies that the message symbols, the
input data, are included in the encoded output. Furthermore, the rate =
 ⁄ can be described as the efficiency of a code. In coding theory, a code
with a low rate, close to 0, is recognized as a strong code since it contains a
high amount of check bits [5].

In Example 2. we present a code with the codewords 0000, 0101, 1011 and
1110. The reader can see that the minimum weight is 2, = 2, and = 4.
This code has two message symbols and therefore it is a [4,2, 2] code.

Example 2. List the codewords for = [ ][4].
 
 = 4, = 2. 22 = 4 codewords.
 1 + 3 = 0 3 = 1
{ { = + 
 1 + 2 + 4 = 0 4 1 2

We have 2 message symbols and then 2 check symbols. The codewords are:
00|00 01|01 10|11 11|10

Repeat for = [ ].
 
 = 4, = 2. 22 = 4 codewords.
 2 + 3 + 4 = 0 = 2 + 1 + 2
{ { 3
 1 + 2 + 4 = 0 4 = 1 + 2
The codewords are:
00|00 01|01 10|11 11|10

Both codes are of the same length, and they consist of four equivalent
codewords. Check symbol 4 is from the same parity check equation in both
codes while the parity check equation that includes 3 differs between the

 6
codes. However, in this case the parity check equation adds up to the same
codewords for both linear codes. In other words, these codes are the same
code. It is only presented here in different forms.

2.3 Generator Matrix
A generator matrix of a code can be obtained from the parity check matrix.
 = ,
 = [ |− ].

Example 3. We reuse the [6,3, 3] code from Example 1.
 1 0 1 1 0 0 1 0 0 1 1 1 1
 = [1 1 0 0 1 0], then = [0 1 0 0 1 1] 2
 1 1 1 0 0 1 0 0 1 1 0 1 3
If = 110, then = = 1 + 2 = 100111 + 010011 =
110100.

2.4 Various Linear Codes
There are numerous forms of linear codes. In this part of the chapter, we
will account for some linear codes with specific properties. We may add that
it applies for linear codes in general that the difference, between any two
codewords, is also a codeword [6].

The simplest type of linear code is the repetition code.

Example 4. If = 1, = 4 and the parity check matrix
 1 1 0 0
 = [1 0 1 0], then the parity check equations are:
 1 0 0 1
 1 + 2 = 0, 1 + 3 = 0, 1 + 4 = 0 and
 1 = 2 = 3 = 4 = .
This means that we have one message symbol which is repeated 4 times.
The codewords are 0000 and 1111. The code is therefore called a repetition
code. As a matter of fact, Reed-Muller codes (0, ) are other examples of
repetition codes. In this case the block length is = 2 and the minimum
distance of the (0, ) code is .

 7
Furthermore, an even weight code has an even number of 1’s for all possible
codewords. In other words, the Hamming weight of every codeword is even.
The repetition code in the previous example is also an even weight code.

Example 5. List the codewords for = [ ].
 
If = 00, then = 0000,
 = 01 → = = 2 = 0101,
 = 10 → = = 1 = 1010,
 = 11 → = = 1 + 2 = 1010 + 0101 = 1111.
We have 2 message bits followed by 2 check bits. The four codewords are
0000, 0101, 1010 and 1111. It is obvious that this is an even weight code.

We move on to a description of dual codes. The dual code ⊥ is the set of
all parity checks on :
 ⊥ = { | ∙ = 0 ∈ },
 ⊥ is an [ , − ] code [4].

Example 6. Let be defined by the parity check matrix = [ ]
 
and describe ⊥ .

We know that if has and , then ⊥ has generator matrix = and
parity check matrix = [4]. Therefore:
 1 0 0 0 1 1
 ⊥ = = [0 1 0 1 0 1]
 0 0 1 1 1 0
 ⊥ is a [6, 3] code.

 8
2.5 Hamming Code
A Hamming code, Hr, is a single-error-correcting code where is the

number of rows of the parity check matrix. We know that the sum of two
codewords also form a codeword which means that the code is a linear code.
A Hamming code’s set of 2 codewords creates a linear subspace of
dimension in the vector space of dimension [5].

Definition 2. The parity check matrix of a binary Hamming code, Hr, is

an × matrix whose 2 − 1 columns consist of all nonzero vectors of
length . A Hamming code is an [ = 2 − 1, = 2 − 1 − , = 3]
code.

Example 7. One form of the parity check matrix for the Hamming

[15, 11, 3] code, H4, is:
 000000011111111
 = [000111100001111].
 011001100110011
 101010101010101

We will now continue to describe how a first-order Reed-Muller code can
be created by extending the dual of a Hamming code.

Definition 3. The dual of the Hamming code, Hr, is the binary simplex code

Sr. It is a [2 − 1, ] code [4].

Example 8. Show that to obtain a [ , , ] code, in other words a R(1, 3)

code, we can extend S3.

For H3:
 0001111 0111100
 = [0110011] and the standard form ′ = [1011010],
 1010101 1101001
 1000111
then = [0101011].
 0011101

 9
For S3: 3 = 3 = .

S3 has the parity check matrix 3 . The extended dual of the Hamming code

H3 is:
 11111111
̂3 = [10001110].
 
 01010110
 00111010
This forms a clock circuit, described in Chapter 3, which is an encoder for
 ̂3 . There are
R(1, 3). A message is encoded into the codeword : = 
16 possible codewords for a message = 0 1 2 3 where = 0 or 1.

2.6 Maximum Likelihood Decoding
Maximum likelihood decoding makes use of the fact that a low-weight error
vector is more likely to occur than an error vector of higher weight.
If = 4, then (1 − )4 > (1 − )3 > 2 (1 − )2 > ⋯
In concrete terms, the decoder receives the vector and decodes it as the
closest corresponding codeword. It is achieved by choosing the codeword
which is nearest in Hamming distance. For example, if = 110101 and we
have the [6,3, 3] code from Example 1. then (110101, 110100) = 1
since they only differ in one place. The decoder would therefore detect the
error vector = 000001 which also has the least weight.

 CHANNEL
 MESSAGE
 ENCODER DECODER USER
 SOURCE
 MESSAGE CODEWORD RECEIVED ESTIMATE
 = 1 ⋯ = 1 ⋯ VECTOR OF MESSAGE
 = + 
 ERROR
 VECTOR
 = 1 ⋯ 

Fig. 1. The general communication system [4].

 10
Example 9. To show what the decoder does, use a standard array (with
syndrome) to correct the received vectors = and =
 for a [ , , ] code.
The syndrome of is:
 = 
 1
 1
 0 1 1 1 0 0 1 1
 1
 = ∙ 1 = (1 0 1 0 1 0) = (0), = ∙ 2 = (1).
 1
 1 1 0 0 0 1 0 1
 0
 (0)

Fig. 2. The standard array of the [6,3, 3] code. We have 8 codewords and 8 cosets.
There is a total of 26 = 8×8 =64 vectors in the standard array [4].

Syndrome (obtained by multiplying with any vector of each row):
 1 2 3 4 5 6 7 8
 0 0 1 1 1 0 0 1
(0 1 0 1 0 1 0 1)
 0 1 1 0 0 0 1 1
The syndrome for is found in row 5 which has the coset leader 000100.
Furthermore, the syndrome for is found in row 8 which has the coset
leader 100100.

The received vectors are then corrected to the original codeword:
 ̂1 = 1 + ̂1 = 111100 + 000100 = 111000
 ̂2 = 2 + ̂2 = 111111 + 100100 = 011011.

 1
Theorem 1. A code can correct [2 ( − 1)] errors. If the minimum distance
 1
is even, then the code can simultaneously correct 2 ( − 2) errors and detect

 ∕ 2 errors [4].

 11
Chapter 3

Reed-Muller Codes
3.1 Introduction to Reed-Muller Codes

Reed-Muller codes were invented in 1954 by the American mathematician
David E. Muller and so RM codes are one of the oldest families of codes.
The first efficient decoding algorithm was created by Irving S. Reed.
 RM codes are linear block codes and initially they belonged to the class
of binary codes. It is this traditional form of RM codes that we will study in
this chapter. Characteristic for RM codes are their advantageous properties
for coding and decoding. They are useful in a wide range of functions,
especially in wireless and deep-space communication.

Definition 4. The ℎ order Reed-Muller Code R(r, m) has the positive
integers and m for which 0 ≤ r ≤ m. The length is = 2 and the
minimum distance is = 2 − . The RM code consists of the vectors f
where f( 1, ……, ). This function is a Boolean function since it only
includes the values 0 and 1. It forms a polynomial of the maximum degree
 [4]. An example of this is the first-order RM code of length 16 which is a
polynomial of the first degree: 0 + 1 1 + 2 2, + 3 3 + 4 4 ,
 = 0 or 1.

3.2 First-Order RM Codes
First-order RM codes have the advantage of working over particularly noisy
channels. They can correct many errors and is notably easy to encode and
decode. Consequently, first-order RM codes have been found useful in
deep-space data transmission where they, for example, have been applied
for transmitting pictures from Mars [4].

 1213
Definition 5. The 1 ℎ order Reed-Muller code R(1, m) has the positive
integer m and r = 1. It can be described as a [2 , + 1, 2 −1 ] code and it
is defined for all integers m ≥ 1 [7]. Due to the low rate of first-order RM
codes, they have the ability to correct numerous errors. For this reason, they
have proved to be suitable for especially noisy channels.

In the case of R(1, 1) we find that the codewords are (00, 01, 10, 11).
If m > 1 then R(1, m) = {( , ), ( , + 1): ∈ (1, − 1)}. This is an
example of the | | + | which declares the method of
forming a new code consisting of two previous codes. We may therefore
have a code 1 [ , 1 , 1 ] and another code 2 [ , 2 , 2 ]. As we can see
these codes are of the same length. Together they form a new code 3 which
consists of all the vectors | | + | where ∈ 1 and ∈ 2 . As a result,
the new code is of double length 2 [4].

Theorem 2. (1, ) is a [2 , + 1, 2 −1 ] code where > 0. The code
has minimum distance (Hamming weight) 2 −1 since every codeword
except 0 and 1 has weight 2 −1.

Proof. We will prove this theorem by induction.
Base case: We have previously described that it is obvious that (1,1) is a
[2,2, 1] code. The theorem holds for (1,1).

Inductive step: We assume that (1, − 1) is a [2 −1 , , 2 −2 ] code.
 (1, ) can therefore be created using the | | + | .
Let 1 = (1, − 1) and 2 = { , } = (0, − 1).

Consequently, (1, ) is a [2(2 −1 ), + 1, 2(2 −2 )] code, in other
words, a [2 , + 1, 2 −1 ] code. Furthermore, we assumed that (1, −
1) had weight 2 −2. Since a codeword in (1, ) is constructed as ( , +
 ), ( , ) has weight 2(2 −2 ) = 2 −1 . Additionally, we study the other
codewords ( , + ):

 13
If = , then + is . We see that half of each codeword consists of 1’s.
Therefore, ( , + ) = 2 −1 ,
If = , then + is . Again, half of each codeword is 1’s and
 ( , + ) = 2 −1 .
For every other in (1, − 1): ( ) = 2 −2, which means that half of
each vector consists of 1’s. The same applies to + and so
 ( , + ) = 2(2 −2 ) = 2 −1 [7].

 Q. E. D

Theorem 3. ( + 1, + 1) = {| | + |: ∈ ( + 1, ), ∈
 ( , )} [4].

 14
3.3 Encoding
In this part of the chapter, we will describe some of the methods for
encoding first-order RM codes. In the following examples, the reader will
find first-order RM codes of length 8 and 16. When it comes to the first-
order RM code of length 16 a generator matrix, afterwards included in the
first encoding method, is presented. Later, we will describe the clock circuit
which makes encoding of first-order RM codes exceedingly simple [4].

Example 10. R(1, 3)
According to the previous definition the first order RM code of length 8 is a
polynomial of the first degree:
 0 + 1 1 + 2 2, + 3 3 , = 0 or 1.

In this example = 8 = 2 . Hence the positive integer = 3 and R(1, 3).
R(1, 3) = {( , ), ( , + 1): ∈ (1, 2)},
and so, the 8 × 2 = 16 codewords are:

 00000000 11111111
 0 0 0 0 1 1 1 1 + 1 1 1 1 0 0 0 0
 0 0 1 1 0 0 1 1 + 1 1 0 0 1 1 0 0
 0 1 0 1 0 1 0 1 + 1 0 1 0 1 0 1 0
 + 0 0 1 1 1 1 0 0 + + 1 1 0 0 0 0 1 1
 + 0 1 0 1 1 0 1 0 + + 1 0 1 0 0 1 0 1
 + 0 1 1 0 0 1 1 0 + + 1 0 0 1 1 0 0 1
 + + 0 1 1 0 1 0 0 1 + + + 1 0 0 1 0 1 1 0
Fig. 3. First-Order RM code of length 8 [4].

The weight of every codeword except 0 and 1 is 2 −1 [7]. In this case the
 
weight is 22 = 4. Furthermore, = 1 + ( ) + ( ) + ⋯ + ( ) where k
 1 2 
is the dimension of the code. When the length of the first-order RM code is
 3
8 then = 1 + ( ) = 4. As a result, the dimension of the code is 4 which
 1
also indicates the number of basic vectors.

 15
Example 11. R(1, 4)
The first order RM code of length 16 is a polynomial of the first degree:
 0 + 1 1 + 2 2 + 3 3 + 4 4 , = 0 or 1.
 = 16 = 24 and R(1, 4),
The weight of every codeword, except 0 and 1, is 24−1 = 8,
 4
 = 1 + ( ) = 5.
 1

The generator matrix for first-order RM codes of length 16 consists of 5
basic vectors. Basic vectors are always linearly independent. As shown in
Fig. 13.2 [4] the fifth dimension signifies the first five rows in the generator
matrix for all R(r, 4) up to the 4th order RM code. The generator matrix for
first-order RM codes of length 16 consists of the five basic vectors:

 1111111111111111
 0000000011111111
 0000111100001111
 0011001100110011
 0101010101010101
Fig. 4. Basic vectors for first-order RM codes of length 16 [4].

We will now apply the generator matrix from Example 11. R(1, 4) in order
to show the reader how encoding using a generator matrix works. We use
the generator matrix, G, consisting of the five basic vectors listed above, and
the message symbols:
 = 0 4 3 2 1 , = 0 or 1.
Together they are encoded into the codeword x:
 0
 1111111111111111
 4 0000000011111111
 = G = 3 (0000111100001111)
 2 0011001100110011
 ( 1 ) 0101010101010101
 
 = 0 + 4 4 + 3 3 + 2 2 + 1 1
 (= 0 1 ⋯ 15 , )

 16
Encoding using a generator matrix can be applied for all RM codes, R(r, m),
0 ≤ r ≤ m. The minimum distance, d = 2 − , and the code can correct
1
 ( − 1) errors. And so, R(1, 4) can correct 3 errors while R(2, 4) is a
2

single-error-correcting code. In part 2.4 of the chapter, the reader will find
information about decoding methods such as the Reed Decoding Algorithm
which can be used to decode these RM codes.

In general, RM codes have proved easy to encode and decode. Nevertheless,
when it comes to first-order RM codes, encoding becomes exceedingly
simple. A circuit can handle the process of encoding a message into a
codeword. An example of an encoder for R(1, 4) is presented here:

Fig. 5. Encoder (Clock circuit) for R(1, 4).

The procedure is similar to encoding using generator matrix. For R(1, 4), an
[16, 5, 8 ] code, a message including 5 message symbols is encoded into the
codeword ( 0 1 ⋯ 15 ). The generator matrix, consisting of 5 basic vectors,
and the message ( G) equals the codeword ( ). The clock circuit in Fig.5
accomplishes this by counting from 0 to 15 through 1 2 3 4 =
0000, 0001, 0010, 0011, 0100, 0101, … , 1111, 0000, 0001, …
As a result, the circuit forms 0 + 1 1 + 2 2 + 3 3 + 4 4 which is the
codeword ( 0 1 ⋯ 15 ).

 17
3.4 Decoding
Reed-Muller codes have the advantage of being easier to decode than many
other codes. RM codes belong to the class of geometrical codes and can
therefore be decoded by majority logic. Consequently, the following
examples of decoding methods and algorithms are based on majority logic
decoding [4].

The Reed Decoding Algorithm works for all RM codes. Here we present an
example of decoding R(1, 4) with this algorithm. In Fig. 4 we can see that,
without any errors:
 1 = 0 + 1
 = 2 + 3
 ∙ ∙ ∙
 = 14 + 15 ,
 2 = 0 + 2
 = ∙ ∙ ∙.
We observe that there are 8 votes for every . It is clear, as we stated in
Chapter 2.3, that R(1, 4) can correct up to 3 errors by majority logic.
If R(2, 4), then the 6 message symbols, 12 to 34 , each have 4 votes and, as
a result, the code can only correct one error by majority logic.
We now continue to determine 0 :
 ′ = − 4 4 − ⋯ − 1 1 = 0 + ,
 0 = 0 or 1 based on the number of 1’s in ′ .

Example 12. Assume that we have a [ , , ] code, in other words
 ( , ), and that we receive 10101101. Decode the received message
using Reed’s Algorithm.
 1 = 1 = 1 = 0 = 1, by majority logic 1 = 1
 2 = 0 = 0 = 1 = 0, so 2 = 0
 3 = 0 = 1 = 1 = 1, so 3 = 1
 ′ = 10101101 − 00001111 − 00000000 − 01010101 = 11110111
 0 = 1 (modulo 2).
The correct message is = 1101 and the codeword is = + =
10101101 + 00001000 = 10100101. We can see that this is an example
of a nonsystematic code [7].

 18
Definition 6. The input consists of a function : 2 → 2 such that there
 2 − 
exists a polynomial of degree with ( , ) < . The output of
 2

Reed’s Algorithm is the polynomial [2].

Theorem 4. In the case of no errors, = ∑ ∈ , = 1, … , 2 − [4],
where indicates a string of r symbols.
 1
If no more than ( 2 − − 1) errors occur, then the Reed Decoding
 2

Algorithm can correct the same number of errors. For example, if no more
than 3 errors occur in R(1, 4) then the algorithm can correct them. The
theorem consequently implies that all can be recovered correctly if no
 1
more than 2 ( 2 − − 1) errors occur. If r > 1 then all can be recovered

and subsequently the rest of the ’s by majority logic decoding [4].

 19
Chapter 4

Conclusions
In this thesis we have studied various forms of error-correcting codes,
especially first-order Reed-Muller codes. We may conclude that Reed-
Muller codes have many advantageous mathematical properties. The clock
circuit shows how easily a message is encoded into a first-order RM code.
Furthermore, the Reed Decoding Algorithm is an example of how these
codes can be decoded. However, there exists even more ways of encoding
and decoding RM codes. We have presented a selection of all the possible
methods in this thesis. For example, a discovery of R.R. Green resulted in
another decoder for first-order RM codes, namely the Green machine, which
is a decoding circuit. It is apparent that first-order RM codes is especially
simple to encode and decode, but we have also described their efficiency of
correcting errors. The reason why the Reed-Muller code (1,5) was used by
NASA to transmit pictures from Mars is, above all, its ability to correct
numerous errors. For example, if no more than 7 errors occur in R(1, 5)
then the Reed Decoding Algorithm can correct them. For a code of length
 = 32 it has a remarkably capacity of error-correction. This means that
R(1, 5) often can withstand very noisy channels and consequently it was
well suited in the Mariner 9 spacecraft to transmit pictures from Mars.

Furthermore, there is one specific question with much relevance to this
study, namely: What defines a good error-correcting code? In coding theory,
codes that contain many possible codewords and can detect and correct
numerous errors, is usually of great interest. Nevertheless, the answer to our
question is much more complex than it may seem. As a matter of fact,
different forms of ECC can be useful in different situations. For example,
we have learned that first-order Reed-Muller codes are suited for very noisy
channels. This means that if a relatively high error probability is expected,

 20
then Reed-Muller codes can be found useful. In other situations, and for
other applications, RM codes are not employed. For instance, in 1979 the
Reed-Muller code (1,5) was replaced by the Golay (24,12,8) code.
NASA’s reason for doing this was to enable transmission of colour pictures
which required more data than the previous black and white pictures from
Mars. This is an example of how an ECC can be ideal in one situation and,
at the same time, not be suited for another situation with different
requirements.

In conclusion, we may reflect upon the importance of Reed-Muller codes in
the construction of many other codes. For instance, RM codes generalize the
Reed-Solomon codes and the Walsh-Hadamard code. In this thesis we have
specifically focused on first-order RM codes. In addition to their favorable
mathematical properties, they form a great introduction to the theory of
error-correcting codes. And so, we hope that the reader has acquired an
understanding for coding theory in general, and Reed-Muller codes in
specific. As a result of modern-day communication technologies, encoding
and decoding of messages takes place all around us. In fact, every data
transmission involves some error-detecting/correcting code to protect our
messages against errors.

 21
Bibliography

[1] Carlström, K., Davidsson F., Jonsson, V. and Mohamadi, A.
Felkorrigerande koder. Bachelor Degree Project. Gothenburg: Gothenburg
University, Department of Mathematical Sciences, 2019.

[2] Guruswami, V. and Raghavendra, P. Error-Correcting Codes. Seattle:
University of Washington, 2006.

[3] Lint, J. H. Introduction to Coding Theory. Berlin, New York: Springer
Publishers, 1992.

[4] MacWilliams, F.J. and Sloane, N.J.A. The Theory of Error Correcting
Codes. Amsterdam: North-Holland, 1983.

[5] Thomas, J.A. and Cover, T.M. Elements of Information Theory. New
Jersey: John Wiley & Sons, 2012.

[6] Thomlinson, M., Ahmed, M., Ambroze M.A., Jung Tjhai, C. and Jibril,
M. Error-Correction Coding and Decoding. Switzerland: Springer
International Publishing, 2017.

[7] University of Colorado Denver. Reed-Muller Codes. University of
Colorado Denver. Retrieved from http://www-
math.ucdenver.edu/~wcherowi/courses/m7823/reedmuller.pdf (2021-03-
25).

 22
You can also read