Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 The block code and its parameters  



1.1  The alphabet Σ  





1.2  The message length k





1.3  The block length n





1.4  The rate R





1.5  The distance d





1.6  Popular notation  







2 Examples  





3 Error detection and correction properties  





4 Lower and upper bounds of block codes  



4.1  Family of codes  





4.2  Hamming bound  





4.3  Singleton bound  





4.4  Plotkin bound  





4.5  GilbertVarshamov bound  





4.6  Johnson bound  





4.7  EliasBassalygo bound  







5 Sphere packings and lattices  





6 See also  





7 References  





8 External links  














Block code: Difference between revisions






Català
Čeština
Deutsch
Español

Italiano
Қазақша
Nederlands

Русский
Українська
Tiếng Vit

 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 





Help
 

From Wikipedia, the free encyclopedia
 


Browse history interactively
 Previous edit
Content deleted Content added
m Reverting possible vandalism by Ramshyam1111 to version by Meatsgains. False positive? Report it. Thanks, ClueBot NG. (1300198) (Bot)
Add polar code to list of examples.
 
(115 intermediate revisions by 78 users not shown)
Line 1: Line 1:

{{Short description|Family of error-correcting codes that encode data in blocks}}

{{Cleanup|reason=Formulas with little or no explanation, symbols not defined, content fork issues with more specific articles. Material given in outline rather than prose style.|date=May 2010}}

In [[coding theory]], '''block codes''' refers to the large and important family of [[Channel coding|error-correcting codes]] that encode data in blocks.

