|
|
Line 1: |
Line 1: |
| In [[information theory]], a '''low-density parity-check''' ('''LDPC''') '''code''' is a [[linear block code|linear]] [[error correcting code]], a method of transmitting a message over a [[signal noise|noisy]] transmission channel,<ref>[[David J.C. MacKay]] (2003) Information theory, Inference and Learning Algorithms, CUP, ISBN 0-521-64298-1, (also [http://www.inference.phy.cam.ac.uk/mackay/itila/book.html available online])</ref><ref>[[Todd K. Moon]] (2005) Error Correction Coding, Mathematical Methods and Algorithms. Wiley, ISBN 0-471-64800-0 (Includes code)</ref> and is constructed using a sparse [[bipartite graph]].<ref>[[Amin Shokrollahi]] (2003) LDPC Codes: An Introduction</ref> LDPC codes are [[:Category:capacity-approaching codes|capacity-approaching codes]], which means that practical constructions exist that allow the noise threshold to be set very close (or even ''arbitrarily'' close on the [[binary erasure channel|BEC]]) to the theoretical maximum (the [[Shannon-Hartley theorem|Shannon limit]]) for a symmetric memoryless channel. The noise threshold defines an upper bound for the channel noise, up to which the probability of lost information can be made as small as desired. Using iterative [[belief propagation]] techniques, LDPC codes can be decoded in time linear to their block length.
| | Christine is what's written on my birth certificate but my hubby doesn't while you might at the whole. Years ago we moved to Texas and i have everything that I need here. After being out of his job popular he became an administrative assistant. My husband doesn't like it the way I do but what i really look foward to is to play lacross having said that i struggle find time so as. See what's new on her website here: https://www.youtube.com/watch?v=pns2W-mSPU8<br><br> |
|
| |
|
| LDPC codes are finding increasing use in applications requiring reliable and highly efficient information transfer over bandwidth or return channel-constrained links in the presence of corrupting noise. Although implementation of LDPC codes has lagged behind that of other codes, notably [[turbo code]]s, the absence of encumbering [[software patent]]s has made LDPC attractive to some.<ref>NewScientist, ''Communication speed nears terminal velocity'', by Dana Mackenzie, 9 July 2005</ref>
| | Review my homepage [https://www.youtube.com/watch?v=pns2W-mSPU8 Scalar Energy Pendant Fake] |
| | |
| LDPC codes are also known as '''Gallager codes''', in honor of [[Robert G. Gallager]], who developed the LDPC concept in his doctoral dissertation at the [[Massachusetts Institute of Technology]] in 1960.<ref>{{Cite news |url=http://web.mit.edu/newsoffice/2010/gallager-codes-0121.html |title=Explained: Gallager codes |author=Larry Hardesty |journal=MIT News |date= January 21, 2010 |accessdate= August 7, 2013 }}</ref>
| |
| | |
| ==History==
| |
| Impractical to implement when first developed by Gallager in 1963,<ref>{{Cite book |author= Robert G. Gallager |title= Low Density Parity Check Codes |publisher= Monograph, M.I.T. Press |year= 1963 |url= http://www.inference.phy.cam.ac.uk/mackay/gallager/papers/ldpc.pdf |accessdate= August 7, 2013 }}</ref> Gallager's LDPC codes were forgotten until Gallager's work was discovered in 1996.<ref name=MacKay96>[[David J.C. MacKay]] and Radford M. Neal, "Near Shannon Limit Performance of Low Density Parity Check Codes," Electronics Letters, July 1996</ref> [[Turbo code]]s, another class of capacity-approaching codes discovered in 1993, became the coding scheme of choice in the late 1990s, used for applications such as the [[Deep Space Network]] and [[satellite communication]]s. However, in the last few years, the advances in low-density parity-check codes have seen them surpass turbo codes in terms of [[error floor]] and performance in the higher [[code rate]] range, leaving turbo codes better suited for the lower code rates only.<ref>[http://deepspace.jpl.nasa.gov/dsndocs/810-005/208/208A.pdf Telemetry Data Decoding, Design Handbook]</ref>
| |
| | |
| ==Applications==
| |
| In 2003, an LDPC code beat six turbo codes to become the error correcting code in the new [[DVB-S2]] standard for the satellite transmission of [[digital television]].<ref name="hughesdvb">[http://www.ieeevtc.org/vtc2003fall/2003panelsessions/llee.pdf Presentation by Hughes Systems]</ref> In 2008, LDPC beat convolutional turbo codes as the [[forward error correction]] (FEC) system for the [[ITU-T]] [[G.hn]] standard.<ref>[http://homepnablog.typepad.com/my_weblog/2008/12/ghn-a-phy-for-all-seasons.html HomePNA Blog: G.hn, a PHY For All Seasons]</ref> G.hn chose LDPC coded over turbo codes because of their lower decoding complexity (especially when operating at data rates close to 1.0 Gbit/s) and because the proposed turbo codes exhibited a significant [[error floor]] at the desired range of operation.<ref>[http://blog.ds2.es/ds2blog/2009/10/ieee-communications-magazine-paper-on-ghn.html IEEE Communications Magazine paper on G.hn]</ref> LDPC is also used for [[10GBase-T]] Ethernet, which sends data at 10 gigabits per second over twisted-pair cables. As of 2009, LDPC codes are also part of the [[Wi-Fi]] 802.11 standard as an optional part of [[802.11n]] and [[802.11ac]], in the High Throughput (HT) PHY specification.<ref>IEEE Standard, section 20.3.11.6 [http://standards.ieee.org/getieee802/download/802.11n-2009.pdf "802.11n-2009"], IEEE, October 29, 2009, accessed March 21, 2011.</ref>
| |
| | |
| Some [[OFDM]] systems add an additional outer error correction that fixes the occasional errors (the "error floor") that get past the LDPC correction inner code even at low [[bit error rate]]s.
| |
| For example:
| |
| The [[Reed-Solomon code]] with LDPC Coded Modulation (RS-LCM) uses a Reed-Solomon outer code.<ref>
| |
| Chih-Yuan Yang, Mong-Kai Ku.
| |
| http://123seminarsonly.com/Seminar-Reports/029/26540350-Ldpc-Coded-Ofdm-Modulation.pdf
| |
| "LDPC coded OFDM modulation for high spectral efficiency transmission"
| |
| </ref>
| |
| The DVB-T2 standard and the DVB-C2 standard use a [[BCH code]] outer code to mop up residual errors after LDPC decoding.<ref>
| |
| Nick Wells.
| |
| [http://www.atsc.org/cms/pdf/pt2/Wells_ATSC_paper_on_T2.pdf "DVB-T2 in relation to the DVB-x2 Family of Standards"]
| |
| </ref>
| |
| | |
| ==Function==
| |
| LDPC codes are defined by a sparse [[parity-check matrix]]. This [[sparse matrix]] is often randomly generated, subject to the [[sparsity]] constraints—[[#Code construction|LDPC code construction]] is discussed [[#Code construction|later]]. These codes were first designed by Robert Gallager in 1962.
| |
| | |
| Below is a graph fragment of an example LDPC code using [[factor graph|Forney's factor graph notation]]. In this graph, ''n'' variable nodes in the top of the graph are connected to (''n''−''k'') constraint nodes in the bottom of the graph. This is a popular way of graphically representing an (''n'', ''k'') LDPC code. The bits of a valid message, when placed on the '''T's''' at the top of the graph, satisfy the graphical constraints. Specifically, all lines connecting to a variable node (box with an '=' sign) have the same value, and all values connecting to a factor node (box with a '+' sign) must sum, [[modular arithmetic|modulo]] two, to zero (in other words, they must sum to an even number).
| |
| | |
| [[Image:ldpc code fragment factor graph.svg|none]]
| |
| Ignoring any lines going out of the picture, there are eight possible six-bit strings corresponding to valid codewords: (i.e., 000000, 011001, 110010, 101011, 111100, 100101, 001110, 010111). This LDPC code fragment represents a three-bit message encoded as six bits. Redundancy is used, here, to increase the chance of recovering from channel errors. This is a (6, 3) [[linear code]], with ''n'' = 6 and ''k'' = 3.
| |
| | |
| Once again ignoring lines going out of the picture, the parity-check matrix representing this graph fragment is
| |
| | |
| :<math>
| |
| \mathbf{H} =
| |
| \begin{pmatrix}
| |
| 1 & 1 & 1 & 1 & 0 & 0 \\
| |
| 0 & 0 & 1 & 1 & 0 & 1 \\
| |
| 1 & 0 & 0 & 1 & 1 & 0 \\
| |
| \end{pmatrix}.
| |
| </math>
| |
| | |
| In this matrix, each row represents one of the three parity-check constraints, while each column represents one of the six bits in the received codeword.
| |
| | |
| In this example, the eight codewords can be obtained by putting the [[parity-check matrix]] '''H''' into this form <math>\begin{bmatrix} -P^T | I_{n-k} \end{bmatrix}</math> through basic [[row operations]]:
| |
| :<math>\mathbf{H}
| |
| =
| |
| \begin{pmatrix}
| |
| 1 & 1 & 1 & 1 & 0 & 0 \\
| |
| 0 & 0 & 1 & 1 & 0 & 1 \\
| |
| 1 & 0 & 0 & 1 & 1 & 0 \\
| |
| \end{pmatrix}
| |
| \sim
| |
| \begin{pmatrix}
| |
| 1 & 1 & 1 & 1 & 0 & 0 \\
| |
| 0 & 0 & 1 & 1 & 0 & 1 \\
| |
| 0 & 1 & 1 & 0 & 1 & 0 \\
| |
| \end{pmatrix}
| |
| \sim
| |
| \begin{pmatrix}
| |
| 1 & 1 & 1 & 1 & 0 & 0 \\
| |
| 0 & 1 & 1 & 0 & 1 & 0 \\
| |
| 0 & 0 & 1 & 1 & 0 & 1 \\
| |
| \end{pmatrix}
| |
| \sim
| |
| \begin{pmatrix}
| |
| 1 & 1 & 1 & 1 & 0 & 0 \\
| |
| 0 & 1 & 1 & 0 & 1 & 0 \\
| |
| 1 & 1 & 0 & 0 & 0 & 1 \\
| |
| \end{pmatrix}.
| |
| </math>
| |
| | |
| From this, the [[generator matrix]] '''G''' can be obtained as <math>\begin{bmatrix} I_k | P \end{bmatrix}</math> (noting that in the special case of this being a binary code <math>P = -P</math>), or specifically:
| |
| | |
| :<math>\mathbf{G}
| |
| =
| |
| \begin{pmatrix}
| |
| 1 & 0 & 0 & 1 & 0 & 1 \\
| |
| 0 & 1 & 0 & 1 & 1 & 1 \\
| |
| 0 & 0 & 1 & 1 & 1 & 0 \\
| |
| \end{pmatrix}.
| |
| </math>
| |
| | |
| Finally, by multiplying all eight possible 3-bit strings by '''G''', all eight valid codewords are obtained. For example, the codeword for the bit-string '101' is obtained by:
| |
| | |
| :<math>
| |
| \begin{pmatrix}
| |
| 1 & 0 & 1 \\
| |
| \end{pmatrix}
| |
| \cdot
| |
| \begin{pmatrix}
| |
| 1 & 0 & 0 & 1 & 0 & 1 \\
| |
| 0 & 1 & 0 & 1 & 1 & 1 \\
| |
| 0 & 0 & 1 & 1 & 1 & 0 \\
| |
| \end{pmatrix}
| |
| =
| |
| \begin{pmatrix}
| |
| 1 & 0 & 1 & 0 & 1 & 1 \\
| |
| \end{pmatrix}.
| |
| </math>
| |
| | |
| ==Decoding==
| |
| {{Expert-subject|Telecommunications|section|date=November 2008}}
| |
| | |
| As with other codes, the [[maximum likelihood decoding]] of an LDPC code on the [[binary symmetric channel]] is an [[NP-complete]] problem, although techniques based on iterative [[belief propagation]] used in practice lead to good approximations. In contrast, belief propagation on the [[binary erasure channel]] is particularly simple where it consists of iterative constraint satisfaction.
| |
| | |
| For example, consider that the valid codeword, 101011, from the example above, is transmitted across a binary erasure channel and received with the first and fourth bit erased to yield ?⁠01?⁠11. Since the transmitted message must have satisfied the code constraints, the message can be represented by writing the received message on the top of the factor graph.
| |
| | |
| In this example, the first bit cannot yet be recovered, because all of the constraints connected to it have more than one unknown bit. In order to proceed with decoding the message, constraints connecting to only one of the erased bits must be identified. In this example, only the second constraint suffices. Examining the second constraint, the fourth bit must have been zero, since only a zero in that position would satisfy the constraint.
| |
| | |
| This procedure is then iterated. The new value for the fourth bit can now be used in conjunction with the first constraint to recover the first bit as seen below. This means that the first bit must be a one to satisfy the leftmost constraint.
| |
| | |
| [[Image:ldpc code fragment factor graph w erasures decode step 2.svg|none]]
| |
| | |
| Thus, the message can be decoded iteratively. For other channel models, the messages passed between the variable nodes and check nodes are [[real number]]s, which express probabilities and likelihoods of belief.
| |
| | |
| This result can be validated by multiplying the corrected codeword '''r''' by the parity-check matrix '''H''':
| |
| | |
| :<math>\mathbf{z} = \mathbf{Hr}
| |
| =
| |
| \begin{pmatrix}
| |
| 1 & 1 & 1 & 1 & 0 & 0 \\
| |
| 0 & 0 & 1 & 1 & 0 & 1 \\
| |
| 1 & 0 & 0 & 1 & 1 & 0 \\
| |
| \end{pmatrix}
| |
| | |
| \begin{pmatrix}
| |
| 1 \\ 0 \\ 1 \\ 0 \\ 1 \\ 1 \\
| |
| \end{pmatrix}
| |
| | |
| =
| |
| \begin{pmatrix}
| |
| 0 \\ 0 \\ 0 \\
| |
| \end{pmatrix}.
| |
| </math>
| |
| | |
| Because the outcome '''z''' (the [[Decoding methods#Syndrome decoding|syndrome]]) of this operation is the three × one zero vector, the resulting codeword '''r''' is successfully validated.
| |
| | |
| === Updating node information ===
| |
| In recent years, there has also been a great deal of work spent studying the effects of alternative schedules for variable-node and constraint-node update. The original technique that was used for decoding LDPC codes was known as ''flooding''. This type of update required that, before updating a variable node, all constraint nodes needed to be updated and vice versa. In later work by Vila Casado ''et al.'',<ref name=Vila07>A.I. Vila Casado, M. Griot, and R.Wesel, “Informed dynamic scheduling for belief propagation decoding of LDPC codes,” Proc. [[IEEE]] Int. Conf. on Comm. (ICC), June 2007.</ref> alternative update techniques were studied, in which variable nodes are updated with the newest available check-node information.
| |
| | |
| The intuition behind these algorithms is that variable nodes whose values vary the most are the ones that need to be updated first. Highly reliable nodes, whose [[log-likelihood ratio]] (LLR) magnitude is large and does not change significantly from one update to the next, do not require updates with the same frequency as other nodes, whose sign and magnitude fluctuate more widely.
| |
| These scheduling algorithms show greater speed of convergence and lower error floors than those that use flooding. These lower error floors are achieved by the ability of the Informed Dynamic Scheduling (IDS)<ref name=Vila07/> algorithm to overcome trapping sets of near codewords.<ref name=Richardson03>T. Richardson, “Error floors of LDPC codes,” in Proc. 41st Allerton Conf. Comm., Control, and Comput., Monticello, IL, 2003.</ref>
| |
| | |
| When nonflooding scheduling algorithms are used, an alternative definition of iteration is used. For an (''n'', ''k'') LDPC code of rate ''k''/''n'', a full ''iteration'' occurs when ''n'' variable and ''n'' − ''k'' constraint nodes have been updated, no matter the order in which they were updated.
| |
| | |
| === Lookup table decoding ===
| |
| It is possible to decode LDPC codes on a relatively low-power microprocessor by the use of [[lookup table]]s.
| |
| | |
| While codes such as the LDPC are generally implemented on high-power processors, with long block lengths, there are also applications which use lower-power processors and short block lengths (1024).
| |
| | |
| Therefore, it is possible to precalculate the output bit based upon predetermined input bits. A table is generated which contains ''n'' entries (for a block length of 1024 bits, this would be 1024 bits long), and contains all possible entries for different input states (both errored and nonerrored).
| |
| | |
| As a bit is input, it is then added to a FIFO register, and the value of the FIFO register is then used to look up in the table the relevant output from the precalculated values.
| |
| | |
| By this method, very high iterations can be used, with little processor overhead, the only cost being that of the memory for the lookup table, such that LDPC decoding is possible even on a 4.0 MHz PIC chip.
| |
| | |
| == Code construction ==
| |
| For large block sizes, LDPC codes are commonly constructed by first studying the behaviour of decoders. As the block size tends to infinity, LDPC decoders can be shown to have a noise threshold below which decoding is reliably achieved, and above which decoding is not achieved.<ref name=richardson01>Thomas J. Richardson and M. Amin Shokrollahi and Rüdiger L. Urbanke, "Design of Capacity-Approaching Irregular Low-Density Parity-Check Codes," IEEE Transactions in Information Theory, 47(2), February 2001</ref> This threshold can be optimised by finding the best proportion of arcs from check nodes and arcs from variable nodes. An approximate graphical approach to visualising this threshold is an [[EXIT chart]].
| |
| | |
| The construction of a specific LDPC code after this optimization falls into two main types of techniques:
| |
| | |
| *Pseudorandom approaches
| |
| *Combinatorial approaches
| |
| | |
| Construction by a pseudo-random approach builds on theoretical results that, for large block size, a random construction gives good decoding performance.<ref name=MacKay96/> In general, pseudorandom codes have complex encoders, but pseudorandom codes with the best decoders can have simple encoders.<ref name=richardson01b>Thomas J. Richardson and Rüdiger L. Urbanke, "Efficient Encoding of Low-Density Parity-Check Codes," IEEE Transactions in Information Theory, 47(2), February 2001</ref> Various constraints are often applied to help ensure that the desired properties expected at the theoretical limit of infinite block size occur at a finite block size.
| |
| | |
| Combinatorial approaches can be used to optimize the properties of small block-size LDPC codes or to create codes with simple encoders.
| |
| | |
| Some LDPC codes are based on [[Reed-Solomon code]]s, such as the RS-LDPC code used in the [[10-gigabit Ethernet]] standard.<ref>
| |
| Ahmad Darabiha, Anthony Chan Carusone, Frank R. Kschischang.
| |
| [http://www.eecg.toronto.edu/~tcc/darabiha_jssc08.pdf "Power Reduction Techniques for LDPC Decoders"]
| |
| </ref>
| |
| Compared to randomly generated LDPC codes, structured LDPC codes—such as the LDPC code used in the [[DVB-S2]] standard—can have simpler and therefore lower-cost hardware—in particular, codes constructed such that the H matrix is a [[circulant matrix]].<ref>
| |
| Zhengya Zhang, Venkat Anantharam, Martin J. Wainwright, and Borivoje Nikolic.
| |
| [http://www.eecs.berkeley.edu/~ananth/2008+/jssc_apr10.pdf "An Efficient 10GBASE-T Ethernet LDPC Decoder Design With Low Error Floors"].
| |
| </ref>
| |
| | |
| Yet another way of constructing LDPC codes is to use [[finite geometry|finite geometries]]. This method was proposed by Y. Kou ''et al.'' in 2001.<ref name=Kou1>Y. Kou, S. Lin and M. Fossorier, "Low-Density Parity-Check Codes
| |
| Based on Finite Geometries: A Rediscovery and New Results," IEEE
| |
| Transactions on Information Theory, vol. 47, no. 7, November 2001, pp. 2711-
| |
| 2736.</ref>
| |
| | |
| == See also ==
| |
| | |
| === People ===
| |
| *[[Robert G. Gallager]]
| |
| *[[Richard Hamming]]
| |
| *[[Claude Shannon]]
| |
| *[[David J. C. MacKay]]
| |
| *[[Irving S. Reed]]
| |
| | |
| === Theory ===
| |
| *[[Belief propagation]]
| |
| *[[Graph theory]]
| |
| *[[Hamming code]]
| |
| *[[Linear code]]
| |
| *[[Sparse graph code]]
| |
| *[[Expander code]]
| |
| | |
| === Applications ===
| |
| | |
| *[[G.hn|G.hn/G.9960]] (ITU-T Standard for networking over power lines, phone lines and coaxial cable)
| |
| *[[802.3an]] (10 Giga-bit/s Ethernet over Twisted pair)
| |
| *[[CMMB]](China Multimedia Mobile Broadcasting)
| |
| *[[DVB-S2]] / [[DVB-T2]] / [[DVB-C2]] (Digital video broadcasting, 2nd Generation)
| |
| *[[DMB-T/H]] (Digital video broadcasting)<ref>http://spectrum.ieee.org/consumer-electronics/standards/does-china-have-the-best-digital-television-standard-on-the-planet/2</ref>
| |
| *[[WiMAX]] (IEEE 802.16e standard for microwave communications)
| |
| * [[IEEE 802.11n-2009]] ([[Wi-Fi]] standard)
| |
| | |
| === Other capacity-approaching codes ===
| |
| *[[Turbo code]]s
| |
| *[[Online codes]]
| |
| *[[Fountain codes]]
| |
| *[[LT codes]]
| |
| *[[Raptor codes]]
| |
| *[[Repeat-accumulate code]]s (a class of simple turbo codes)
| |
| *[[Tornado code]]s (LDPC codes designed for [[binary erasure channel|erasure decoding]])
| |
| *[[Polar code (coding theory)|Polar codes]]
| |
| | |
| == References ==
| |
| {{reflist|33em}}
| |
| | |
| == External links ==
| |
| * [http://www.inference.phy.cam.ac.uk/mackay/itila/ The on-line textbook: Information Theory, Inference, and Learning Algorithms], by [[David J.C. MacKay]], discusses LDPC codes in Chapter 47.
| |
| * [http://www.ics.uci.edu/~welling/teaching/ICS279/LPCD.pdf] LDPC Codes: An Introduction
| |
| * [http://www.inference.phy.cam.ac.uk/mackay/CodesFiles.html LDPC codes and performance results]
| |
| * [http://www.sigpromu.org/ldpc/DE/index.php Online density evolution for LDPC codes]
| |
| * [http://bernh.net/media/download/papers/ldpc.pdf LDPC Codes – a brief Tutorial (by Bernhard Leiner, 2005)]
| |
| * [http://www.cambridge.org/gb/knowledge/isbn/item2711886/?site_locale=en_GB Iterative Error Correction: Turbo, Low-Density Parity-Check and Repeat-Accumulate Codes]
| |
| *Source code for encoding, decoding, and simulating LDPC codes is available from a variety of locations:
| |
| ** [http://www.cs.utoronto.ca/~radford/ldpc.software.html Binary LDPC codes in [[C (programming language)|C]]]
| |
| ** [http://freshmeat.net/projects/pycodes/ Binary LDPC codes for [[Python (programming language)|Python]] (core algorithm in C)]
| |
| ** [http://www.kozintsev.net/soft.html LDPC codes over GF(q) in [[MATLAB]]]
| |
| ** [http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ref/fec.ldpcenc.html LDPC encoder] and [http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ref/fec.ldpcdec.html LDPC decoder] in [[MATLAB]]
| |
| | |
| {{CCSDS|state=collapsed}}
| |
| | |
| {{DEFAULTSORT:Low-Density Parity-Check Code}}
| |
| [[Category:Error detection and correction]]
| |
| [[Category:Coding theory]]
| |
| [[Category:Capacity-approaching codes]]
| |