In
coding theory
Coding theory is the study of the properties of codes and their respective fitness for specific applications. Codes are used for data compression, cryptography, error detection and correction, data transmission and data storage. Codes are stud ...
, a cyclic code is a
block code, where the
circular shift
In combinatorial mathematics, a circular shift is the operation of rearranging the entries in a tuple, either by moving the final entry to the first position, while shifting all other entries to the next position, or by performing the inverse op ...
s of each codeword gives another word that belongs to the code. They are
error-correcting codes that have algebraic properties that are convenient for efficient
error detection and correction
In information theory and coding theory with applications in computer science and telecommunication, error detection and correction (EDAC) or error control are techniques that enable reliable delivery of digital data over unreliable comm ...
.
Definition
Let
be a
linear code In coding theory, a linear code is an error-correcting code for which any linear combination of codewords is also a codeword. Linear codes are traditionally partitioned into block codes and convolutional codes, although turbo codes can be seen a ...
over a
finite field
In mathematics, a finite field or Galois field (so-named in honor of Évariste Galois) is a field that contains a finite number of elements. As with any field, a finite field is a set on which the operations of multiplication, addition, subt ...
(also called '' Galois field'')
of
block length
In coding theory, block codes are a large and important family of error-correcting codes that encode data in blocks.
There is a vast number of examples for block codes, many of which have a wide range of practical applications. The abstract defin ...
.
is called a cyclic code if, for every
codeword from
, the word
in
obtained by a
cyclic right shift of components is again a codeword. Because one cyclic right shift is equal to
cyclic left shifts, a cyclic code may also be defined via cyclic left shifts. Therefore the linear code
is cyclic precisely when it is invariant under all cyclic shifts.
Cyclic codes have some additional structural constraint on the codes. They are based on
Galois fields
In mathematics, a finite field or Galois field (so-named in honor of Évariste Galois) is a field that contains a finite number of elements. As with any field, a finite field is a set on which the operations of multiplication, addition, subtra ...
and because of their structural properties they are very useful for error controls. Their structure is strongly related to Galois fields because of which the encoding and decoding algorithms for cyclic codes are computationally efficient.
Algebraic structure
Cyclic codes can be linked to ideals in certain rings. Let
be a
polynomial ring
In mathematics, especially in the field of algebra, a polynomial ring or polynomial algebra is a ring (which is also a commutative algebra) formed from the set of polynomials in one or more indeterminates (traditionally also called variable ...
over the finite field
. Identify the elements of the cyclic code
with polynomials in
such that
maps to the polynomial
: thus multiplication by
corresponds to a cyclic shift. Then
is an
ideal in
, and hence
principal, since
is a
principal ideal ring. The ideal is generated by the unique monic element in
of minimum degree, the ''generator polynomial''
.
This must be a divisor of
. It follows that every cyclic code is a
polynomial code.
If the generator polynomial
has degree
then the rank of the code
is
.
The idempotent of
is a codeword
such that
(that is,
is an
idempotent element of
) and
is an identity for the code, that is
for every codeword
. If
and
are
coprime
In mathematics, two integers and are coprime, relatively prime or mutually prime if the only positive integer that is a divisor of both of them is 1. Consequently, any prime number that divides does not divide , and vice versa. This is equival ...
such a word always exists and is unique; it is a generator of the code.
An irreducible code is a cyclic code in which the code, as an ideal is irreducible, i.e. is minimal in
, so that its check polynomial is an
irreducible polynomial
In mathematics, an irreducible polynomial is, roughly speaking, a polynomial that cannot be factored into the product of two non-constant polynomials. The property of irreducibility depends on the nature of the coefficients that are accepted f ...
.
Examples
For example, if
and
, the set of codewords contained in cyclic code generated by
is precisely
:
.
It corresponds to the ideal in
generated by
.
The polynomial
is irreducible in the polynomial ring, and hence the code is an irreducible code.
The idempotent of this code is the polynomial
, corresponding to the codeword
.
Trivial examples
Trivial examples of cyclic codes are
itself and the code containing only the zero codeword. These correspond to generators
and
respectively: these two polynomials must always be factors of
.
Over
the
parity bit
A parity bit, or check bit, is a bit added to a string of binary code. Parity bits are a simple form of error detecting code. Parity bits are generally applied to the smallest units of a communication protocol, typically 8-bit octets (bytes) ...
code, consisting of all words of even weight, corresponds to generator
. Again over
this must always be a factor of
.
Quasi-cyclic codes and shortened codes
Before delving into the details of cyclic codes first we will discuss quasi-cyclic and shortened codes which are closely related to the cyclic codes and they all can be converted into each other.
Definition
Quasi-cyclic codes:
An
''quasi-cyclic code'' is a linear block code such that, for some
which is coprime to
, the polynomial
is a ''codeword polynomial'' whenever
is a codeword polynomial.
Here, ''codeword polynomial'' is an element of a linear code whose
code word
In communication, a code word is an element of a standardized code or Communications protocol, protocol. Each code word is assembled in accordance with the specific rules of the code and assigned a unique meaning. Code words are typically used for ...
s are polynomials that are divisible by a polynomial of shorter length called the ''generator polynomial''. Every codeword polynomial can be expressed in the form
, where
is the generator polynomial. Any codeword
of a cyclic code
can be associated with a codeword polynomial, namely,
. A quasi-cyclic code with
equal to
is a cyclic code.
Definition
Shortened codes:
An
Cyclic codes for correcting errors
Now, we will begin the discussion of cyclic codes explicitly with
error detection and correction
In information theory and coding theory with applications in computer science and telecommunication, error detection and correction (EDAC) or error control are techniques that enable reliable delivery of digital data over unreliable comm ...
. Cyclic codes can be used to correct errors, like
Hamming code
In computer science and telecommunication, Hamming codes are a family of linear error-correcting codes. Hamming codes can detect one-bit and two-bit errors, or correct one-bit errors without detection of uncorrected errors. By contrast, the s ...
s as cyclic codes can be used for correcting single error. Likewise, they are also used to correct double errors and burst errors. All types of error corrections are covered briefly in the further subsections.
The (7,4) Hamming code has a
generator polynomial In coding theory, a polynomial code is a type of linear code whose set of valid code words consists of those polynomials (usually of some fixed length) that are divisible by a given fixed polynomial (of shorter length, called the ''generator polyn ...
g(x) = x^3 + x +1. This polynomial has a zero in
Galois extension field GF(8) at the primitive element
\alpha, and all codewords satisfy
\mathcal(\alpha)=0. Cyclic codes can also be used to correct double errors over the field
GF(2). Blocklength will be
n equal to
2^m -1 and primitive elements
\alpha and
\alpha^3 as zeros in the
GF(2^m) because we are considering the case of two errors here, so each will represent one error.
The received word is a polynomial of degree
n - 1 given as
v(x) = a(x)g(x) + e(x)
where
e(x) can have at most two nonzero coefficients corresponding to 2 errors.
We define the Syndrome Polynomial,
S(x) as the remainder of polynomial
v(x) when divided by the generator polynomial
g(x) i.e.
S(x) \equiv v(x) \equiv (a(x)g(x) + e(x)) \equiv e(x) \mod g(x) as
(a(x)g(x))\equiv 0\mod g(x).
For correcting two errors
Let the field elements
X_1 and
X_2 be the two error location numbers. If only one error occurs then
X_2 is equal to zero and if none occurs both are zero.
Let
S_1 = (\alpha) and
S_3 = (\alpha^3).
These field elements are called "syndromes". Now because
g(x) is zero at primitive elements
\alpha and
\alpha^3, so we can write
S_1 = e(\alpha) and
S_3 = e(\alpha^3). If say two errors occur, then
S_1 = \alpha^ + \alpha^ and
S_3 = \alpha^ + \alpha^.
And these two can be considered as two pair of equations in
GF(2^m) with two unknowns and hence we can write
S_1 = X_1 + X_2 and
S_3 = (X_1)^3 + (X_2)^3.
Hence if the two pair of nonlinear equations can be solved cyclic codes can used to correct two errors.
Hamming code
The
Hamming(7,4) code may be written as a cyclic code over GF(2) with generator
1+x+x^3. In fact, any binary
Hamming code
In computer science and telecommunication, Hamming codes are a family of linear error-correcting codes. Hamming codes can detect one-bit and two-bit errors, or correct one-bit errors without detection of uncorrected errors. By contrast, the s ...
of the form Ham(r, 2) is equivalent to a cyclic code, and any Hamming code of the form Ham(r,q) with r and q-1 relatively prime is also equivalent to a cyclic code. Given a Hamming code of the form Ham(r,2) with
r \ge 3, the set of even codewords forms a cyclic
^-1,2^-r-2,4/math>-code.
Hamming code for correcting single errors
A code whose minimum distance is at least 3, have a check matrix all of whose columns are distinct and non zero. If a check matrix for a binary code has
m rows, then each column is an
m-bit binary number. There are
2^m-1 possible columns. Therefore if a check matrix of a binary code with
d_ at least 3 has
m rows, then it can only have
2^m-1 columns, not more than that. This defines a
(2^m-1, 2^m-1-m) code, called Hamming code.
It is easy to define Hamming codes for large alphabets of size
q. We need to define one
H matrix with linearly independent columns. For any word of size
q there will be columns who are multiples of each other. So, to get linear independence all non zero
m-tuples with one as a top most non zero element will be chosen as columns. Then two columns will never be linearly dependent because three columns could be linearly dependent with the minimum distance of the code as 3.
So, there are
(q^m-1)/(q-1) nonzero columns with one as top most non zero element. Therefore, a Hamming code is a
q^m-1)/(q-1), (q^m-1)/(q-1)-m/math> code.
Now, for cyclic codes, Let \alpha be primitive element in GF(q^m), and let \beta = \alpha^. Then \beta^ = 1 and thus \beta is a zero of the polynomial x^ - 1 and is a generator polynomial for the cyclic code of block length n = (q^m-1)/(q-1).
But for q = 2, \alpha = \beta. And the received word is a polynomial of degree n - 1 given as
v(x) = a(x)g(x) + e(x)
where, e(x) = 0 or x^i where i represents the error locations.
But we can also use \alpha^i as an element of GF(2^m) to index error location. Because g(\alpha) = 0, we have v(\alpha) = \alpha^i and all powers of \alpha from 0 to 2^m-2 are distinct. Therefore we can easily determine error location i from \alpha^i unless v(\alpha) = 0 which represents no error. So, a Hamming code is a single error correcting code over GF(2) with n = 2^m-1 and k = n - m.
Cyclic codes for correcting burst errors
From
Hamming distance
In information theory, the Hamming distance between two strings of equal length is the number of positions at which the corresponding symbols are different. In other words, it measures the minimum number of ''substitutions'' required to chang ...
concept, a code with minimum distance
2t + 1 can correct any
t errors. But in many channels error pattern is not very arbitrary, it occurs within very short segment of the message. Such kind of errors are called
burst errors. So, for correcting such errors we will get a more efficient code of higher rate because of the less constraints. Cyclic codes are used for correcting burst error. In fact, cyclic codes can also correct cyclic burst errors along with burst errors. Cyclic burst errors are defined as
A cyclic burst of length
t is a vector whose nonzero components are among
t (cyclically) consecutive components, the first and the last of which are nonzero.
In polynomial form cyclic burst of length
t can be described as
e(x)=x^ib(x)\mod (x^n -1) with
b(x) as a polynomial of degree
t - 1 with nonzero coefficient
b_0. Here
b(x) defines the pattern and
x^i defines the starting point of error. Length of the pattern is given by deg
b(x) + 1. The syndrome polynomial is unique for each pattern and is given by
s(x) = e(x)\mod g(x)
A linear block code that corrects all burst errors of length
t or less must have at least
2t check symbols. Proof: Because any linear code that can correct burst pattern of length
t or less cannot have a burst of length
2t or less as a codeword because if it did then a burst of length
t could change the codeword to burst pattern of length
t, which also could be obtained by making a burst error of length
t in all zero codeword. Now, any two vectors that are non zero in the first
2t components must be from different co-sets of an array to avoid their difference being a codeword of bursts of length
2t. Therefore number of such co-sets are equal to number of such vectors which are
q^. Hence at least
q^ co-sets and hence at least
2t check symbol.
This property is also known as Rieger bound and it is similar to the
Singleton bound for random error correcting.
Fire codes as cyclic bounds
In 1959, Philip Fire presented a construction of cyclic codes generated by a product of a binomial and a primitive polynomial. The binomial has the form
x^c+1 for some positive odd integer
c. ''Fire code'' is a cyclic burst error correcting code over
GF(q) with the generator polynomial
g(x)=(x^-1)p(x)
where
p(x) is a prime polynomial with degree
m not smaller than
t and
p(x) does not divide
x^-1. Block length of the fire code is the smallest integer
n such that
g(x) divides
x^n-1.
A fire code can correct all burst errors of length t or less if no two bursts
b(x) and
x^jb'(x) appear in the same co-set. This can be proved by contradiction. Suppose there are two distinct nonzero bursts
b(x) and
x^jb'(x) of length
t or less and are in the same co-set of the code. So, their difference is a codeword. As the difference is a multiple of
g(x) it is also a multiple of
x^-1. Therefore,
b(x) = x^jb'(x) \mod (x^-1).
This shows that
j is a multiple of
2t - 1, So
b(x) = x^b'(x)
for some
l. Now, as
l(2t-1) is less than
t and
l is less than
q^m - 1 so
(x^ - 1)b(x) is a codeword. Therefore,
(x^ - 1)b(x) = a(x)(x^- 1)p(x).
Since
b(x) degree is less than degree of
p(x),
p(x) cannot divide
b(x). If
l is not zero, then
p(x) also cannot divide
x^ - 1 as
l is less than
q^m-1 and by definition of
m,
p(x) divides
x^ - 1 for no
l smaller than
q^m-1. Therefore
l and
j equals to zero. That means both that both the bursts are same, contrary to assumption.
Fire codes are the best single burst correcting codes with high rate and they are constructed analytically. They are of very high rate and when
m and
t are equal, redundancy is least and is equal to
3t - 1. By using multiple fire codes longer burst errors can also be corrected.
For error detection cyclic codes are widely used and are called
t - 1 cyclic redundancy codes.
Cyclic codes on Fourier transform
Applications of
Fourier transform
A Fourier transform (FT) is a mathematical transform that decomposes functions into frequency components, which are represented by the output of the transform as a function of frequency. Most commonly functions of time or space are transformed, ...
are widespread in signal processing. But their applications are not limited to the complex fields only; Fourier transforms also exist in the Galois field
GF(q). Cyclic codes using Fourier transform can be described in a setting closer to the signal processing.
Fourier transform over finite fields
Fourier transform over finite fields
The discrete Fourier transform of vector
v = v_0, v_1, ...., v_ is given by a vector
V = V_0, V_1,....., V_ where,
V_k =
\Sigma_^ e^v_i where,
k = 0,....., n-1
where exp(
-j2\pi /n) is an
nth root of unity. Similarly in the finite field
nth root of unity is element
\omega of order
n. Therefore
''If
v = (v_0, v_1, ...., v_) is a vector over
GF(q), and
\omega be an element of
GF(q) of order
n, then Fourier transform of the vector
v is the vector
V = (V_0, V_1,....., V_) and components are given by''
V_j =
\Sigma_^\omega^ v_i where,
k = 0,....., n-1
Here
i is ''time'' index,
j is ''frequency'' and
V is the ''spectrum''. One important difference between Fourier transform in complex field and Galois field is that complex field
\omega exists for every value of
n while in Galois field
\omega exists only if
n divides
q - 1. In case of extension fields, there will be a Fourier transform in the extension field
GF(q^m) if
n divides
q^m - 1 for some
m.
In Galois field time domain vector
v is over the field
GF(q) but the spectrum
V may be over the extension field
GF(q^m).
Spectral description of cyclic codes
Any codeword of cyclic code of blocklength
n can be represented by a polynomial
c(x) of degree at most
n - 1. Its encoder can be written as
c(x) = a(x)g(x). Therefore in frequency domain encoder can be written as
C_j = A_jG_j. Here ''codeword spectrum''
C_j has a value in
GF(q^m) but all the components in the time domain are from
GF(q). As the data spectrum
A_j is arbitrary, the role of
G_j is to specify those
j where
C_j will be zero.
Thus, cyclic codes can also be defined as
''Given a set of spectral indices,''
A = (j_1,...., j_), '' whose elements are called check frequencies, the cyclic code''
C ''is the set of words over''
GF(q) ''whose spectrum is zero in the components indexed by''
j_1,..., j_. ''Any such spectrum''
C ''will have components of the form''
A_jG_j.
So, cyclic codes are vectors in the field
GF(q) and the spectrum given by its inverse fourier transform is over the field
GF(q^m) and are constrained to be zero at certain components. But every spectrum in the field
GF(q^m) and zero at certain components may not have inverse transforms with components in the field
GF(q). Such spectrum can not be used as cyclic codes.
Following are the few bounds on the spectrum of cyclic codes.
BCH bound
If
n be a factor of
(q^m - 1) for some
m. The only vector in
GF(q)^n of weight
d - 1 or less that has
d - 1 consecutive components of its spectrum equal to zero is all-zero vector.
Hartmann-Tzeng bound
If
n be a factor of
(q^m - 1) for some
m, and
b an integer that is coprime with
n. The only vector
v in
GF(q)^n of weight
d - 1 or less whose spectral
components
V_j equal zero for
j = \ell_1 + \ell_2b (\mod n), where
\ell_1 = 0,...., d - s - 1 and
\ell_2 = 0,...., s - 1, is the all zero vector.
Roos bound
If
n be a factor of
q^m - 1 for some
m and
GCD(n,b) = 1. The only vector in
GF(q)^n of weight
d - 1 or less whose spectral components
V_j equal to zero for
j = l_1 + l_2b (\mod n), where
l_1 = 0,..., d - s - 2 and
l_2 takes at least
s + 1 values in the range
0,...., d - 2, is the all-zero vector.
Quadratic residue codes
When the prime
l is a quadratic residue modulo the prime
p there is a
quadratic residue code which is a cyclic code of length
p, dimension
(p+1)/2 and minimum weight at least
\sqrt over
GF(l).
Generalizations
A constacyclic code is a linear code with the property that for some constant λ if (''c''
1,c
2,...,''c''
''n'') is a codeword then so is (λ''c''
''n'',c
1,...,''c''
''n''-1). A negacyclic code is a constacyclic code with λ=-1. A quasi-cyclic code has the property that for some ''s'', any cyclic shift of a codeword by ''s'' places is again a codeword.
A double circulant code is a quasi-cyclic code of even length with ''s''=2.
[ Quasi-twisted codes and multi-twisted codes are further generalizations of constacyclic codes.]
See also
* Cyclic redundancy check
* BCH code
* Reed–Muller code
* Binary Golay code
In mathematics and electronics engineering, a binary Golay code is a type of linear error-correcting code used in digital communications. The binary Golay code, along with the ternary Golay code, has a particularly deep and interesting connectio ...
* Ternary Golay code
* Eugene Prange
Notes
References
*
*
*
*
Further reading
* Ranjan Bose Ranjan is a name. 'Ran' means Battle and 'jan' means public, in olden days this name was given to generous kings who fight battles for the rights of people.
Ranjan may also refer to:
*Ranjan (actor) (1918–1983) (real name Ramanarayana Venkataram ...
'', Information theory, coding and cryptography'',
* Irving S. Reed
Irving Stoy Reed (November 12, 1923 – September 11, 2012) was an American mathematician and engineer. He is best known for co-inventing a class of algebraic error-correcting and error-detecting codes known as Reed–Solomon codes in collabora ...
and Xuemin Chen, ''Error-Control Coding for Data Networks'', Boston: Kluwer Academic Publishers, 1999, .
* Scott A. Vanstone, Paul C. Van Oorschot
Paul may refer to:
*Paul (given name), a given name (includes a list of people with that name)
* Paul (surname), a list of people
People
Christianity
* Paul the Apostle (AD c.5–c.64/65), also known as Saul of Tarsus or Saint Paul, early Chr ...
, ''An introduction to error correcting codes with applications'',
External links
* John Gill's (Stanford) class notes &ndash
Notes #3, October 8, Handout #9
EE 387.
* Jonathan Hall's (MSU) class notes &ndash
Chapter 8. Cyclic codes
- pp. 100 - 123
*
{{PlanetMath attribution, id=6978, title=cyclic code
Coding theory
Finite fields