21ECE72_Coding and Cryp Module 2
21ECE72_Coding and Cryp Module 2
Error-Correcting Codes
Channel models, channel capacity, channel coding, Types of Codes.
Linear Block Codes: matrix description of Linear Block Codes, Error detection & Correction, hamming codes,
Low Density Parity Check (LDPC) Codes.
Binary Cyclic Codes: Algebraic Structure of Cyclic Codes, Encoding using an (n-k) Bit Shift register,
Syndrome Calculation, Error Detection and Correction.
Channel Models
Channel models represent how signals propagate from the transmitter to the receiver. They include various factors
such as noise, interference, and physical properties of the transmission medium. Common channel models are:
AWGN (Additive White Gaussian Noise): Simplest model where noise is Gaussian and uncorrelated
with the signal.
Rayleigh Fading: Models multipath propagation where there is no dominant line-of-sight path.
Rician Fading: Similar to Rayleigh but includes a strong line-of-sight component.
Path Loss Models: Account for the reduction in signal power over distance, like the Free Space Path Loss
model.
2. Channel Capacity
This refers to the maximum rate at which information can be transmitted over a communication channel without
error, given by Shannon's Capacity Theorem:
Where:
CCC is the channel capacity (bits per second).
BBB is the bandwidth of the channel (Hz).
SSS is the signal power.
NNN is the noise power.
3. Channel Coding
Channel coding is used to detect and correct errors in transmitted data. It adds redundancy to the transmitted signal
to improve its reliability. There are two main types of channel coding:
Error Detection: Identifies the presence of errors (e.g., Parity Check, CRC).
Error Correction: Detects and corrects errors at the receiver (e.g., Hamming Code, Reed-Solomon Code).
4. Types of Codes
Block Codes: These divide the message into fixed-size blocks and add redundancy to each block
independently.
o Example: Hamming Code, Reed-Solomon Code.
Convolutional Codes: Encode the entire message in a continuous stream, where the output depends on the
current and previous input bits.
o Example: Trellis Codes, Viterbi Algorithm for decoding.
Turbo Codes: Combine two or more convolutional codes with an interleaver, allowing very low error
rates close to Shannon’s limit.
LDPC (Low-Density Parity-Check) Codes: A class of highly efficient linear block codes with sparse
parity-check matrices, used in modern wireless standards like 5G.
Linear Block Codes
Linear block codes are a type of error-correcting code used in digital communication, where a set of information
bits are transformed into a larger set of bits by adding redundant bits (parity bits) to allow for error detection and
correction.
1. Matrix Description of Linear Block Codes
A linear block code can be described by two matrices:
Generator Matrix (G): Used to encode the message bits.
Parity-Check Matrix (H): Used to check for errors in the received message.
Encoding Process:
Error Detection and Correction
Linear block codes are designed to detect and correct errors by adding redundancy in the form of parity
bits.
3. Hamming Codes
Hamming codes are a specific type of linear block code that can detect and correct single-bit errors. They are
widely used due to their simplicity and efficiency.
Parameters:
Hamming codes are typically denoted as (n,k)(n, k)(n,k), where:
o n=2m−1n = 2^m - 1n=2m−1 (total bits, including parity bits).
o k=2m−1−mk = 2^m - 1 - mk=2m−1−m (number of information bits).
o mmm is the number of parity bits.
Construction of Hamming Codes:
The parity-check matrix HHH for Hamming codes is constructed such that each column is a unique binary
representation of numbers from 1 to nnn.
The generator matrix GGG can be derived from HHH by ensuring that it is in systematic form.
Error Detection and Correction:
Hamming codes are capable of:
Detecting 2-bit errors.
Correcting 1-bit errors.
4. Low-Density Parity-Check (LDPC) Codes
LDPC codes are a powerful type of linear block code that are used in modern communication systems, including
5G, due to their high error-correcting capability and near-Shannon-limit performance.
LDPC Code Structure:
Low Density: The parity-check matrix HHH of LDPC codes is sparse, meaning that most of the entries are
zero, which reduces complexity and allows efficient decoding.
Parity-Check Matrix: For an LDPC code, the matrix HHH has far fewer 1s than 0s. This structure makes
decoding more efficient using iterative algorithms like the belief propagation (or sum-product) algorithm.
Encoding:
The encoding of LDPC codes is similar to other linear block codes. A generator matrix GGG is derived from the
sparse parity-check matrix HHH. The message vector u\mathbf{u}u is encoded using c=u⋅G\mathbf{c} =
\mathbf{u} \cdot Gc=u⋅G.
Decoding:
LDPC codes use iterative decoding algorithms, such as the belief propagation or sum-product algorithm. These
algorithms update the likelihood of individual bits being correct based on the received message and the parity-
check constraints, gradually converging on the most likely transmitted codeword.
Applications of LDPC Codes:
LDPC codes are widely used in various communication standards like Wi-Fi (802.11n), 5G, and digital
television broadcasting (DVB-S2), where high data reliability is required.
Summary
Linear Block Codes: Represented by matrices GGG (generator) and HHH (parity-check), allowing error
detection and correction.
Hamming Codes: Simple block codes that detect 2-bit errors and correct 1-bit errors.
LDPC Codes: Advanced block codes with sparse parity-check matrices, enabling efficient error correction
in modern communication systems.
ERROR CONTROL CODING
INTRODUCTION
The earlier chapters have given you enough background of Information theory and Source
encoding. In this chapter you will be introduced to another important signal - processing operation,
namely, “Channel Encoding”, which is used to provide „reliable‟ transmission of information
over the channel. In particular, we present, in this and subsequent chapters, a survey of „Error
control coding‟ techniques that rely on the systematic addition of „Redundant‟ symbols to the
transmitted information so as to facilitate two basic objectives at the receiver: „Error- detection‟
and „Error correction‟. We begin with some preliminary discussions highlighting the role of error
control coding.
The main task required in digital communication is to construct „cost effective systems‟ for
transmitting information from a sender (one end of the system) at a rate and a level of reliability that
are acceptable to a user (the other end of the system). The two key parameters available are transmitted
signal power and channel band width. These two parameters along with power spectral density of noise
determine the signal energy per bit to noise power density ratio, Eb/N0 and this ratio, as seen in chapter
4, uniquely determines the bit error for a particular scheme and we would like to transmit information
at a rate RMax = 1.443 S/N. Practical considerations restrict the limit on Eb/N0 that we can assign.
Accordingly, we often arrive at modulation schemes that cannot provide acceptable data quality (i.e.
low enough error performance). For a fixed Eb/N0, the only practical alternative available for changing
data quality from problematic to acceptable is to use “coding”.
Another practical motivation for the use of coding is to reduce the required Eb/N0 for a fixed
error rate. This reduction, in turn, may be exploited to reduce the required signal power or reduce the
hardware costs (example: by requiring a smaller antenna size).
The coding methods discussed in chapter 2 deals with minimizing the average word length of
the codes with an objective of achieving the lower bound viz. H(S) / log r, accordingly, coding is
termed “entropy coding”. However, such source codes cannot be adopted for direct transmission over
the channel. We shall consider the coding for a source having four symbols with probabilitiesp
(s1) =1/2, p (s2) = 1/4, p (s3) = p (s4) =1/8. The resultant binary code using Huffman‟s procedure is:
s1……… 0 s3…… 1 1 0
s2……… 10 s4…… 1 1 1
Clearly, the code efficiency is 100% and L = 1.75 bints/sym = H(S). The sequence s3s4s1 will
then correspond to 1101110. Suppose a one-bit error occurs so that the received sequence is 0101110.
This will be decoded as “s1s2s4s1”, which is altogether different than the transmitted sequence. Thus
although the coding provides 100% efficiency in the light of Shannon‟s theorem, it suffers a major
disadvantage. Another disadvantage of a „variable length‟ code lies in the fact that output data rates
measured over short time periods will fluctuate widely. To avoid this problem, buffers of large length
will be needed both at the encoder and at the decoder to store the variable rate bit stream if a fixed
output rate is to be maintained.
Some of the above difficulties can be resolved by using codes with “fixed length”. For example,
if the codes for the example cited are modified as 000, 100, 110, and 111. Observe that evenif there is
a one-bit error, it affects only one “block” and that the output data rate will not fluctuate. The
encoder/decoder structure using „fixed length‟ code words will be very simple compared to the
complexity of those for the variable length codes.
Here after, we shall mean by “Block codes”, the fixed length codes only. Since as discussed
above, single bit errors lead to „single block errors‟, we can devise means to detect and correct these
errors at the receiver. Notice that the price to be paid for the efficient handling and easy manipulations
of the codes is reduced efficiency and hence increased redundancy.
In general, whatever be the scheme adopted for transmission of digital/analog information, the
probability of error is a function of signal-to-noise power ratio at the input of a receiver and the data
rate. However, the constraints like maximum signal power and bandwidth of the channel (mainly the
Governmental regulations on public channels) etc, make it impossible to arrive at a signaling scheme
which will yield an acceptable probability of error for a given application. The answer to this problem
is then the use of „error control coding‟, also known as „channel coding‟. In brief, “error control
coding is the calculated addition of redundancy”. The block diagram of a typical data transmission
system is shown in Fig. 4.1
The information source can be either a person or a machine (a digital computer). The source
output, which is to be communicated to the destination, can be either a continuous wave form or a
sequence of discrete symbols. The „source encoder‟ transforms the source output into a sequence of
binary digits, the information sequence u. If the source output happens to be continuous, this involves
A-D conversion as well. The source encoder is ideally designed such that (i) the number of bints per
unit time (bit rate, rb) required to represent the source output is minimized (ii) the source output can be
uniquely reconstructed from the information sequence u.
Fig 4.1: Block diagram of a typical data transmission
The „Channel encoder‟ transforms u to the encoded sequence v, in general, a binary sequence,
although non-binary codes can also be used for some applications. As discrete symbols are not suited
for transmission over a physical channel, the code sequences are transformed to waveformsof specified
durations. These waveforms, as they enter the channel get corrupted by noise. Typical channels include
telephone lines, High frequency radio links, Telemetry links, Microwave links, and Satellite links and
so on. Core and semiconductor memories, Tapes, Drums, disks, optical memory and so on are typical
storage mediums. The switching impulse noise, thermal noise, cross talk and lightning are some
examples of noise disturbance over a physical channel. A surface defect on a magnetic tape is a source
of disturbance. The demodulator processes each received waveform and produces an output, which
may be either continuous or discrete – the sequence r. The channel decoder transforms r into a binary
sequence, û which gives the estimate of u, and ideally should be the replica of u. The source decoder
then transforms û into an estimate of source output and delivers this to the destination.
Error control for data integrity may be exercised by means of „forward error correction‟
(FEC) where in the decoder performs error correction operation on the received information
according to the schemes devised for the purpose. There is however another major approach known
as „Automatic Repeat Request‟ (ARQ), in which a re-transmission of the ambiguous information is
effected, is also used for solving error control problems. In ARQ, error correction is not done at all.
The redundancy introduced is used only for „error detection‟ and upon detection, the receiver requests
a repeat transmission which necessitates the use of a return path (feed back channel).
We will briefly discuss in this chapter the channel encoder and decoder strategies, our major
interest being in the design and implementation of the channel „encoder/decoder‟ pair to achieve fast
transmission of information over a noisy channel, reliable communication of information and reduction
of the implementation cost of the equipment.
The simplest channel results from the use of binary symbols (both as input and output). When
binary coding us used the modulator has only „0‟`s and „1‟`s as inputs. Similarly, the inputs to the
demodulator also consists of „0‟`s and „1‟`s provided binary quantization is used. If so we say a
„Hard decision‟ is made on the demodulator output so as to identify which symbol was actually
transmitted. In this case we have a „Binary symmetric channel‟ (BSC). The BSC when derived from
an additive white Gaussian noise (AWGN) channel is completely described by the transition
probability „p‟. The majority of coded digital communication systems employ binary coding with hard-
decision decoding due to simplicity of implementation offered by such an approach.
The use of hard-decisions prior to decoding causes an irreversible loss of information in the
receiver. To overcome this problem “soft-decision” coding is used. This can be done by including a
multilevel quantizer at the demodulator output as shown in Fig. 4.2(a) for the case of binary PSK
signals. The input-output characteristics and the channel transitions are shown in Fig. 4.2(b) and
Fig. 4.2(c) respectively. Here the input to the demodulator has only two symbols „0‟`s and „1‟`s.
However, the demodulator output has „Q‟ symbols. Such a channel is called a “Binary input-Q-ary
output DMC”. The form of channel transitions and hence the performance of the demodulator,
depends on the location of representation levels of the quantizer, which inturn depends on the signal
level and variance of noise. Therefore, the demodulator must incorporate automatic gain control, if an
effective multilevel quantizer is to be realized. Further the soft-decision decoding offers significant
improvement in performance over hard-decision decoding.
Fig. 4.2 (a) - Reciever
“It is possible in principle, to devise a means where by a communication system will transmit
information with an arbitrarily small probability of error, provided the information rate R (=r I(X,Y)
where r-is the symbol rate) is less than or equal to a rate „C‟ called the „channel capacity”. The
technique used to achieve this goal is called “Coding”. For the special case of a BSC, the theorem tells
us that if the code rate, Rc (defined later) is less than the channel capacity, then it is possible to find a
code that achieves error free transmission over the channel. Conversely, it is not possible tofind
such a code if the code rate Rc is greater than C.
The channel coding theorem thus specifies the channel capacity as a “Fundamental limit” on
the rate at which reliable transmission (error-free transmission) can take place over a DMC. Clearly,
the issue that matters is not the signal to noise ratio (SNR), so long as it is large enough, but how the
input is encoded.
The most un-satisfactory feature of Shannon‟s theorem is that it stresses only about the
“existence of good codes”. But it does not tell us how to find them. So, we are still faced with the
task of finding a good code that ensures error-free transmission. The error-control coding techniques
presented in this and subsequent chapters provide different methods of achieving this important system
requirement.
Types of errors:
The errors that arise in a communication system can be viewed as „independent errors‟ and
„burst errors‟. The first type of error is usually encountered by the „Gaussian noise‟, which is the
chief concern in the design and evaluation of modulators and demodulators for data transmission. The
possible sources are the thermal noise and shot noise of the transmitting and receiving equipment,
thermal noise in the channel and the radiations picked up by the receiving antenna. Further, in majority
situations, the power spectral density of the Gaussian noise at the receiver input is white. The
transmission errors introduced by this noise are such that the error during a particular signaling interval
does not affect the performance of the system during the subsequent intervals. The discrete channel, in
this case, can be modeled by a Binary symmetric channel. These transmission errors dueto Gaussian
noise are referred to as „independent errors‟ (or random errors).
The second type of error is encountered due to the „impulse noise‟, which is characterized by
long quiet intervals followed by high amplitude noise bursts (As in switching and lightning). A noise
burst usually affects more than one symbol and there will be dependence of errors in successive
transmitted symbols. Thus errors occur in bursts
Types of codes:
There are mainly two types of error control coding schemes – Block codes and convolutional
codes, which can take care of either type of errors mentioned above.
In a block code, the information sequence is divided into message blocks of k bits each,
represented by a binary k-tuple, u = (u1, u2 ….uk) and each block is called a message. The symbol u,
here, is used to denote a k – bit message rather than the entire information sequence. The encoder
then transforms u into an n-tuple v = (v1, v2 ….vn). Here v represents an encoded block rather than the
entire encoded sequence. The blocks are independent of each other.
The encoder of a convolutional code also accepts k-bit blocks of the information sequence u
and produces an n-symbol block v. Here u and v are used to denote sequences of blocks rather than a
single block. Further each encoded block depends not only on the present k-bit message block but also
on m-pervious blocks. Hence the encoder has a memory of order „m‟. Since the encoder has memory,
implementation requires sequential logic circuits.
If the code word with n-bits is to be transmitted in no more time than is required for the
transmission of the k-information bits and if τb and τc are the bit durations in the encoded and coded
words, i.e. the input and output code words, then it is necessary that
n.τc = k.τb
Better way to understand the important aspects of error control coding is by way of an example.
Suppose that we wish transmit data over a telephone link that has a useable bandwidth of 4 KHZ and
a maximum SNR at the out put of 12 dB, at a rate of 1200 bits/sec with a probability of error less than
10-3. Further, we have DPSK modem that can operate at speeds of 1200, 1400 and 3600 bits/sec with
error probabilities 2(10-3), 4(10-3) and 8(10-3) respectively. We are asked to design an error control
coding scheme that would yield an overall probability of error < 10-3. We have:
S S
[C=Blog2 (1+ ). 12dB or15.85 , B=4KHZ], p = 2(10-3), 4(10-3) and 8(10-3) respectively.
N N
Since Rc < C, according to Shannon‟s theorem, we should be able to transmit data with arbitrarily
small probability of error. We shall consider two coding schemes for this problem.
(i) Error detection: Single parity check-coding. Consider the (4, 3) even parity check code.
Parity 0 1 1 0 1 0 0 1
This code is capable of „detecting‟ all single and triple error patterns. Data comes out of the channel
encoder at a rate of 3600 bits/sec and at this rate the modem has an error probability of 8(10-3). The
decoder indicates an error only when parity check fails. This happens for single and triple errors only.
pd p( 1 p ) 3 p ( 1 p ), 4C1 4 , 4C3 4
1 1 3
Expanding we get pd 4 p 12 p2 16 p3 8 p4
pd = 32 (10-3) - 768 (10-6) +8192 (10-9) – 32768 (10-12) = 0.031240326 > > (10-3)
However, an error results if the decoder does not indicate any error when an error indeed has occurred.
This happens when two or 4 errors occur. Hence probability of a detection error = pnd (probability of
no detection) is given by:
pnd P( X 2 ) P( X 4 ) p2 ( 1 p )2 p4 ( 1 p )0 6 p2 12 p3 7 p4
4 4
2 4
(ii) Error Correction: The triplets 000 and 111 are transmitted whenever 0 and 1 are inputted.
A majority logic decoding, as shown below, is employed assuming only single errors.
Output 0 0 0 0 1 1 1 1
message
3 2 3 3 0 2 3
Probability of no detection, pnd =P (All 3 bits in error) = p3 =512 x 10-9 < < pde!
In general observe that probability of no detection, pnd < < probability of decoding error, pde.
The preceding examples illustrate the following aspects of error control coding. Note that in
both examples with out error control coding the probability of error =8(10-3) of the modem.
1. It is possible to detect and correct errors by adding extra bits-the check bits, to the message
sequence. Because of this, not all sequences will constitute bonafied messages.
3. Addition of check bits reduces the effective data rate through the channel.
4. Since probability of no detection is always very much smaller than the decoding error
probability, it appears that the error detection schemes, which do not reduce the rate efficiency
as the error correcting schemes do, are well suited for our application. Since error detection
schemes always go with ARQ techniques, and when the speed of communication becomes a
major concern, Forward error correction (FEC) using error correction schemes would be
desirable.
Block codes:
We shall assume that the output of an information source is a sequence of Binary digits. In
„Block coding‟ this information sequence is segmented into „message‟ blocks of fixed length, say k.
Each message block, denoted by u then consists of k information digits. The encoder transforms these
k-tuples into blocks of code words v, each an n- tuple „according to certain rules‟. Clearly,
corresponding to 2k information blocks possible, we would then have 2k code words of length n > k.
This set of 2k code words is called a “Block code”. For a block code to be useful these 2k code words
must be distinct, i.e. there should be a one-to-one correspondence between u and v. u and v are also
referred to as the „input vector‟ and „code vector‟ respectively. Notice that encoding equipment must
be capable of storing the 2k code words of length n > k. Accordingly, the complexity of the equipment
would become prohibitory if n and k become large unless the code words have a special structural
property conducive for storage and mechanization. This structural is the „linearity‟.
A block code is said to be linear (n ,k) code if and only if the 2k code words from a k-
dimensional sub space over a vector space of all n-Tuples over the field GF(2).
Fields with 2m symbols are called „Galois Fields‟ (pronounced as Galva fields), GF (2m).Their
arithmetic involves binary additions and subtractions. For two valued variables, (0, 1).The modulo –
2 addition and multiplication is defined in Fig 4.3.
Fig 4.3
The binary alphabet (0, 1) is called a field of two elements (a binary field and is denoted by GF
(2). (Notice that represents the EX-OR operation and represents the AND operation).Furtherin
binary arithmetic, X=X and X – Y = X Y. similarly for 3-valued variables, modulo – 3 arithmetic
can be specified as shown in Fig 6.4. However, for brevity while representing polynomials involving
binary addition we use + instead of and there shall be no confusion about such usage.
Polynomials f(X) with 1 or 0 as the co-efficients can be manipulated using the above relations.
The arithmetic of GF(2m) can be derived using a polynomial of degree „m‟, with binary co-efficients
and using a new variable called the primitive element, such that p() = 0.When p(X) isirreducible
(i.e. it does not have a factor of degree m and >0, for example X3 + X2 + 1, X3 + X + 1, X4 +X3 +1,
X5 +X2 +1 etc. are irreducible polynomials, whereas f(X)=X4+X3+X2+1 is not as f(1) = 0 and hence
has a factor X+1) then p(X) is said to be a „primitive polynomial‟.
If vn represents a vector space of all n-tuples, then a subset S of vn is called a subspace if (i) the
all Zero vector is in S (ii) the sum of any two vectors in S is also a vector in S. To be more specific, a
block code is said to be linear if the following is satisfied. “If v1 and v2 are any two code words of
length n of the block code then v1 v2 is also a code word length n of the block code”.
Observe the linearity property: With v3 = (010 101) and v4 = (100 011), v3 v4 = (110 110) = v7.
Remember that n represents the word length of the code words and k represents the number
of information digits and hence the block code is represented as (n, k) block code.
Thus by definition of a linear block code it follows that if g1, g2…gk are the k linearly
independent code words then every code vector, v, of our code is a combination of these code words,
i.e.
Where uj= 0 or 1, 1 j k
Eq (6.1) can be arranged in matrix form by nothing that each gj is an n-tuple, i.e.
Notice that any k linearly independent code words of an (n, k) linear code can be used to form
a Generator matrix for the code. Thus it follows that an (n, k) linear code is completely specified by
the k-rows of the generator matrix. Hence the encoder need only to store k rows of G and form linear
combination of these rows based on the input message u.
Example 4.2: The (6, 3) linear code of Example 6.1 has the following generator matrix:
g1 1 0 0 0 1 1
G g 0 1 0 1 0 1
2
g3 0 0 1 1 1 0
Thus v = (0 1 1 0 1 1)
“v can be computed simply by adding those rows of G which correspond to the locations of
1`s of u.”
A desirable property of linear block codes is the “Systematic Structure”. Here a code word is
divided into two parts –Message part and the redundant part. If either the first k digits or the last k
digits of the code word correspond to the message part then we say that the code is a “Systematic Block
Code”. We shall consider systematic codes as depicted in Fig.4.5.
vk 2 u1 p12 u2 p22 u3 p32 uk pk2
……………… (4.6 b)
⁝ ⁝
k1 k2 k ,n k
i.e., v = u.G
where, „T‟ represents transposition. Accordingly for any kn matrix, G, with k linearly independent
rows there exists a (n-k) n matrix H with (n-k) linearly independent rows such that any vector in
the row space of G is orthogonal to the rows of H and that any vector that is orthogonal to the rows
of H is in the row space of G. Therefore, we can describe an (n, k) linear code generated by G
alternatively as follows:
“An n – tuple, v is a code word generated by G, if and only if v.HT = O”. ……… (4.9a)
(O represents an all zero row vector.)
This matrix H is called a “parity check matrix” of the code. Its dimension is (n – k) n.
If the generator matrix has a systematic format, the parity check matrix takes the following form.
p11 p21 ... pk 1 1 0 0 ... 0
p
T 12 p22 ... pk 2 0 1 0 ... 0
H = [P .In-k] = ……… (4.10)
⁝ ⁝ ⁝ ⁝⁝⁝ ⁝ ⁝ ⁝ ⁝⁝⁝ ⁝
p ... p 0 0 0 ... 1
p
1,n k 2 ,n k k ,n k
gihj = (0 0 …1 …0…0 pi,1 pi,2…pi,j…pi, n-k) ( p1,j p2,j …pi,j ...pk, j 0 0 … 0 1 0 …0)T
ith element (k + j) th element ith element (k + j) th element
= pij + pij. = 0 (as the pij are either 0 or 1 and in modulo – 2 arithmetic X + X = 0)
Further, since the (n – k) rows of the matrix H are linearly independent, the H matrix ofEq.
(4.10) is a parity check matrix of the (n, k) linear systematic code generated by G. Notice that theparity
check equations of Eq. (4.6b) can also be obtained from the parity check matrix using the fact
v.HT = O.
Where pi =( u1 p1,i + u2 p2,i + u3 p3,i …+ uk pk, i) are the parity bits found from Eq (4.6b).
P
Now H T I
n k
v.HT = [u1 p11 + u2 p21 +…. + …. + uk pk1 + p1, u1 p12 + u2 p22 + ….. + uk pk2 + p2, …
u1 p1, n-k + u2 p2, n-k + …. + uk pk, n-k + pn-k]
Thus v. HT = O. This statement implies that an n- Tuple v is a code word generated by G if and only
if
v HT = O
If this is to be true for any arbitrary message vector v then this implies: G HT = Ok (n – k)
Example 4.3:
Consider the generator matrix of Example 4.2, the corresponding parity check matrix is
0 1 1 1 0 0
H = 1 0 1 0 1 0
1 1 0 0 0 1
The implementation of Block codes is very simple. We need only combinational logic circuits.
Implementation of Eq (4.6) is shown in the encoding circuit of Fig.4.6. Notice that pij is either a „0‟ or
a „1‟ and accordingly pij indicates a connection if pij = 1 only (otherwise no connection). The
encoding operation is very simple. The message u = (u1, u2 … uk) to be encoded is shifted into the
message register and simultaneously into the channel via the commutator. As soon as the entire
message has entered the message register, the parity check digits are formed using modulo -2 adders,
which may be serialized using, another shift register – the parity register, and shifted into the channel.
Notice that the complexity of the encoding circuit is directly proportional to the block length of the
code. The encoding circuit for the (6, 3) block code of Example 2 is shown in Fig 4.7
Fig 4.6 Encoding circuit for systematic block code
Fig 4.7 Encoder for the (6,3) block code of example 4.2
Suppose v = (v1, v2… vn) be a code word transmitted over a noisy channel and let:
r = (r1, r2 ….rn) be the received vector. Clearly, r may be different from v owing to the channel noise.
The vector sum
is an n-tuple, where ej = 1 if rj vj and ej = 0 if rj = vj. This n – tuple is called the “error vector” or
“error pattern”. The 1‟s in e are the transmission errors caused by the channel noise. Hence from
Eq (4.12) it follows:
s = r. HT …………………….. (4.13)
= (s1, s2… sn-k)
It then follows from Eq (4.9a), that s = 0 if and only if r is a code word and s 0 iffy r is not
a code word. This vector s is called “The Syndrome” (a term used in medical science referring to
collection of all symptoms characterizing a disease). Thus if s = 0, the receiver accepts r as a valid code
word. Notice that there are possibilities of errors undetected, which happens when e is identical to a
nonzero code word. In this case r is the sum of two code words which according to our linearity
property is again a code word. This type of error pattern is referred to an “undetectable error pattern”.
Since there are 2k -1 nonzero code words, it follows that there are 2k -1 error patterns as well. Hence
when an undetectable error pattern occurs the decoder makes a “decoding error”.
Eq. (4.13) can be expanded as below:
A careful examination of Eq. (4.14) reveals the following point. The syndrome is simply the vector
sum of the received parity digits (rk+1, rk+2 ...rn) and the parity check digits recomputed from the
received information digits (r1, r2 … rn). Thus, we can form the syndrome by a circuit exactly similar
to that of Fig.6.6 and a general syndrome circuit is as shown in Fig. 4.8.
Example 4.4:
We shall compute the syndrome for the (6, 3) systematic code of Example 4.2. We have
0 1 1
1 0 1
s = (s1, s2, s3) = (r1, r2, r3, r4, r5, r6) 1 1 0
1 0 0
0 1 0
0 0 1
or s1 = r2 +r3 + r4
s2 = r1 +r3 + r5
s3 = r1 +r2 + r6
Fig 4.8 Syndrome circuit for the (n,k) Linear systematic block code
Fig 4.8 Syndrome circuit for the (6,3) systematic block code
s = r.HT = (v e) HT
= v .HT e.HT
or s = e.HT …………… (4.15)
as v.HT= O. Eq. (4.15) indicates that the syndrome depends only on the error pattern and not on the
transmitted code word v. For a linear systematic code, then, we have the following relationship between
the syndrome digits and the error digits.
s1 = e1 p11 + e2 p21 + …. + ek pk,1 + ek+1
s2 = e1 p12 + e2 p22 + …+ ek pk, 2 + ek+ 2
…………… (4.16)
⁝ ⁝ ⁝ ⁝ ⁝
sn-k = e1 p1, n-k + e2 p2, n-k + …..+ ek pk, n-k + en
Thus, the syndrome digits are linear combinations of error digits. Therefore they must provide
us information about the error digits and help us in error correction.
Notice that Eq. (4.16) represents (n-k) linear equations for n error digits – an under-determined
set of equations. Accordingly it is not possible to have a unique solution for the set. As the rank of the
H matrix is k, it follows that there are 2k non-trivial solutions. In other words there exist 2k error
patterns that result in the same syndrome. Therefore to determine the true error pattern is not any easy
task
Example 4.5:
For the (6, 3) code considered in Example 4.2, the error patterns satisfy the following equations:
There are 23 = 8 error patterns that satisfy the above equations. They are:
{0 0 1 0 0 0, 1 0 0 0 0, 0 0 0 1 1 0, 0 1 0 0 1 1, 1 0 0 1 0 1, 0 1 1 1 0 1, 1 0 1 0 1 1, 1 1 1 1 1 0}
To minimize the decoding error, the “Most probable error pattern” that satisfies Eq (4.16) is
chosen as the true error vector. For a BSC, the most probable error pattern is the one that has the
smallest number of nonzero digits. For the Example 4.5, notice that the error vector (0 0 1 0 0 0) has
the smallest number of nonzero components and hence can be regarded as the most probable error
vector. Then using Eq. (4.12) we have
vˆ = r e
= (0 1 1 1 0 1) + (0 0 1 0 0 0) = (0 1 0 1 0 1)
The concept of distance between code words and single error correcting codes was first
developed by R .W. Hamming. Let the n-tuples,
be two code words. The “Hamming distance” d (,) between such pair of code vectors is defined
as the number of positions in which they differ. Alternatively, using Modulo-2 arithmetic, we have
n
d( , ) ( j j ) ……………………. (4.17)
j 1
(Notice that represents the usual decimal summation and is the modulo-2 sum, the EX-OR
function).
The “Hamming Weight” () of a code vector is defined as the number of nonzero
elements in the code vector. Equivalently, the Hamming weight of a code vector is the distance between
the code vector and the „all zero code vector‟.
Notice that the two vectors differ in 4 positions and hence d (,) = 4. Using Eq (4.17) we find
d (,) = (0 1) + (1 0) + (1 1) + (1 0) + (0 1) + (1 1)
= 1 + 1 + 0 + 1 + 1 + 0
The “Minimum distance” of a linear block code is defined as the smallest Hammingdistance
between any pair of code words in the code or the minimum distance is the same as the
smallest Hamming weight of the difference between any pair of code words. Since in linear block
codes, the sum or difference of two code vectors is also a code vector, it follows then that “the
minimum distance of a linear block code is the smallest Hamming weight of the nonzero code
vectors in the code”.
The Hamming distance is a metric function that satisfies the triangle inequality. Let, and
be three code vectors of a linear block code. Then
Notice that the above three distances satisfy the triangle inequality:
Similarly, the minimum distance of a linear block code, „C‟ may be mathematically
represented as below:
That is dmin min . The parameter min is called the “minimum weight” of the linear
code C.The minimum distance of a code, dmin, is related to the parity check matrix, H, of the code in
a fundamental way. Suppose v is a code word. Then from Eq. (4.9a) we have:
0 = v.HT
Here h1, h2 … hn represent the columns of the H matrix. Let vj1, vj2 …vjl be the „l‟ nonzero
components of v i.e. vj1 = vj2 = …. vjl = 1. Then it follows that:
That is “if v is a code vector of Hamming weight „l‟, then there exist „l‟ columns of H such
that the vector sum of these columns is equal to the zero vector”. Suppose we form a binary n- tuple
of weight „l‟, viz. x = (x1, x2 … xn) whose nonzero components are xj1, xj2 … xjl. Consider the product:
x.HT = x1h1 x2h2 …. xnhn = xj1hj1 xj2hj2 …. xjlhjl = hj1 hj2 … hjl
If Eq. (4.22) holds, it follows x.HT = O and hence x is a code vector. Therefore, we conclude
that “if there are „l‟ columns of H matrix whose vector sum is the zero vector then there exists a
code vector of Hamming weight „l‟ ”.
From the above discussions, it follows that:
i) If no (d-1) or fewer columns of H add to OT, the all zero column vector, the code has a
minimum weight of at least„d‟.
ii) The minimum weight (or the minimum distance) of a linear block code C, is the smallest
number of columns of H that sum to the all zero column vector.
0 1 1 1 0 0
For the H matrix of Example 6.3, i.e. H = 1 0 1 0 1 0 , notice that all columns of H are non
1 1 0 0 0 1
zero and distinct. Hence no two or fewer columns sum to zero vector. Hence the minimum weight of
the code is at least 3.Further notice that the 1st, 2nd and 3rd columns sum to OT. Thus the minimum
weight of the code is 3. We see that the minimum weight of the code is indeed 3 from the table of
Example 4.1.
The minimum distance, dmin, of a linear block code is an important parameter of the code. To
be more specific, it is the one that determines the error correcting capability of the code. Tounderstand
this we shall consider a simple example. Suppose we consider 3-bit code words plotted at the vertices
of the cube as shown in Fig.4.10.
Fig 4.10 The distance concept
Clearly, if the code words used are {000, 101, 110, 011}, the Hamming distance between the
words is 2. Notice that any error in the received words locates them on the vertices of the cube which
are not code words and may be recognized as single errors. The code word pairs with Hamming distance
= 3 are: (000, 111), (100, 011), (101, 010) and (001, 110). If a code word (000) is receivedas (100,
010, 001), observe that these are nearer to (000) than to (111). Hence the decision is made that the
transmitted word is (000).
Suppose an (n, k) linear block code is required to detect and correct all error patterns (over a
BSC), whose Hamming weight, t. That is, if we transmit a code vector and the received vector
is = e, we want the decoder out put to be ˆ = subject to the condition (e) t.
Further, assume that 2k code vectors are transmitted with equal probability. The best decision
for the decoder then is to pick the code vector nearest to the received vector for which the Hamming
distance is the smallest. i.e., d (,) is minimum. With such a strategy the decoder will be able to detect
and correct all error patterns of Hamming weight (e) t provided that the minimum distance of the
code is such that:
dmin is either odd or even. Let „t‟ be a positive integer such that
Suppose be any other code word of the code. Then, the Hamming distances among
, and satisfy the triangular inequality:
Combining Eq. (4.25) and (4.26) and with the fact that d(,) = t, it follows that:
Eq 4.28 says that if an error pattern of „t‟ or fewer errors occurs, the received vector is closer
(in Hamming distance) to the transmitted code vector than to any other code vector of the code.
For a BSC, this means P (|) > P (|) for . Thus based on the maximum likelihood decoding
scheme, is decoded as , which indeed is the actual transmitted code word and this results in the
correct decoding and thus the errors are corrected.
On the contrary, the code is not capable of correcting error patterns of weight l>t. To show this
we proceed as below:
Suppose d (,) = dmin, and let e1 and e2 be two error patterns such that:
i) e1 e2 =
Suppose, is the transmitted code vector and is corrupted by the error pattern e1. Then the received
vector is:
= e1 ……………………….. (4.30)
d (,) = ()
This inequality says that there exists an error pattern of l > t errors which results in a received
vector closer to an incorrect code vector i.e. based on the maximum likelihood decoding scheme
decoding error will be committed.
To make the point clear, we shall give yet another illustration. The code vectors and the received
vectors may be represented as points in an n- dimensional space. Suppose we construct two spheres,
each of equal radii,„t‟ around the points that represent the code vectors and . Further let these two
spheres be mutually exclusive or disjoint as shown in Fig.4.11 (a).
For this condition to be satisfied, we then require d (,) 2t + 1.In such a case if d (,) t,
it is clear that the decoder will pick as the transmitted vector.
Fig. 4.11(a)
On the other hand, if d (,) 2t, the two spheres around and intersect and if „‟ is located as in
Fig. 4.11(b), and is the transmitted code vector it follows that even if d (,) t, yet is as close to
as it is to. The decoder can now pick as the transmitted vector which is wrong. Thus it is imminent
that “an (n, k) linear block code has the power to correct all error patterns of weight„t‟ or less if and
only if d (,) 2t + 1 for all and”. However, since the smallest distance between any pair of code
words is the minimum distance of the code, dmin , „guarantees‟ correcting all the error patterns of
1
t (d
min
1 ) …………………………. (4.35)
2
1 1
where ( d min 1 ) denotes the largest integer no greater than the number ( d 1 ) . The
min
2 2
1
parameter„t‟ = ( d min 1 ) is called the “random-error-correcting capability” of the code and
2
the code is referred to as a “t-error correcting code”. The (6, 3) code of Example 4.1 has a
minimum distance of 3 and from Eq. (6.35) it follows t = 1, which means it is a „Single Error
Correcting‟ (SEC) code. It is capable of correcting any error pattern of single errors over a block of
six digits.
For an (n, k) linear code, observe that, there are 2n-k syndromes including the all zero
syndrome. Each syndrome corresponds to a specific error pattern. If „j‟ is the number of error
n
locations in the n-dimensional error pattern e, we find in general, there are nC j multiple error
j
t n
patterns. It then follows that the total number of all possible error patterns = , where„t‟ is the
j
j 0
maximum number of error locations in e. Thus we arrive at an important conclusion. “If an (n, k)
linear block code is to be capable of correcting up to„t‟ errors, the total number of syndromes
shall not be less than the total number of all possible error patterns”, i.e.
n-k
t n
2 ………………………. (4.36)
j
j 0
Eq (6.36) is usually referred to as the “Hamming bound”. A binary code for which the Hamming
Bound turns out to be equality is called a “Perfect code”.
Suppose vj , j = 1, 2… 2k, be the 2k distinct code vectors of an (n, k) linear block code.
Correspondingly let, for any error pattern e, the 2k distinct error vectors, ej, be defined by
ej = e vj , j = 1, 2… 2k ………………………. (4.37)
The set of vectors {ej, j = 1, 2 … 2k} so defined is called the “co- set” of the code. That is, a
„co-set‟ contains exactly 2k elements that differ at most by a code vector. It then fallows that there are
2n-k co- sets for an (n, k) linear block code. Post multiplying Eq (4.37) by HT, we find
ej HT = eHT vj HT
33
= e HT ………………………………………………. (4.38)
34
Notice that the RHS of Eq (4.38) is independent of the index j, as for any code word the term
vjHT = 0. From Eq (4.38) it is clear that “all error patterns that differ at most by a code word have
the same syndrome”. That is, each co-set is characterized by a unique syndrome.
Since the received vector r may be any of the 2n n-tuples, no matter what the transmitted code
word was, observe that we can use Eq (4.38) to partition the received code words into 2k disjoint sets
and try to identify the received vector. This will be done by preparing what is called the “standard
array”. The steps involved are as below:
Step1: Place the 2k code vectors of the code in a row, with the all zero vector
v1 = (0, 0, 0… 0) = O as the first (left most) element.
Step 2: From among the remaining (2n – 2k) - n – tuples, e2 is chosen and placed below the all-
zero vector, v1. The second row can now be formed by placing (e2 vj),j =
2, 3… 2k under vj
Step 3: Now take an un-used n-tuple e3 and complete the 3rd row as in step 2.
Step 4: continue the process until all the n-tuples are used.
Since all the code vectors, vj, are all distinct, the vectors in any row of the array are also distinct.
For, if two n-tuples in the l-th row are identical, say el vj = el vm, j m; we should have vj = vm
which is impossible. Thus it follows that “no two n-tuples in the same row of a slandered array are
identical”.
Next, let us consider that an n-tuple appears in both l-th row and the m-th row. Then for some
j1 and j2 this implies el vj1 = em vj2, which then implies el = em (vj2 vj1); (remember thatX
X = 0 in modulo-2 arithmetic) or el = em vj3 for some j3. Since by property of linear block codes
vj3 is also a code word, this implies, by the construction rules given, that el must appear in the m-th
row, which is a contradiction of our steps, as the first element of the m-th row is em and is an unused
vector in the previous rows. This clearly demonstrates another important property of thearray:
“Every n-tuple appearance in one and only one row”.
From the above discussions it is clear that there are 2n-k disjoint rows or co-sets in the standard
array and each row or co-set consists of 2k distinct entries. The first n-tuple of each co-set, (i.e., the
entry in the first column) is called the “Co-set leader”. Notice that any element of the co-set can be
used as a co-set leader and this does not change the element of the co-set - it results simply in a
permutation.
Suppose DjT is the jth column of the standard array. Then it follows
where vj is a code vector and e2, e3, … e2n-k are the co-set leaders.
The 2k disjoints columns D T, D T… D T can now be used for decoding of the code. If v is
1 2 2k j
the transmitted code word over a noisy channel, it follows from Eq (5.39) that the received vector r is
in DjT if the error pattern caused by the channel is a co-set leader. If this is the case r will be decoded
correctly as vj. If not an erroneous decoding will result for, any error pattern eˆ which is not a co-set
leader must be in some co-set and under some nonzero code vector is, say, in the i-th co-set and under
v 0. Then it follows
So, from the above discussion, it follows that in order to minimize the probability of a decoding
error, “The most likely to occur” error patterns should be chosen as co-set leaders. For a BSC an error
pattern of smallest weight is more probable than that of a larger weight. Accordingly, when forming a
standard array, error patterns of smallest weight should be chosen as co-set leaders. Then the decoding
based on the standard array would be the „minimum distance decoding‟ (the maximum likelihood
decoding). This can be demonstrated as below.
Suppose a received vector r is found in the jth column and lth row of the array. Then r will be
decoded as vj. We have
where we have assumed vj indeed is the transmitted code word. Let vs be any other code word, other
than vj. Then
Suppose “a0, a1, a2 …, an” denote the number of co-set leaders with weights 0, 1, 2… n. This
set of numbers is called the “Weight distribution” of the co-set leaders. Since a decoding error will
occur if and only if the error pattern is not a co-set leader, the probability of a decoding error for a
BSC with error probability (transition probability) p is given by
n
Example 4.8:
For the (6, 3) linear block code of Example 4.1 the standard array, along with the syndrome
table, is as below:
The weight distribution of the co-set leaders in the array shown are a0 = 1, a1 = 6, a2 = 1, a3 = a4 = a5
= a6 = 0.From Eq (5.40) it then follows:
A received vector (010 001) will be decoded as (010101) and a received vector (100 110) will be
decoded as (110 110).
Notice that an (n, k) linear code is capable of detecting (2n -2k) error patterns while it is
capable of correcting only 2n-k error patterns. Further, as n becomes large 2n-k/ (2n-2k) becomes
smaller and hence the probability of a decoding error will be much higher than the probability of an
undetected error.
Let us turn our attention to Eq (5.35) and arrive at an interpretation. Let x1and x2 be two n-
tuples of weights„t‟ or less. Then it follows
Suppose x1 and x2 are in the same co-set then it follows that (x1 x2) must be a nonzero code
vector of the code. This is impossible because the weight of (x1 x2) is less than the minimum weight
of the code. Therefore, “No two n-tuples, whose weights are less than or equal to„t‟, can be in the
same co-set of the code and all such n-tuples can be used as co-set leaders”.
Further, if v is a minimum weight code vector, i.e. (v) = dmin and if the n-tuples, x1 and x2
satisfy the following two conditions:
i) x1 x2 = v
It follows from the definition, x1 and x2 must be in the same co-set and
Suppose we choose x2 such that (x2) = t + 1. Since 2t+1 dmin 2t+2, we have (x1) = t or (t+1).
If x1 is used as a co-set leader then x2 cannot be a co-set leader.
The above discussions may be summarized by saying “For an (n , k) linear block code with
1
minimum distance dmin, all n-tuples of weight t ( d min 1 ) can be used as co-set leaders of
2
a standard array. Further, if all n-tuples of weight t are used as co-set leaders, there is at least
one n-tuple of weight (t + 1) that cannot be used as a co-set leader”.
These discussions once again re-confirm the fact that an (n, k) linear code is capable of
1
correcting error patterns of (d 1 ) or fewer errors but is incapable of correcting all the
min
2
error patterns of weight (t + 1).
We have seen in Eq. (4.38) that each co-set is characterized by a unique syndrome or there is
a one- one correspondence between a co- set leader (a correctable error pattern) and a syndrome. These
relationships, then, can be used in preparing a decoding table that is made up of 2n-k co-set leaders and
their corresponding syndromes. This table is either stored or wired in the receiver. The following are
the steps in decoding:
Step 1: Compute the syndrome s = r.HT
Step 2: Locate the co-set leader ej whose syndrome is s. Then ej is assumed to be the error
pattern caused by the channel.
This decoding scheme is called the “Syndrome decoding” or the “Table look up decoding”.
Observe that this decoding scheme is applicable to any linear (n, k) code, i.e., it need not necessarily
be a systematic code. However, as (n-k) becomes large the implementation becomes difficult and
impractical as either a large storage or a complicated logic circuitry will be required.
For implementation of the decoding scheme, one may regard the decoding table as the truth
table of n-switching functions:
where s1, s2... sn-k are the syndrome digits and are regarded as the switching variables and e1, e2 … en
are the estimated error digits. The stages can be released by using suitable combinatorial logic circuits
as indicated in Fig 4.13.
Fig. 4.13 General Decoding scheme for an (n,k) linear block code
Example 4.9:
From the standard array for the (6, 3) linear block code of Example 4.8, the following truth table can
be constructed.
The two shaded portions of the truth table are to be observed carefully. The top shaded one
corresponds to the all-zero error pattern and the bottom one corresponds to a double error patter which
cannot be corrected by this code. From the table we can now write expressions for the correctable
single error patterns as below:
1) Notice that for all correctable single error patterns the syndrome will be identical to a
column of the H matrix and indicates that the received vector is in error corresponding to
that column position.
For Example, if the received vector is (010001), then the syndrome is (100). This is identical
withthe4th column of the H- matrix and hence the 4th – position of the received vector is in error. Hence
the corrected vector is 010101. Similarly, for a received vector (100110), the syndrome is 101 and this
is identical with the second column of the H-matrix. Thus the second position of the received vector
is in error and the corrected vector is (110110).
2) A table can be prepared relating the error locations and the syndrome. By suitable
combinatorial circuits data recovery can be achieved. For the (6, 3) systematic linear code we have
the following table for r = (r1 r2 r3 r4 r5 r6.).
Notice that for the systematic encoding considered by us (r1 r2 r3) corresponds to the data digits and
(r4 r5 r6) are the parity digits.
Hence the circuit of Fig 6.14 can be modified to have data recovery by removing only the connections
of the outputs v̂4 , v̂5 and v̂6 .
Hamming Codes:
Hamming code is the first class of linear block codes devised for error correction. The single error
correcting (SEC) Hamming codes are characterized by the following parameters.
The parity check matrix H of this code consists of all the non-zero m-tuples as its columns. In
systematic form, the columns of H are arranged as follows
H = [Q ⁝ Im]
(2m-m-1) columns which are the m-tuples of weight 2 or more. As an illustration for k=4 we have
from k = 2m – m – 1.
Thus we require 3 parity check symbols and the length of the code 23 – 1 = 7. This results in the
(7, 4) Hamming code.
The parity check matrix for the (7, 4) linear systematic Hamming code is then
G I2 m m 1 ⁝ QT
And for the (7, 4) systematic code it follows:
A non systematic Hamming code can be constructed by placing the parity check bits at 2l, l=0, 1,
2…locations. It was the conventional method of construction in switching and computer applications
(Refer, for example „Switching circuits and applications -Marcus).One simple procedure for
construction of such code is as follows:
Step 3: Transpose of the matrix obtained in step 2 gives the parity check matrix H for the code.
The code words are in the form
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Where p1, p2, p3…are the parity digits and m1, m2, m3…are the message digits. For example, let us
consider the non systematic (7, 4) Hamming code.
Step1:
1
0 01 0
0
1 1 0
Step2: H T= 0 0 1
1 0 1
0 1 1
1 1 1
10 10 10 1
Step3: H= 0 1 1 0 0 1 1
0 0 0 1 1 1 1
Notice that the parity check bits, from he above H matrix apply to positions.
Accordingly, the check bits can be represented as linear combinations of the message bits.
For the (7, 4) code under consideration we have
p1 = m1 + m2 +m4
p2 = m1 + m3 +m4
p3 = m2 + m3 + m4
Notice that the message bits are located at the positions other than 2l, l = 0, 1, 2, 3…. locations.
i.e., they are located in the positions of 3, 5, 7, 9, 11, 13, 15, 17, 18….. The k- columns of the identity
matrix Ik are distributed successively to these locations. The Q sub-matrix in the H matrix can be
identified to contain those columns which have weights more than one. The transposeof this matrix
then gives the columns to be filled, in succession, in the G- matrix. For the Example of the (7, 4) linear
code considered, the Q- sub-matrix is:
1 1 0
1 1 0 1
Q= 1 0 1 1 , and hence QT = 1 0 1
0 1 1
0 1 1 1
1 1 1
The first two columns of this matrix then are the first two columns of the G: matrix and the third
column is the Forth column of the G matrix. Table below gives the codes generated by this method.
Observe that the procedure outlined for the code construction starts from selecting the H matrix
which is unique and hence the codes are also unique. We shall consider the correctable error patterns
and the corresponding syndromes listed in the table below.
Table: Error patterns and syndromes for the (7, 4) linear non-systematic code
e1 e2 e3 e4 e5 e6 s1 s2 s3
1 0 0 0 0 0 1 0 0
0 1 0 0 0 0 0 1 0
0 0 1 0 0 0 1 1 0
0 0 0 1 0 0 0 0 1
0 0 0 0 1 0 1 0 1
0 0 0 0 0 1 0 1 1
0 0 0 0 0 0 1 1 1
If the syndrome is read from right to left i.e. if the sequence is arranged as „s3 s2 s1‟ it is interesting to
observe that the decimal equivalent of this binary sequence corresponds to the error location. Thus if
the code vector 1 0 1 1 0 1 0 is received as 1 0 1 0 0 1 0, the corresponding syndrome is „0 0 1‟, which
is exactly the same as the 4th column of the H-matrix and also the sequence 100 corresponds todecimal
4.
It can be verified that (7, 4), (15, 11), (31, 26), (63, 57) are all single error correcting
Hamming codes and are regarded quite useful.
An important property of the Hamming codes is that they satisfy the condition of Eq. (4.36) with
equality sign, assuming that t=1.This means that Hamming codes are “single error correcting binary
perfect codes”. This can also be verified from Eq. (4.35)
We may delete any „l‟columns from the parity check matrix H of the Hamming code resulting
in the reduction of the dimension of H matrix to m (2m-l-1).Using this new matrix as the parity check
matrix we obtain a “shortened” Hamming code with the following parameters.
Notice that if the deletion of the columns of the H matrix is proper, we may obtain a Hamming code
with dmin = 4.For example if we delete from the sub-matrix Q all the columns of even weight, we obtain
an m 2m-1 matrix
H Q :I m
Where Q contains (2m-1 -m) columns of odd weight. Clearly no three columns add to zero as all
columns have odd weight .However, for a column in Q , there exist three columns in Im such that four
columns add to zero .Thus the shortened Hamming codes with H as the parity check matrix has
minimum distance exactly 4. The distance – 4 shortened Hamming codes can be used for correcting all
single error patterns while simultaneously detecting all double error patterns. Notice that when single
errors occur the syndromes contain odd number of one‟s and for double errors it contains even number
of ones. Accordingly the decoding can be accomplished in the following manner.
(2) If s contains odd number of ones, single error has occurred .The single error pattern pertaining
to this syndrome is added to the received code vector for error correction.
(3) If s contains even number of one‟s an uncorrectable error pattern has been detected.
Alternatively the SEC Hamming codes may be made to detect double errors by adding an extra
parity check in its (n+1) Th position. Thus (8, 4), (6, 11) etc. codes have dmin = 4 and correct single
errors with detection of double errors.
BINARY CYCLIC CODES
INTRODUCTION
"Binary cyclic codes” form a sub class of linear block codes. Majority of important linear block
codes that are known to-date are either cyclic codes or closely related to cyclic codes. Cyclic codes are
attractive for two reasons: First, encoding and syndrome calculations can be easily implemented using
simple shift registers with feed back connections. Second, they posses well defined mathematical
structure that permits the design of higher-order error correcting codes.
The second property can be easily understood from Fig, 4.1. Instead of writing the code as a
row vector, we have represented it along a circle. The direction of traverse may be either clockwise or
counter clockwise (right shift or left shift).
For example, if we move in a counter clockwise direction then starting at „A‟ the code word is
110001100 while if we start at B it would be 011001100. Clearly, the two code words are related in
that one is obtained from the other by a cyclic shift.
is a code vector, then the code vector, read from B, in the CW direction, obtained by a one bit cyclic
right shift:
v(1) = (vn-1 , vo, v1, v2, … vn-3,vn-2,) …………………… (4.2)
is also a code vector. In this way, the n - tuples obtained by successive cyclic right shifts:
are all code vectors. This property of cyclic codes enables us to treat the elements of each code vector
as the co-efficients of a polynomial of degree (n-1).
This is the property that is extremely useful in the analysis and implementation of these codes.
Thus we write the "code polynomial' V(X) for the code in Eq (6.1) as a vector polynomial as:
V(X) = vo + v1 X + v2 X2 + v3 X3 +…+ vi-1 Xi-1 +... + vn-3 Xn-3 + vn-2 Xn-2 + vn-1 Xn-1 ….. (4.4)
Notice that the co-efficients of the polynomial are either '0' or '1' (binary codes), i.e. they belong to
GF (2) as discussed in sec 5.7.1.
. Therefore multiplication of V(X) by X maybe viewed as a cyclic shift or rotation to the right subject
to the condition Xn = 1. This condition (i) restores XV(X) to the degree (n-1) (ii) Implies that right
most bit is fed-back at the left.
V (i) (X) = vn-i + vn-i+1X + vn-i+2X2 + …vn-1X i+ …v0Xi +v1Xi+1+…vn-i-2Xn-2 +vn-i-1Xn- …… (4.7)
An (n, k) cyclic code is specified by the complete set of code polynomials of degree (n-1)
and contains a polynomial g(X), of degree (n-k) as a factor, called the "generator polynomial" of
the code. This polynomial is equivalent to the generator matrix G, of block codes. Further, it is the only
polynomial of minimum degree and is unique. Thus we have an important theorem
Theorem 4.1 "If g(X) is a polynomial of degree (n-k) and is a factor of (Xn +1) then g(X) generates
an (n, k) cyclic code in which the code polynomial V(X) for a data vector u = (u0, u1… uk-1) is
generated by
The theorem can be justified by Contradiction: - If there is another polynomial of same degree, then
add the two polynomials to get a polynomial of degree < (n, k) (use linearity property and binary
arithmetic). Not possible because minimum degree is (n-k). Hence g(X) is unique
Clearly, there are 2k code polynomials corresponding to 2k data vectors. The code vectors
corresponding to these code polynomials form a linear (n, k) code. We have then, from the theorem
n k 1
g( X ) 1 …………………… (4.10)
g X i X n k
i 1 i
is a polynomial of minimum degree, it follows that g0 = gn-k = 1 always and the remaining co-
efficients may be either' 0' of '1'. Performing the multiplication said in Eq (4.8) we have:
In this book we have described cyclic codes with right shift operation. Left shift version can
be obtained by simply re-writing the polynomials. Thus, for left shift operations, the various
polynomials take the following form
n k
= X n k gi X n k i gn k ………………… (4.13d)
i 1
As a convention, the higher-order co-efficients of a polynomial are transmitted first. This isthe
reason for the format of polynomials used in this book.
where ai‟s are either a ' 0' or a '1', the right most bit in the sequence (a0, a1, a2 ... an-1) is transmitted
first in any operation. The product of the two polynomials A(X) and B(X) yield:
This product may be realized with the circuits of Fig 4.2 (a) or (b), where A(X) is the input and the co-
efficient of B(X) are given as weighting factor connections to the mod - 2 .adders. A '0' indicates no
connection while a '1' indicates a connection. Since higher order co-efficients are first sent, the highest
order co-efficient an-1 bm-1 of the product polynomial is obtained first at the output ofFig 6.2(a).
Then the co-efficient of Xn+m-3 is obtained as the sum of {an-2bm-1 + an-1 bm-2}, the first term directly
and the second term through the shift register SR1. Lower order co-efficients are then generated
through the successive SR's and mod-2 adders. After (n + m - 2) shifts, the SR's contain
{0, 0… 0, a0, a1} and the output is (a0 b1 + a1 b0) which is the co-efficient of X. After (n + m-1) shifts,
the SR's contain (0, 0, 0,0, a0) and the out put is a0b0. The product is now complete and the contents
of the SR's become (0, 0, 0 …0, 0). Fig 4.2(b) performs the multiplication in a similar way but the
arrangement of the SR's and ordering of the co-efficients are different (reverse order!). This
modification helps to combine two multiplication operations into one as shown in Fig 4.2(c).
From the above description, it is clear that a non-systematic cyclic code may be generated using
(n-k) shift registers. Following examples illustrate the concepts described so far.
B(X) = 1 + X + X3 + X4 + X6
The circuits of Fig 4.3 (a) and (b) give the product C(X) = A(X). B(X)
Fig 4.3: Circuit to perform C(X)*(1+X2+X3+X4+X6)
Example 4.2: Consider the generation of a (7, 4) cyclic code. Here (n- k) = (7-4) = 3 and we have to
find a generator polynomial of degree 3 which is a factor of Xn + 1 = X7 + 1.
To find the factors of‟ degree 3, divide X7+1 by X3+aX2+bX+1, where 'a' and 'b' are binary
numbers, to get the remainder as abX2+ (1 +a +b) X+ (a+b+ab+1). Only condition for the remainder
to be zero is a +b=1 which means either a = 1, b = 0 or a = 0, b = 1. Thus we have two possible
polynomials of degree 3, namely
Thus selection of a 'good' generator polynomial seems to be a major problem in the design of cyclic
codes. No clear-cut procedures are available. Usually computer search procedures are followed.
Let us choose g (x) = X3+ X + 1 as the generator polynomial. The encoding circuits are shown
in Fig 4.4(a) and (b).
U (X) = 1 +X2+X3.
= 1 +X2+X3+X+X3+X4+X3+X5+X6
=> v = (1 1 1 1 1 1 1)
The multiplication operation, performed by the circuit of Fig 6.4(a), is listed in the Table below step
by step. In shift number 4, „000‟ is introduced to flush the registers. As seen from the tabulation the
product polynomial is:
V (X) = 1 +X+X2+X3+X4+X5+X6,
and hence out put code vector is v = (1 1 1 1 1 1 1), as obtained by direct multiplication. The reader
can verify the operation of the circuit in Fig 4.4(b) in the same manner. Thus the multiplication circuits
of Fig 6.4 can be used for generation of non-systematic cyclic codes.
As in the case of multipliers, the division of A (X) by B (X) can be accomplished by using shift
registers and Mod-2 adders, as shown in Fig 4.5. In a division circuit, the first co-efficient of the
quotient is (an-l (bm-1) = q1, and q1.B(X) is subtracted from A (X). This subtraction is carried out by
the feed back connections shown. This process will continue for the second and subsequent terms.
However, remember that these coefficients are binary coefficients. After (n-1) shifts, the entire
quotient will appear at the output and the remainder is stored in the shift registers.
We shall understand the operation of one divider circuit through an example. Operation of other
circuits can be understood in a similar manner.
Example 4.3:
Let A(X) = X3+X5+X6, A= (0001011), B(X) = 1 +X+X3. We want to find the quotient and
remainder after dividing A(X) by B(X). The circuit to perform this division is shown in Fig 4.7, drawn
using the format of Fig 4.5(a). The operation of the divider circuit is listed in the table:
The quotient co-efficients will be available only after the fourth shift as the first three shifts
result in entering the first 3-bits to the shift registers and in each shift out put of the last register, SR3,
is zero.
The quotient co-efficient serially presented at the out put are seen to be (1111) and hence the
quotient polynomial is Q(X) =1 + X + X2 + X3. The remainder co-efficients are (1 0 0) and the
remainder polynomial is R(X) = 1.
Since the code polynomial is a multiple of the generator polynomial we can write:
V (X) = P (X) +Xn-k U (X) = Q (X) g (X) ....................... (4.18)
X nkU ( X ) P( X )
Q( X ) ………………. (4.19)
g( X ) g( X )
Thus division of Xn-k U (X) by g (X) gives us the quotient polynomial Q (X) and the remainder
polynomial P (X). Therefore to obtain the cyclic codes in the systematic form, we determine the
remainder polynomial P (X) after dividing Xn-k U (X) by g(X). This division process can be easily
achieved by noting that "multiplication by Xn-k amounts to shifting the sequence by (n-k) bits".
Specifically in the circuit of Fig 4.5(a), if the input A(X) is applied to the Mod-2 adder after the (n-k)
th shift register the result is the division of Xn-k A (X) by B (X).
Accordingly, we have the following scheme to generate systematic cyclic codes. The
generator polynomial is written as:
The circuit of Fig 4.8 does the job of dividing Xn-kU (X) by g(X). The following steps describe the
encoding operation.
Fig 4.8 Syndrome encoding of cyclic codes using (n-k) shift register stages
Clearly, the encoder is very much simpler than the encoder of an (n, k) linear block code and the
memory requirements are reduced. The following example illustrates the procedure.
Example 4.4:
Let u = (1 0 1 1) and we want a (7, 4) cyclic code in the systematic form. The generator polynomial
chosen is g (X) = 1 + X + X3
We perform direct division Xn-kU (X) by g (X) as shown below. From direct division observe that
p0=1, p1=p2=0. Hence the code word in systematic format is:
After the Fourth shift GATE Turned OFF, switch S moved to position 2, and the parity bits
contained in the register are shifted to the output. The out put code vector is v = (100 1011) which
agrees with the direct hand calculation.
The generator polynomial g(X) and the parity check polynomial h(X) uniquely specify the
generator matrix G and the parity check matrix H respectively. We shall consider the construction of
a generator matrix for a (7, 4) code generated by the polynomial g(X) = 1 +X+X3.
We start with the generator polynomial and its three cyclic shifted versions as below:
g(X) = 1 + X + X3
X g(X) = X + X2 + X4
X2g(X) = X2 + X3 + X5
X3g(X) = X3 + X4 + X6
The co-efficients of these polynomials are used as the elements of the rows of a (47) matrix to get
the following generator matrix:
1 1 0 1 0 0 0
0 1 1 0 1 0 0
G
0 0 1 1 0 1 0
0 0 0 1 1 0 1
Clearly, the generator matrix so constructed is not in a systematic format. We can transform this into
a systematic format using Row manipulations. The manipulations are:
First row = First row; Second row = Second row; Third row = First row + Third row; and Fourth row
= First row + second row + Fourth row.
1 1 0 1 0 0 0
1 0 0
G 0 1 1 0 [ P ⁝I4 ]
1 1 1 0 0 1 0
1 0 1 0 0 0 1
Using this generator matrix, which is in systematic form the code word for u = (1 0 1 1) is
v = (1 0 0 1 0 1 1) (obtained as sum of 1st row + Third row + Fourth row of the G-matrix). The result
agrees with direct hand calculation.
To construct H-matrix directly, we start with the reciprocal of the parity check polynomial
defined by Xkh(X-1). Observe that the polynomial Xkh(X-1) is also a factor of the polynomial Xn+
1. For the polynomial (X7+1) we have three primitive factors namely, (X + 1), (X3+X+1) and
(X3+X2+1). Since we have chosen (X3+X+1) as the generator polynomial the other two factors
should give us the parity check polynomial.
h(X) = (X +1) (X3+X2+1) = X4+X2+X+1
X5h(X-1) = X5 + X4 +X3 + X
X6P(X-1) = X6 + X5 + X4 + X2
Or X4h(X-1) = X4+X3+X2+1
X5h(X-1) = X5 + X4 +X3 + X
X6h(X-1) = X6 + X5 + X4 + X2
1 0 1 1 1 0 0
H 0 1 0 1 1 1 0
0 0 1 0 1 1 1
Clearly, this matrix is in non systematic form. It is interesting to check that for the non-
systematic matrixes obtained GHT = O. We can obtain the H matrix in the systematic format
H = [I 3 ⁝P T ] , by using Row manipulations. The manipulation in this case is simply.
'First row = First row + Third row'. The result is
1 0 0 1 0 1 1
H 0 1 0 1 1 1 0
0 0 1 0 1 1 1
R(X) = r0+r1X+r2X2+…+rn-1Xn-l
Let A(X) be the quotient and S(X) be the remainder polynomials resulting from the division
of R(X) by g(X) i.e.
R( X ) S( X ) ……………….. (4.21)
A( X )
g( X ) g( X )
The remainder S(X) is a polynomial of degree (n-k-1) or less. It is called the "Syndrome polynomial".
If E(X) is the polynomial representing the error pattern caused by the channel, then we have:
R(X) =V(X) + E(X) ……………….. (4.22)
That is, the syndrome of R(X) is equal to the remainder resulting from dividing the error pattern by the
generator polynomial; and the syndrome contains information about the error pattern, which can be
used for error correction. Fig 4.5. A “Syndrome calculator” is shown in Fig 4.10.
1 The register is first initialized. With GATE 2 -ON and GATE1- OFF, the received vector is
entered into the register
2 After the entire received vector is shifted into the register, the contents of the register will be the
syndrome, which can be shifted out of the register by turning GATE-1 ON and GATE-2OFF.
The circuit is ready for processing next received vector.
Cyclic codes are extremely well suited for 'error detection' .They can be designed to detect
many combinations of likely errors and implementation of error-detecting and error correcting circuits
is practical and simple. Error detection can be achieved by employing (or adding) an additional R-S
flip-flop to the syndrome calculator. If the syndrome is nonzero, the flip-flop sets and provides an
indication of error. Because of the ease of implementation, virtually all error detecting codes are
invariably 'cyclic codes'. If we are interested in error correction, then the decoder must be capable of
determining the error pattern E(X) from the syndrome S(X) and add it to R(X) to
determine the transmitted V(X). The following scheme shown in Fig 6.11 may be employed for the
purpose. The error correction procedure consists of the following steps:
Step1. Received data is shifted into the buffer register and syndrome registers with switches
SIN closed and SOUT open and error correction is performed with SIN open and SOUT
closed.
Step2. After the syndrome for the received code word is calculated and placed in thesyndrome
register, the contents are read into the error detector. The detector is a combinatorial
circuit designed to output a „1‟ if and only if the syndrome corresponds to a correctable
error pattern with an error at the highest order position Xn-l. That is, if the detector output
is a '1' then the received digit at the right most stage of the buffer register is assumed to
be in error and will be corrected. If the detector output is '0' thenthe received digit at the
right most stage of the buffer is assumed to be correct. Thus the detector output is the
estimate error value for the digit coming out of the buffer register.
Step3. In the third step, the first received digit in the syndrome register is shifted right once. If
the first received digit is in error, the detector output will be '1' which is used for error
correction. The output of the detector is also fed to the syndrome register to modify the
syndrome. This results in a new syndrome corresponding to the „altered
„received code word shifted to the right by one place.
Step4. The new syndrome is now used to check and correct the second received digit, which
is now at the right most position, is an erroneous digit. If so, it is corrected, a new
syndrome is calculated as in step-3 and the procedure is repeated.
Step5. The decoder operates on the received data digit by digit until the entire
received code word is shifted out of the buffer.
At the end of the decoding operation, that is, after the received code word is shifted out of the
buffer, all those errors corresponding to correctable error patterns will have been corrected, and the
syndrome register will contain all zeros. If the syndrome register does not contain all zeros, thismeans
that an un-correctable error pattern has been detected. The decoding schemes described in Fig
6.10 and Fig6.11 can be used for any cyclic code. However, the practicality depends on the complexity
of the combinational logic circuits of the error detector. In fact, there are special classesof cyclic
codes for which the decoder can be realized by simpler circuits. However, the price paid for such
simplicity is in the reduction of code efficiency for a given block size.
A decoder of the form described above operates on the received data bit by bit; and each bit is
tested in turn for error and is corrected whenever an error is located. Such a decoder is called a“Meggitt
decoder”.
For illustration let us consider a decoder for a (7, 4) cyclic code generated by
g(X) = 1 + X + X 3
The circuit implementation of the Meggitt decoder is shown on Fig 6.12. The entire received
vector R(X) is entered in to the SR‟s bit by bit and at the same time it is stored in the buffer memory.
The division process will start after the third shift and after the seventh shift the syndrome will be stored
in the SR‟s. If S(X) = (000) then E(X) = 0 and R(X) is read out of the buffer. Since S(X) can be found
from E(X) with nonzero coefficients, suppose E(X) = (000 0001). Then the SR contents are given as:
(001, 110, 011, 111, 101) showing that S(X) = (101) after the seventh shift. At the eighth shift, the SR
content is (100) and this may be used through a coincidence circuit to correct the error bit coming out
of the buffer at the eighth shift. On the other hand if the error polynomial wereE(X) = (000 1000)
then the SR content will be (100) at he eleventh shift and the error will be corrected when the buffer
delivers the error bit at the eleventh shift. The SR contents for different shifts, for two other error
patterns are as shown in the table below:
SR contents for the error patterns (1001010) and (1001111)
Shift Input SR-content for Input SR- content for
Number (1001010) (1001111)
1 0 000 1 100
2 1 100 1 110
3 0 010 1 111
4 1 101 1 001
5 0 100 0 110
6 0 010 0 011
7 1 101 1 011 *Indicates an error
8 0 100 0 111
9 - - 0 101
10 - - 0 100
Fig 4.12 Meggitt decoder for (7,4) cyclic code
For R(X) = (1001010), the SR content is (100) at the 8-th shift and the bit in X6 position of
R(X) is corrected giving correct V(X) = (1001011). On the other hand , if R(X) = (1001111), then it
is seen from the table that at the 10-th shift the syndrome content will detect the error and correct the
X4 bit of R(X) giving V(X) = (1001011).
The decoder for the (15, 11) cyclic code, using g(X) = 1 + X + X 4, is shown in Fig 6.13. It is
easy to check that the SR content at the 16-th shift is (1000) for E(X) =X 14. Hence a coincidence
circuit gives the correction signal to the buffer out put as explained earlier.
Although the Meggitt decoders are intended for Single error correcting cyclic codes, they may
be generalized for multiple error correcting codes as well, for example (15, 7) BCH code.
An error trapping decoder is a modification of a Meggitt decoder that is used for certain cyclic codes.
The syndrome polynomial is computed as: S(X) = Remainder of [E(X) / g(X)]. If the error
E(X) is confined to the (n-k) parity check positions (1, X, X2… Xn-k-1) of R(X), then E(X) = S(X),
since the degree of E(X) is less than that of g(X). Thus error correction can be carried out by simply
adding S(X) to R(X). Even if E(X) is not confined to the (n-k) parity check positions of R(X) but has
nonzero values clustered together such that the length of the nonzero values is less than the syndrome
length, then also the syndrome will exhibit an exact replica of the error pattern after some cyclic shifts
of E(X). For each error pattern, the syndrome content S(X) (after the required shifts) is subtracted from
the appropriately shifted R(X), and the corrected V(X) recovered.
“If the syndrome of R(X) is taken to be the remainder after dividing Xn-k R(X) by g(X),
and all errors lie in the highest-order (n-k) symbols of R(X), then the nonzero portion of the error
pattern appears in the corresponding positions of the syndrome”. Fig 4.14 shows an error trapping
decoder for a (15, 7) BCH code based on the principles described above. A total of 45 shifts
are required to correct the double error, 15 shifts to generate the syndrome, 15 shifts to correct the
first error and 15 shifts to correct the second error.
Illustration:
U(X) = X6 + 1; g(X) = X8 + X7 + X6 + X4 + 1
E(X) = X11 + X
r = (110010011011111)
Shift Syndrome Shift Middle Shift Bottom
Number Generator Number Register Number Register
Register
1 10001011 16 01100011 31 00000100
2 01000101 17 10111010 32 00000010
3 00100010 18 01011101 33 00000001
4 10011010 19 10100101 34 00000000
5 11000110 20 11011001 35 ;
6 01100011 21 11100111 36 :
7 00110001 22 11111000 37 :
8 00011000 23 01111100 38 All zeros
9 00001100 24 00111110 39 :
10 00000110 25 00011111 40 :
11 10001000 26 10000100 41 :
12 01000100 27 01000010 42 :
13 00100010 28 00100001 43 :
14 10011010 29 00010000 44 :
15 11000110 30 00001000 45 :
Errors trapped at shift numbers 28 and 33.
Some times when error trapping cannot be used for a given code, the test patterns can be
modified to include the few troublesome error patterns along with the general test. Such a modified
error trapping decoder is possible for the (23, 12) Golay code in which the error pattern E(X) will be
of length 23 and weight of 3 or less (t 3). The length of the syndrome register is 11 and if E(X) has
a length greater than 11the error pattern is not trapped by cyclically shifting S(X). In this case, it is
shown that one of the three error bits must have at least five zeros on one side of it and at least six zeros
the other side. Hence all error patterns can be cyclically shifted into one of the following three
configurations (numbering the bit positions, e0, e1, e2 … e22):
(ii) One error occurs in position e5 and the other two errors occur in the 11
high-order bits.
(iii) One error occurs in position e6 and the remaining two errors occur in the
11 high-order bits.
In the decoder shown in Fig 4.15, the received code vector R(X) is fed at the rightmost stage of
the syndrome generator (as was done in Fig 6.14), equivalent to multiplying R(X) by X11. Then the
syndrome corresponding to e5 and e6 are obtained (using g1(X) as the generator polynomial) as:
The syndrome vectors for the errors e5 and e6 will be (01100110110) or (00110011011)
respectively. Two more errors occurring in the 11 high-order bit positions will cause two 1‟s in the
appropriate positions of the syndrome vectors, thereby complementing the vector for e5 or e6. Based
on the above relations, the decoder operates as follows:
(i).The entire received vector is shifted into the syndrome generator (with switch G1 closed)
and the syndrome S(X) corresponding to X 11 R(X) is formed.
(ii).If all the three or less errors are confined to X 12, X 13 … X22 of R(X), then the syndrome
matches the errors in these positions. The weight of the syndrome is now 3 or less. This is
checked by a threshold gate and the gate output T0 switches G2 ON and G1 OFF. R(X) is now
received from the buffer and corrected by the syndrome bits (as they are clocked bit by bit)
through the modulo-2 adder circuit.
(iii).If the test in (ii) fails then it is assumed that one error is either at e5 or at e6, and the other
two errors are in the 11 high-order bits of R(X). Then if the weight of S(X) is more than 3 (in
test (ii)), then the weights of [S(X) + S (e5)] and [S(X) + S (e6)] are tested. The decisions are:
1. If weight of [S(X) + S (e5)] 2 then the decision (T1 = 1) is that one error
is at position e5 and two errors are at positions where [S(X) + S (e5)] are nonzero.
2. If weight of [S(X) + S (e6)] 2 then the decision (T2 = 1) is that one error
is at position e6 and two errors are at positions where [S(X) + S (e6)] are nonzero. The
above tests are arranged through combinatorial switching circuits and the appropriate
corrections in R(X) are made as R(X) is read from the buffer.
(iv). If the above tests fail then with G1 and G3 ON and G2 OFF, the syndrome and buffer
contents are shifted by one bit. Tests (ii) and (iii) are now repeated. Bit by bit shifting of S(X)
and R(X) is continued till the errors are located, and then corrected. A maximum of 23 shifts
will be required to complete the process. After correction of R(X), the corrected V(X) is further
processed through a divider circuit to obtain the message U(X) = V(X) / g(X).
Assuming that upon shifting the block of 23 bits with t 3 cyclically, „at most one error will
lie outside the 11 high-order bits of R(X)‟ at some shift, an alternative decoding procedure can be
devised for a Golay coder – The systematic search decoder. Here the test (ii) is first carried out. If the
test fails, then first bit of R(X) is inverted and a check is made to find if the weight of S(X) 2. If this
test is successful, then the nonzero positions of S(X) give the two error locations (similar to test
(iii) above) and the other error is at first position. If this test fails, then the syndrome content is
cyclically shifted, each time testing for weight of S(X) 3; and if not, invert 2nd, 3rd ……and 12th bit
of R(X) successively and test for weight of S(X) 2. Since all errors are not in the parity check section,
an error must be detected in one of the shifts. Once one error is located and corrected, the other two
errors are easily located and corrected by test (ii). Some times the systematic searchdecoder is simpler
in hardware than the error trapping decoder, but the latter is faster in operation.The systematic search
decoder can be generalized for decoding other multiple-error-correcting cyclic codes. It is to be
observed that the Golay (23, 12) code cannot be decoded by majority-logic decoders.