In [[coding theory]], '''block codes''' are a large and important family of [[Channel coding|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 main reason why the concept of block codes is so useful is that it allows coding theorists, [[mathematics|mathematicians]], and [[computer science|computer scientists]] to study the limitations of ''all'' block codes in a unified way.

There is a vast number of examples for block codes, many of which have a wide range of practical applications. The abstract definition of block codes is conceptually useful because it allows coding theorists, [[mathematician]]s, and [[computer science|computer scientists]] to study the limitations of ''all'' block codes in a unified way.

Such limitations often take the form of ''bounds'' that relate different parameters of the block code to each other, such as its rate and its ability to detect and correct errors.

Such limitations often take the form of ''bounds'' that relate different parameters of the block code to each other, such as its rate and its ability to detect and correct errors.



Examples of block codes are [[Reed–Solomon code]]s, [[Hamming code]]s, [[Hadamard code]]s, [[Expander code]]s, [[Golay code]]s, and [[Reed–Muller code]]s. These examples also belong to the class of [[linear code]]s, and hence they are called '''linear block codes'''.

Examples of block codes are [[Reed–Solomon code]]s, [[Hamming code]]s, [[Hadamard code]]s, [[Expander code]]s, [[Golay code (disambiguation)|Golay code]]s, [[Reed–Muller code]]s and [[Polar code (coding theory)|Polar code]]s. These examples also belong to the class of [[linear code]]s, and hence they are called '''linear block codes'''. More particularly, these codes are known as algebraic block codes, or cyclic block codes, because they can be generated using boolean polynomials.


Algebraic block codes are typically [[Soft-decision decoder|hard-decoded]] using algebraic decoders.{{Technical statement|date=May 2015}}


The term ''block code'' may also refer to any error-correcting code that acts on a block of <math>k</math> bits of input data to produce <math>n</math> bits of output data <math>(n,k)</math>. Consequently, the block coder is a ''memoryless'' device. Under this definition codes such as [[turbo code]]s, terminated convolutional codes and other iteratively decodable codes (turbo-like codes) would also be considered block codes. A non-terminated convolutional encoder would be an example of a non-block (unframed) code, which has ''memory'' and is instead classified as a ''tree code''.


This article deals with "algebraic block codes".



== The block code and its parameters ==

== The block code and its parameters ==

Line 17: Line 23:


=== The alphabet Σ ===

=== The alphabet Σ ===

The data stream that has to be encoded is modeled as a [[string (computer science)|string]] over some '''alphabet''' <math>\Sigma</math>. The size <math>|\Sigma|</math> of the alphabet is often written as <math>q</math>. If <math>q=2</math>, then the block code is called a ''binary'' block code. In many applications it is useful to consider <math>q</math> to be a [[prime power]], and to identify <math>\Sigma</math> with the [[finite field]] <math>\mathbb F_q</math>.

The data stream to be encoded is modeled as a [[string (computer science)|string]] over some '''alphabet''' <math>\Sigma</math>. The size <math>|\Sigma|</math> of the alphabet is often written as <math>q</math>. If <math>q=2</math>, then the block code is called a ''binary'' block code. In many applications it is useful to consider <math>q</math> to be a [[prime power]], and to identify <math>\Sigma</math> with the [[finite field]] <math>\mathbb F_q</math>.



=== The message length k ===

=== The message length ''k'' ===

Messages are elements <math>m</math> of <math>\Sigma^k</math>, that is, strings of length <math>k</math>.

Messages are elements <math>m</math> of <math>\Sigma^k</math>, that is, strings of length <math>k</math>.

Hence the number <math>k</math> is called the '''message length''' or '''dimension''' of a block code.

Hence the number <math>k</math> is called the '''message length''' or '''dimension''' of a block code.



=== The block length n ===

=== The block length ''n'' ===

The '''block length''' <math>n</math> of a block code is the number of symbols in a block. Hence, the elements <math>c</math> of <math>\Sigma^n</math> are strings of length <math>n</math> and correspond to blocks that may be received by the receiver. Hence they are also called received words.

The '''block length''' <math>n</math> of a block code is the number of symbols in a block. Hence, the elements <math>c</math> of <math>\Sigma^n</math> are strings of length <math>n</math> and correspond to blocks that may be received by the receiver. Hence they are also called received words.

If <math>c=C(m)</math> for some message <math>m</math>, then <math>c</math> is called the codeword of <math>m</math>.

If <math>c=C(m)</math> for some message <math>m</math>, then <math>c</math> is called the codeword of <math>m</math>.



=== The rate R ===

=== The rate ''R'' ===

The '''rate''' of a block code is defined as the ratio between its message length and its block length:

The '''rate''' of a block code is defined as the ratio between its message length and its block length:

:<math>R=k/n</math>.

:<math>R=k/n</math>.

A large rate means that the amount of actual message per transmitted block is high. In this sense, the rate measures the transmission speed and the quantity <math>1-R</math> measures the overhead that occurs due to the encoding with the block code.

A large rate means that the amount of actual message per transmitted block is high. In this sense, the rate measures the transmission speed and the quantity <math>1-R</math> measures the overhead that occurs due to the encoding with the block code.

It is a simple [[information theory|information theoretical]] fact that the rate cannot exceed <math>1</math> since data cannot be compressed in general. Formally, this follows from the fact that the code <math>C</math> is an injective map.

It is a simple [[information theory|information theoretical]] fact that the rate cannot exceed <math>1</math> since data cannot in general be losslessly compressed. Formally, this follows from the fact that the code <math>C</math> is an injective map.



=== The distance d ===

=== {{anchor|Minimum distance}}The distance ''d'' ===

The '''distance''' or '''minimum distance''' <math>d</math> of a block code is the minimum number of positions in which any two distinct codewords differ, and the '''relative distance''' <math>\delta</math> is the fraction <math>d/n</math>.

The '''distance''' or '''minimum distance''' {{mvar|d}} of a block code is the minimum number of positions in which any two distinct codewords differ, and the '''relative distance''' <math>\delta</math> is the fraction <math>d/n</math>.

Formally, for received words <math>c_1,c_2\in\Sigma^n</math>, let <math>\Delta(c_1,c_2)</math> denote the [[Hamming distance]] between <math>c_1</math> and <math>c_2</math>, that is, the number of positions in which <math>c_1</math> and <math>c_2</math> differ.

Formally, for received words <math>c_1,c_2\in\Sigma^n</math>, let <math>\Delta(c_1,c_2)</math> denote the [[Hamming distance]] between <math>c_1</math> and <math>c_2</math>, that is, the number of positions in which <math>c_1</math> and <math>c_2</math> differ.

Then the minimum distance <math>d</math> of the code <math>C</math> is defined as

Then the minimum distance <math>d</math> of the code <math>C</math> is defined as

:<math>d := \min_{m_1,m_2\in\Sigma^k; m_1\neq m_2} \Delta(C(m_1),C(m_2))</math>.

:<math>d := \min_{m_1,m_2\in\Sigma^k\atop m_1\neq m_2} \Delta[C(m_1),C(m_2)]</math>.

Since any code has to be injective, any two codewords will disagree in at least one position, so the distance of any code is at least <math>1</math>.

Since any code has to be [[injective]], any two codewords will disagree in at least one position, so the distance of any code is at least <math>1</math>. Besides, the '''distance''' equals the '''[[Hamming weight#Minimum weight|minimum weight]]''' for linear block codes because:

:<math>\min_{m_1,m_2\in\Sigma^k\atop m_1\neq m_2} \Delta[C(m_1),C(m_2)] = \min_{m_1,m_2\in\Sigma^k\atop m_1\neq m_2} \Delta[\mathbf{0},C(m_1)+C(m_2)] = \min_{m\in\Sigma^k\atop m\neq\mathbf{0}} w[C(m)] = w_\min</math>.



A larger distance allows for more error correction and detection.

A larger distance allows for more error correction and detection.

For example, if we only consider errors that may change symbols of the sent codeword but never erase or add them, then the number of errors is the number of positions in which the sent codeword and the received word differ.

For example, if we only consider errors that may change symbols of the sent codeword but never erase or add them, then the number of errors is the number of positions in which the sent codeword and the received word differ.

A code with distance <math>d</math> allows the receiver to detect up to <math>d-1</math> transmission errors since changing <math>d-1</math> positions of a codeword can never accidentally yield another codeword. Furthermore, if no more than <math>(d-1)/2</math> transmission errors occur, the receiver can uniquely decode the received word to a codeword. This is because every received word has at most one codeword at distance <math>(d-1)/2</math>. If more than <math>(d-1)/2</math> transmission errors occur, the receiver cannot uniquely decode the received word in general as there might be several possible codewords. One way for the receiver to cope with this situation is to use [[list-decoding]], in which the decoder outputs a list of all codewords in a certain radius.

A code with distance {{mvar|d}} allows the receiver to detect up to <math>d-1</math> transmission errors since changing <math>d-1</math> positions of a codeword can never accidentally yield another codeword. Furthermore, if no more than <math>(d-1)/2</math> transmission errors occur, the receiver can uniquely decode the received word to a codeword. This is because every received word has at most one codeword at distance <math>(d-1)/2</math>. If more than <math>(d-1)/2</math> transmission errors occur, the receiver cannot uniquely decode the received word in general as there might be several possible codewords. One way for the receiver to cope with this situation is to use [[list decoding]], in which the decoder outputs a list of all codewords in a certain radius.



=== Popular notation ===

=== Popular notation ===

The notation <math>(n,k,d)_q</math> is used asa shorthand for the fact that the block code under consideration is over an alphabet <math>\Sigma</math> of size <math>q</math>, has block length <math>n</math>, message length <math>k</math>, and distance <math>d</math>.

The notation <math>(n,k,d)_q</math> describes a block code over an alphabet <math>\Sigma</math> of size <math>q</math>, with a block length <math>n</math>, message length <math>k</math>, and distance <math>d</math>.

If the block code is a linear block code, then the square brackets in the notation <math>[n,k,d]_q</math> are used to represent that fact.

If the block code is a linear block code, then the square brackets in the notation <math>[n,k,d]_q</math> are used to represent that fact.

For binary codes with <math>q=2</math>, the index is sometimes dropped.

For binary codes with <math>q=2</math>, the index is sometimes dropped.

For [[maximum distance separable code]]s, the distance is always <math>d=n-k+1</math>, and sometimes the precise distance is not known, non-trivial to prove or state, or not needed. In such cases, the <math>d</math>-component may be missing.

For [[maximum distance separable code]]s, the distance is always <math>d=n-k+1</math>, but sometimes the precise distance is not known, non-trivial to prove or state, or not needed. In such cases, the <math>d</math>-component may be missing.



Sometimes, especially for non-block codes, the notation <math>(n,M,d)_q</math> is used for codes that contain <math>M</math> codewords of length <math>n</math>. For block codes with messages of length <math>k</math> over an alphabet of size <math>q</math>, this number would be <math>M=q^k</math>.

Sometimes, especially for non-block codes, the notation <math>(n,M,d)_q</math> is used for codes that contain <math>M</math> codewords of length <math>n</math>. For block codes with messages of length <math>k</math> over an alphabet of size <math>q</math>, this number would be <math>M=q^k</math>.

Line 54: Line 61:

== Examples ==

== Examples ==



As mentioned above, there is a vast number of error-correcting codes that are actually block codes.

As mentioned above, there are a vast number of error-correcting codes that are actually block codes.

The first error-correcting code was the [[Hamming(7,4)|Hamming(7,4)-code]], developed by [[Richard W. Hamming]] in 1950. This code transform a message consisting of 4 bits into a codeword of 7 bits by adding 3 parity bits. Hence this code is a block code. It turns out that it is also a linear code and that it has distance 3. In the shorthand notation above, this means that the Hamming(7,4)-code is a <math>[7,4,3]_2</math>-code.

The first error-correcting code was the [[Hamming(7,4)]] code, developed by [[Richard W. Hamming]] in 1950. This code transforms a message consisting of 4 bits into a codeword of 7 bits by adding 3 parity bits. Hence this code is a block code. It turns out that it is also a linear code and that it has distance 3. In the shorthand notation above, this means that the Hamming(7,4) code is a <math>[7,4,3]_2</math> code.



[[Reed-Solomon code]]s are a family of <math>[n,k,d]_q</math>-codes with <math>d=n-k+1</math> and <math>q</math> being a [[prime power]]. [[Rank error-correcting code|Rank codes]] are family of <math>[n,k,d]_q</math>-codes with <math>d \leq n-k+1</math>. [[Hadamard code]]s are a family of <math>[n,k,d]_2</math>-codes with <math>n=2^{k-1}</math> and <math>d=2^{k-2}</math>.

[[Reed–Solomon code]]s are a family of <math>[n,k,d]_q</math> codes with <math>d=n-k+1</math> and <math>q</math> being a [[prime power]]. [[Rank error-correcting code|Rank codes]] are family of <math>[n,k,d]_q</math> codes with <math>d \leq n-k+1</math>. [[Hadamard code]]s are a family of <math>[n,k,d]_2</math> codes with <math>n=2^{k-1}</math> and <math>d=2^{k-2}</math>.



== Error detection and correction properties ==

== Error detection and correction properties ==

Line 68: Line 75:


== Lower and upper bounds of block codes ==

== Lower and upper bounds of block codes ==

[[File:HammingLimit.png|thumb|720px|Hamming limit{{clarify|reason='Base' from y-axis legend does not occur in this article's textual content.|date=January 2022}}]]

[[File:Linear Binary Block Codes and their needed Check Symbols.png|thumb|720px|

There are theoretical limits (such as the Hamming limit), but another question is which codes can actually constructed.{{clarify|reason='Base' from y-axis legend does not occur in this article's textual content.|date=January 2022}} It is like [[Sphere packing|packing spheres in a box]] in many dimensions. This diagram shows the constructible codes, which are linear and binary. The ''x'' axis shows the number of protected symbols ''k'', the ''y'' axis the number of needed check symbols ''n–k''. Plotted are the limits for different Hamming distances from 1 (unprotected) to 34.

Marked with dots are perfect codes:

{{bulleted list

| light orange on ''x'' axis: trivial unprotected codes

| orange on ''y'' axis: trivial repeat codes

| dark orange on data set ''d''{{=}}3: classic perfect Hamming codes

| dark red and larger: the only perfect binary Golay code

}}

]]


=== Family of codes ===

=== Family of codes ===



<math>C =\{C_i\}_{i\ge1}</math> is called '' family of codes'', where <math>C_i</math> is an <math>(n_i,k_i,d_i)_q</math> code with monotonic increasing <math>n_i</math>.

<math>C =\{C_i\}_{i\ge1}</math> is called '' family of codes'', where <math>C_i</math> is an <math>(n_i,k_i,d_i)_q</math> code with monotonic increasing <math>n_i</math>.



'''Rate''' of family of codes <math>C</math> is defined as <math>R(C)=\lim_{i\to\infty}{k_i \over n_i}</math>

'''Rate''' of family of codes {{mvar|C}} is defined as <math>R(C)=\lim_{i\to\infty}{k_i \over n_i}</math>



'''Relative distance''' of family of codes <math>C</math> is defined as <math>\delta(C)=\lim_{i\to\infty}{d_i \over n_i}</math>

'''Relative distance''' of family of codes {{mvar|C}} is defined as <math>\delta(C)=\lim_{i\to\infty}{d_i \over n_i}</math>



To explore the relationship between <math>R(C)</math> and <math>\delta(C)</math>, a set of lower and upper bounds of block codes are known.

To explore the relationship between <math>R(C)</math> and <math>\delta(C)</math>, a set of lower and upper bounds of block codes are known.



=== [[Hamming bound]] ===

=== Hamming bound ===

{{main article|Hamming bound}}

<math> R \le 1- {1 \over n} \cdot \log_{q} \cdot \left[\sum_{i=0}^{\lfloor {{\delta \cdot n-1}\over 2}\rfloor}\binom{n}{i}(q-1)^i\right]</math>

: <math> R \le 1- {1 \over n} \cdot \log_{q} \cdot \left[\sum_{i=0}^{\left\lfloor {{\delta \cdot n-1}\over 2}\right\rfloor}\binom{n}{i}(q-1)^i\right]</math>



=== [[Singleton bound]] ===

=== Singleton bound ===

{{main article|Singleton bound}}

The Singleton bound is that the sum of the rate and the relative distance of a block code cannot be much larger than 1:

The Singleton bound is that the sum of the rate and the relative distance of a block code cannot be much larger than 1:

:<math> R + \delta \le 1+\frac{1}{n}</math>.

:<math> R + \delta \le 1+\frac{1}{n}</math>.

Line 87: Line 108:

[[Reed–Solomon code]]s are non-trivial examples of codes that satisfy the singleton bound with equality.

[[Reed–Solomon code]]s are non-trivial examples of codes that satisfy the singleton bound with equality.



===[[Plotkin bound]]===

=== Plotkin bound ===

{{main article|Plotkin bound}}

For <math>q=2</math>, <math>R+2\delta\le1</math>

For <math>q=2</math>, <math>R+2\delta\le1</math>. In other words, <math>k + 2d \le n</math>.



For the general case, the following Plotkin bounds holds for any <math>C \subseteq \mathbb{F}_q^{n} </math> with distance <math>d</math>:

For the general case, the following Plotkin bounds holds for any <math>C \subseteq \mathbb{F}_q^{n} </math> with distance {{mvar|d}}:



1. If <math>d=(1-{1 \over q})n, |C| \le 2qn </math>

# If <math>d=\left(1-{1 \over q}\right)n, |C| \le 2qn </math>

# If <math>d > \left(1-{1 \over q}\right)n, |C| \le {qd \over {qd -\left(q-1\right)n}} </math>



2. If <math>d</math> > <math> (1-{1 \over q})n, |C| \le {qd \over {qd -(q-1)n}} </math>

For any {{mvar|q}}-ary code with distance <math>\delta</math>, <math>R \le 1- \left({q \over {q-1}}\right) \delta + o\left(1\right)</math>



=== Gilbert–Varshamov bound ===

For any <math>q</math>-ary code with distance <math>\delta</math>, <math>R \le 1- ({q \over {q-1}}) \delta + o(1)</math>

{{main article|Gilbert–Varshamov bound}}

<math>R\ge1-H_q\left(\delta\right)-\epsilon</math>, where <math>0 \le \delta \le 1-{1\over q}, 0\le \epsilon \le 1- H_q\left(\delta\right)</math>,

<math> H_q\left(x\right) ~\overset{\underset{\mathrm{def}}{}}{=}~ -x\cdot\log_q{x \over {q-1}}-\left(1-x\right)\cdot\log_q{\left(1-x\right)} </math> is the {{mvar|q}}-ary entropy function.



===[[Gilbert-Varshamov bound|Gilbert–Varshamov bound]]===

=== Johnson bound ===

{{main article|Johnson bound}}

<math>R\ge1-H_q(\delta)-\epsilon</math>, where <math>0 \le \delta \le 1-{1\over q}, 0\le \epsilon \le 1- H_q(\delta)</math>,

<math> H_q(x)\equiv_{def} -x\cdot\log_q{x\over {q-1}}-(1-x)\cdot\log_q{(1-x)} </math> is the <math>q</math>-ary entropy function.

Define <math>J_q\left(\delta\right) ~\overset{\underset{\mathrm{def}}{}}{=}~ \left(1-{1\over q}\right)\left(1-\sqrt{1-{q \delta \over{q-1}}}\right) </math>. <br/>

Let <math>J_q\left(n, d, e\right)</math> be the maximum number of codewords in a Hamming ball of radius {{mvar|e}} for any code <math>C \subseteq \mathbb{F}_q^n</math> of distance {{mvar|d}}.



Then we have the ''Johnson Bound'' : <math>J_q\left(n,d,e\right)\le qnd</math>, if <math>{e \over n} \le {{q-1}\over q}\left( {1-\sqrt{1-{q \over{q-1}}\cdot{d \over n}}}\, \right)=J_q\left({d \over n}\right)</math>

=== [[Johnson bound]] ===

Define <math>J_q(\delta) \equiv_{def} (1-{1\over q})(1-\sqrt{1-{q \delta \over{q-1}}}) </math>. <br />

Let <math>J_q(n, d, e)</math> be the maximum number of codewords in a Hamming ball of radius <math>e</math> for any code <math>C \subseteq \mathbb{F}_q^n</math> of distance <math>d</math>.



=== Elias–Bassalygo bound ===

Then we have the ''Johnson Bound'' : <math>J_q(n,d,e)\le qnd</math>, if <math>{e \over n} \le {{q-1}\over q}\left( {1-\sqrt{1-{q \over{q-1}}\cdot{d \over n}}}\, \right)=J_q({d \over n})</math>

{{main article|Elias Bassalygo bound}}


: <math>R={\log_q{|C|} \over n} \le 1-H_q\left(J_q\left(\delta\right)\right)+o\left(1\right) </math>

=== [[Elias Bassalygo bound|Elias–Bassalygo bound]] ===


: <math>R={\log_q{|C|} \over n} \le 1-H_q(J_q(\delta))+o(1) </math>



== Sphere packings and lattices ==

== Sphere packings and lattices ==

Line 116: Line 139:

Block codes are tied to the [[sphere packing problem]] which has received some attention over the years. In two dimensions, it is easy to visualize. Take a bunch of pennies flat on the table and push them together. The result is a hexagon pattern like a bee's nest. But block codes rely on more dimensions which cannot easily be visualized. The powerful [[Binary Golay code|Golay code]] used in deep space communications uses 24 dimensions. If used as a binary code (which it usually is), the dimensions refer to the length of the codeword as defined above.

Block codes are tied to the [[sphere packing problem]] which has received some attention over the years. In two dimensions, it is easy to visualize. Take a bunch of pennies flat on the table and push them together. The result is a hexagon pattern like a bee's nest. But block codes rely on more dimensions which cannot easily be visualized. The powerful [[Binary Golay code|Golay code]] used in deep space communications uses 24 dimensions. If used as a binary code (which it usually is), the dimensions refer to the length of the codeword as defined above.



The theory of coding uses the ''N''-dimensional sphere model. For example, how many pennies can be packed into a circle on a tabletop or in 3 dimensions, how many marbles can be packed into a globe. Other considerations enter the choice of a code. For example, hexagon packing into the constraint of a rectangular box will leave empty space at the corners. As the dimensions get larger, the percentage of empty space grows smaller. But at certain dimensions, the packing uses all the space and these codes are the so called perfect codes. There are very few of these codes.

The theory of coding uses the ''N''-dimensional sphere model. For example, how many pennies can be packed into a circle on a tabletop or in 3 dimensions, how many marbles can be packed into a globe. Other considerations enter the choice of a code. For example, hexagon packing into the constraint of a rectangular box will leave empty space at the corners. As the dimensions get larger, the percentage of empty space grows smaller. But at certain dimensions, the packing uses all the space and these codes are the so-called perfect codes. There are very few of these codes.



Another property is the number of neighbors a single codeword may have.<ref name=schlegel>

Another property is the number of neighbors a single codeword may have.<ref name=schlegel>

Line 126: Line 149:

| isbn = 978-0-471-22755-7

| isbn = 978-0-471-22755-7

| page = 73

| page = 73

| url = http://books.google.com/books?id=9wRCjfGAaEcC&pg=PA73

| url = https://books.google.com/books?id=9wRCjfGAaEcC&pg=PA73

}}</ref>

}}</ref>

Again, consider pennies as an example. First we pack the pennies in a rectangular grid. Each penny will have 4 near neighbors (and 4 at the corners which are farther away). In a hexagon, each penny will have 6 near neighbors. Respectively, in three and four dimensions, the maximum packing is given by the [[12-face]] and [[24-cell]] with 12 and 24 neighbors, respectively. When we increase the dimensions, the number of near neighbors increases very rapidly. In general, the value is given by the [[kissing number]]s.

Again, consider pennies as an example. First we pack the pennies in a rectangular grid. Each penny will have 4 near neighbors (and 4 at the corners which are farther away). In a hexagon, each penny will have 6 near neighbors. Respectively, in three and four dimensions, the maximum packing is given by the [[12-face]] and [[24-cell]] with 12 and 24 neighbors, respectively. When we increase the dimensions, the number of near neighbors increases very rapidly. In general, the value is given by the [[kissing number]]s.

Line 137: Line 160:


==See also==

==See also==

* [[Channel Capacity]]

* [[Channel capacity]]

* [[Shannon–Hartley theorem]]

* [[Shannon–Hartley theorem]]

* [[Noisy channel]]

* [[Noisy channel]]

* [[List decoding]]

* [[List decoding]]<ref name="schlegel" />

* [[Sphere packing]]

* [[Sphere packing]]


== Notes ==

* Atri Rudra, CSE545 Error Correcting Codes: Combinatorics, Algorithms and Applications, State University of New York at Buffalo.


==External links==

*http://www.cse.buffalo.edu/~atri/courses/coding-theory/



== References ==

== References ==

Line 155: Line 172:

{{Refimprove|date=September 2008}}

{{Refimprove|date=September 2008}}



* {{cite book | author=J.H. van Lint | authorlink=Jack van Lint | title=Introduction to Coding Theory | edition=2nded | publisher=Springer-Verlag | series=[[Graduate Texts in Mathematics|GTM]] | volume=86 | year=1992 | isbn=3-540-54894-7 | page=31}}

* {{cite book | author=J.H. van Lint | authorlink=Jack van Lint | title=Introduction to Coding Theory | edition=2nd | publisher=Springer-Verlag | series=[[Graduate Texts in Mathematics|GTM]] | volume=86 | year=1992 | isbn=3-540-54894-7 | page=[https://archive.org/details/introductiontoco0000lint/page/3131] | url=https://archive.org/details/introductiontoco0000lint/page/31 }}

* {{cite book | author=F.J. MacWilliams | authorlink=Jessie MacWilliams | coauthors=[[Neil Sloane|N.J.A. Sloane]] | title=The Theory of Error-Correcting Codes | publisher=North-Holland | year=1977 | isbn=0-444-85193-3 | page=35}}

* {{cite book | author=F.J. MacWilliams | authorlink=Jessie MacWilliams |author2=N.J.A. Sloane |authorlink2=Neil Sloane | title=The Theory of Error-Correcting Codes | url=https://archive.org/details/theoryoferrorcor0000macw | url-access=registration | publisher=North-Holland | year=1977 | isbn=0-444-85193-3 | page=[https://archive.org/details/theoryoferrorcor0000macw/page/3535]}}

* {{cite book | author=W. Huffman |coauthors=V.Pless | title= Fundamentals of error-correcting codes | publisher=Cambridge University Press | year=2003 | isbn=978-0-521-78280-7}}

* {{cite book | author=W. Huffman |author2=V.Pless | authorlink2=Vera Pless | title= Fundamentals of error-correcting codes | url=https://archive.org/details/fundamentalsofer0000huff | url-access=registration | publisher=Cambridge University Press | year=2003 | isbn=978-0-521-78280-7}}

* {{cite book | author=S. Lin |author2=D. J. Jr. Costello | title= Error Control Coding: Fundamentals and Applications | publisher=Prentice-Hall | year=1983 | isbn=0-13-283796-X}}


* {{cite book | author=S. Lin |coauthors=D. J. Jr. Costello | title= Error Control Coding: Fundamentals and Applications | publisher=Prentice-Hall | year=1983 | isbn=0-13-283796-X}}



== External links ==

== External links ==

* [http://www.complextoreal.com/chapters/block.pdf Coding Concepts and Block Coding ]

* Charan Langton (2001) [http://complextoreal.com/wp-content/uploads/2013/01/block.pdf Coding Concepts and Block Coding ]



[[Category:Coding theory]]

[[Category:Coding theory]]


[[cs:Blokový kód]]

[[de:Blockcode]]

[[es:Códigos de bloque]]

[[it:Codice a blocchi]]

[[kk:Блоктық кода]]

[[ja:ブロック符号]]

[[ru:Блочный код]]

[[vi:Mã khối]]

[[zh:分組碼]]


Latest revision as of 09:03, 5 June 2024

Incoding 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 definition of block codes is conceptually useful because it allows coding theorists, mathematicians, and computer scientists to study the limitations of all block codes in a unified way. Such limitations often take the form of bounds that relate different parameters of the block code to each other, such as its rate and its ability to detect and correct errors.

Examples of block codes are Reed–Solomon codes, Hamming codes, Hadamard codes, Expander codes, Golay codes, Reed–Muller codes and Polar codes. These examples also belong to the class of linear codes, and hence they are called linear block codes. More particularly, these codes are known as algebraic block codes, or cyclic block codes, because they can be generated using boolean polynomials.

Algebraic block codes are typically hard-decoded using algebraic decoders.[jargon]

The term block code may also refer to any error-correcting code that acts on a block of bits of input data to produce bits of output data . Consequently, the block coder is a memoryless device. Under this definition codes such as turbo codes, terminated convolutional codes and other iteratively decodable codes (turbo-like codes) would also be considered block codes. A non-terminated convolutional encoder would be an example of a non-block (unframed) code, which has memory and is instead classified as a tree code.

This article deals with "algebraic block codes".

The block code and its parameters[edit]

Error-correcting codes are used to reliably transmit digital data over unreliable communication channels subject to channel noise. When a sender wants to transmit a possibly very long data stream using a block code, the sender breaks the stream up into pieces of some fixed size. Each such piece is called message and the procedure given by the block code encodes each message individually into a codeword, also called a block in the context of block codes. The sender then transmits all blocks to the receiver, who can in turn use some decoding mechanism to (hopefully) recover the original messages from the possibly corrupted received blocks. The performance and success of the overall transmission depends on the parameters of the channel and the block code.

Formally, a block code is an injective mapping

.

Here, is a finite and nonempty set and and are integers. The meaning and significance of these three parameters and other parameters related to the code are described below.

The alphabet Σ[edit]

The data stream to be encoded is modeled as a string over some alphabet . The size of the alphabet is often written as . If , then the block code is called a binary block code. In many applications it is useful to consider to be a prime power, and to identify with the finite field .

The message length k[edit]

Messages are elements of, that is, strings of length . Hence the number is called the message lengthordimension of a block code.

The block length n[edit]

The block length of a block code is the number of symbols in a block. Hence, the elements of are strings of length and correspond to blocks that may be received by the receiver. Hence they are also called received words. If for some message , then is called the codeword of .

The rate R[edit]

The rate of a block code is defined as the ratio between its message length and its block length:

.

A large rate means that the amount of actual message per transmitted block is high. In this sense, the rate measures the transmission speed and the quantity measures the overhead that occurs due to the encoding with the block code. It is a simple information theoretical fact that the rate cannot exceed since data cannot in general be losslessly compressed. Formally, this follows from the fact that the code is an injective map.

The distance d[edit]

The distanceorminimum distance d of a block code is the minimum number of positions in which any two distinct codewords differ, and the relative distance is the fraction . Formally, for received words , let denote the Hamming distance between and , that is, the number of positions in which and differ. Then the minimum distance of the code is defined as

.

Since any code has to be injective, any two codewords will disagree in at least one position, so the distance of any code is at least . Besides, the distance equals the minimum weight for linear block codes because:

.

A larger distance allows for more error correction and detection. For example, if we only consider errors that may change symbols of the sent codeword but never erase or add them, then the number of errors is the number of positions in which the sent codeword and the received word differ. A code with distance d allows the receiver to detect up to transmission errors since changing positions of a codeword can never accidentally yield another codeword. Furthermore, if no more than transmission errors occur, the receiver can uniquely decode the received word to a codeword. This is because every received word has at most one codeword at distance . If more than transmission errors occur, the receiver cannot uniquely decode the received word in general as there might be several possible codewords. One way for the receiver to cope with this situation is to use list decoding, in which the decoder outputs a list of all codewords in a certain radius.

Popular notation[edit]

The notation describes a block code over an alphabet of size , with a block length , message length , and distance . If the block code is a linear block code, then the square brackets in the notation are used to represent that fact. For binary codes with , the index is sometimes dropped. For maximum distance separable codes, the distance is always , but sometimes the precise distance is not known, non-trivial to prove or state, or not needed. In such cases, the -component may be missing.

Sometimes, especially for non-block codes, the notation is used for codes that contain codewords of length . For block codes with messages of length over an alphabet of size , this number would be .

Examples[edit]

As mentioned above, there are a vast number of error-correcting codes that are actually block codes. The first error-correcting code was the Hamming(7,4) code, developed by Richard W. Hamming in 1950. This code transforms a message consisting of 4 bits into a codeword of 7 bits by adding 3 parity bits. Hence this code is a block code. It turns out that it is also a linear code and that it has distance 3. In the shorthand notation above, this means that the Hamming(7,4) code is a code.

Reed–Solomon codes are a family of codes with and being a prime power. Rank codes are family of codes with . Hadamard codes are a family of codes with and .

Error detection and correction properties[edit]

A codeword could be considered as a point in the -dimension space and the code is the subset of . A code has distance means that , there is no other codeword in the Hamming ball centered at with radius , which is defined as the collection of -dimension words whose Hamming distanceto is no more than . Similarly, with (minimum) distance has the following properties:

Lower and upper bounds of block codes[edit]

Hamming limit[clarification needed]
There are theoretical limits (such as the Hamming limit), but another question is which codes can actually constructed.[clarification needed] It is like packing spheres in a box in many dimensions. This diagram shows the constructible codes, which are linear and binary. The x axis shows the number of protected symbols k, the y axis the number of needed check symbols n–k. Plotted are the limits for different Hamming distances from 1 (unprotected) to 34. Marked with dots are perfect codes:

  • light orange on x axis: trivial unprotected codes
  • orange on y axis: trivial repeat codes
  • dark orange on data set d=3: classic perfect Hamming codes
  • dark red and larger: the only perfect binary Golay code

Family of codes[edit]

is called family of codes, where is an code with monotonic increasing .

Rate of family of codes C is defined as

Relative distance of family of codes C is defined as

To explore the relationship between and , a set of lower and upper bounds of block codes are known.

Hamming bound[edit]

Singleton bound[edit]

The Singleton bound is that the sum of the rate and the relative distance of a block code cannot be much larger than 1:

.

In other words, every block code satisfies the inequality . Reed–Solomon codes are non-trivial examples of codes that satisfy the singleton bound with equality.

Plotkin bound[edit]

For , . In other words, .

For the general case, the following Plotkin bounds holds for any with distance d:

  1. If
  2. If

For any q-ary code with distance ,

Gilbert–Varshamov bound[edit]

, where , is the q-ary entropy function.

Johnson bound[edit]

Define .
Let be the maximum number of codewords in a Hamming ball of radius e for any code of distance d.

Then we have the Johnson Bound : , if

Elias–Bassalygo bound[edit]

Sphere packings and lattices[edit]

Block codes are tied to the sphere packing problem which has received some attention over the years. In two dimensions, it is easy to visualize. Take a bunch of pennies flat on the table and push them together. The result is a hexagon pattern like a bee's nest. But block codes rely on more dimensions which cannot easily be visualized. The powerful Golay code used in deep space communications uses 24 dimensions. If used as a binary code (which it usually is), the dimensions refer to the length of the codeword as defined above.

The theory of coding uses the N-dimensional sphere model. For example, how many pennies can be packed into a circle on a tabletop or in 3 dimensions, how many marbles can be packed into a globe. Other considerations enter the choice of a code. For example, hexagon packing into the constraint of a rectangular box will leave empty space at the corners. As the dimensions get larger, the percentage of empty space grows smaller. But at certain dimensions, the packing uses all the space and these codes are the so-called perfect codes. There are very few of these codes.

Another property is the number of neighbors a single codeword may have.[1] Again, consider pennies as an example. First we pack the pennies in a rectangular grid. Each penny will have 4 near neighbors (and 4 at the corners which are farther away). In a hexagon, each penny will have 6 near neighbors. Respectively, in three and four dimensions, the maximum packing is given by the 12-face and 24-cell with 12 and 24 neighbors, respectively. When we increase the dimensions, the number of near neighbors increases very rapidly. In general, the value is given by the kissing numbers.

The result is that the number of ways for noise to make the receiver choose a neighbor (hence an error) grows as well. This is a fundamental limitation of block codes, and indeed all codes. It may be harder to cause an error to a single neighbor, but the number of neighbors can be large enough so the total error probability actually suffers.[1]

See also[edit]

References[edit]

  1. ^ a b c Christian Schlegel and Lance Pérez (2004). Trellis and turbo coding. Wiley-IEEE. p. 73. ISBN 978-0-471-22755-7.

External links[edit]


Retrieved from "https://en.wikipedia.org/w/index.php?title=Block_code&oldid=1227366911"

Category: 
Coding theory
Hidden categories: 
Articles with short description
Short description is different from Wikidata
All articles that are too technical
Wikipedia articles that are too technical from May 2015
All articles needing expert attention
Articles needing expert attention from May 2015
Wikipedia articles needing clarification from January 2022
Articles needing additional references from September 2008
All articles needing additional references
 



This page was last edited on 5 June 2024, at 09:03 (UTC).

Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



Privacy policy

About Wikipedia

Disclaimers

Contact Wikipedia

Code of Conduct

Developers

Statistics

Cookie statement

Mobile view



Wikimedia Foundation
Powered by MediaWiki