Background
Low Density Parity Check (LDPC) codes are error correcting codes that provide a method of transmitting messages over noisy transmission channels. Although the LDPC technique cannot guarantee ideal transmission, the probability of information loss can be made very small. In fact, LDPC codes are the first to bring the data transmission rate close to the theoretical maximum, e.g., Shannon (Shannon) limit. LDPC techniques use sparse parity check matrices, e.g., matrices that are mostly occupied by zeros and therefore referred to as low density. The sparse matrix is randomly generated subject to a defined sparsity constraint.
LDPC codes can be defined as momentsArray and graph form. The LDPC matrix has a number of rows (M) and columns (N). The matrix may also be represented by the number of "1" s (w) per rowr) And the number of "1" s in each column (w)c) To be defined. For a matrix considered to be of low density, the following conditions should be satisfied: w is ac<<N and wr<<And M. The LDPC matrix may be regular or irregular. The regular LDPC matrix is where w for each columncIs a constant and w per rowr=wcAnd (N/M) is also one of the constants. If the matrix is low density, but the number of "1" s in each row or column is not constant, then such a code is called an irregular LDPC code.
It should also be appreciated that an LDPC code may be graphically defined by its corresponding Tanner graph. Such graphs not only provide a complete representation of the code, but they are helpful in describing the decoding algorithm as explained in more detail below. The tanner graph contains nodes and edges. The nodes are divided into two different groups or types, and the edges connect the two different types of nodes. The two types of nodes in the tanner graph are called variable nodes (v-nodes) and check nodes (c-nodes), or parity nodes. Thus, the tanner graph consists of M check nodes (the number of parity bits), and N variable nodes (the number of bits in the codeword). If there is a "1" in the corresponding element of the LDPC matrix, the check node is connected with the variable node.
The number of information bits can be expressed as (K). Then, a generator matrix (G) can be defined according to the following relationshipK×N):
cN×1=GN×K dK×1Wherein
dK×1a message or data word, and
cN×1a codeword.
It can be seen that codeword cN×1Is generated by multiplying the message by the generator matrix. The subscripts are matrix representations, referring to the number of rows and columns, respectively. Thus, the data words and code words can be represented as a single column matrix of K rows and N rows, respectively.
Parity may be defined as HM×NcN×1=0。
Thus, fig. 1 is a schematic diagram depicting a system 100 including a transmitter and a receiver. For simplicity, only a portion 102 of the transmitter and a portion 110 of the receiver are shown. Referring to fig. 1, the encoder 104 generates a matrix G by applyingN×kData word dN×1Conversion into code words cN×1. The modulator 106 may be configured to then encode the codeword cN×1Modulated onto a carrier such that the codeword can be transmitted wirelessly across channel 108 to a receiver.
In the receive part 110, the demodulator 112 may be configured to remove the carrier from the received signal; however, channel 108 adds channel effects and noise, so that the signal generated by demodulator 112 may have the form: r isN×1=2/σ2(1-2 cN×1)+wN×1Where r is a multi-level signal. Some data bits d are lost during transmission as a result of noise and channel effects. To recover as much data as possible, the decoder 114 may be configured to use a parity check matrix HM×NGenerating and generating raw data dk×1Very close estimated data d'K×1. It should be appreciated that decoder 114 may be a hard decision decoder or a soft decision decoder. Soft decision decoders are more accurate but generally also require more resources.
To describe the operation of the LDPC code, the following example is given:
<math><mrow>
<msub>
<mi>H</mi>
<mrow>
<mn>3</mn>
<mo>×</mo>
<mn>6</mn>
</mrow>
</msub>
<mo>=</mo>
<mfenced open='[' close=']'>
<mtable>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
</mtr>
</mtable>
</mfenced>
</mrow></math>
it can be seen that the exemplary parity-check matrix H is low-density, or sparse. Row 1 of the matrix H defines a 1 st parity check node, or equation. It can be seen that the 1 st parity node will check the received samples r0、r2And r4Remember that r is the multi-level signal generated by the demodulator 12 in the receiver. Checking the received sample r for the 2 nd parity node, i.e., row 2 of H1、r3And r5And 3 rd parity check node check sample r0、r1And r5. In this example, there are 3 parity check nodes and 6 samples. The 1 st and 2 nd parity nodes are considered orthogonal because they involve mutually exclusive groups of samples.
If K is 3 and M is 3, then the following equations hold:
<math><mrow>
<msub>
<mi>H</mi>
<mrow>
<mn>3</mn>
<mo>×</mo>
<mn>6</mn>
</mrow>
</msub>
<msub>
<mi>c</mi>
<mrow>
<mn>6</mn>
<mo>×</mo>
<mn>1</mn>
</mrow>
</msub>
<mo>=</mo>
<mn>0</mn>
<mo>⇔</mo>
<msub>
<mi>H</mi>
<mrow>
<mn>3</mn>
<mo>×</mo>
<mn>6</mn>
</mrow>
</msub>
<mfenced open='[' close=']'>
<mtable>
<mtr>
<mtd>
<msub>
<mi>d</mi>
<mrow>
<mn>3</mn>
<mo>×</mo>
<mn>1</mn>
</mrow>
</msub>
</mtd>
</mtr>
<mtr>
<mtd>
<msub>
<mi>p</mi>
<mrow>
<mn>3</mn>
<mo>×</mo>
<mn>1</mn>
</mrow>
</msub>
</mtd>
</mtr>
</mtable>
</mfenced>
<mo>=</mo>
<mn>0</mn>
<mo>⇔</mo>
<mfenced open='[' close=']'>
<mtable>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
</mtr>
</mtable>
</mfenced>
<mfenced open='[' close=']'>
<mtable>
<mtr>
<mtd>
<msub>
<mi>d</mi>
<mn>0</mn>
</msub>
</mtd>
</mtr>
<mtr>
<mtd>
<msub>
<mi>d</mi>
<mn>1</mn>
</msub>
</mtd>
</mtr>
<mtr>
<mtd>
<msub>
<mi>d</mi>
<mn>2</mn>
</msub>
</mtd>
</mtr>
<mtr>
<mtd>
<msub>
<mi>p</mi>
<mn>0</mn>
</msub>
</mtd>
</mtr>
<mtr>
<mtd>
<msub>
<mi>p</mi>
<mn>1</mn>
</msub>
</mtd>
</mtr>
<mtr>
<mtd>
<msub>
<mi>p</mi>
<mn>2</mn>
</msub>
</mtd>
</mtr>
</mtable>
</mfenced>
<mo>=</mo>
<mn>0</mn>
</mrow></math>
this generates the following equation:
d0+d2+p1=0
d1+p0+p2=0
d 01+d1+p2=0
these equations are simplified to:
p0=d0
p1=d0+d2
p2=d0+d1
thus, for example, if d ═ 0; 1; 0], then, p ═ 0; 0; 1] and c ═ 0; 1; 0; 0; 0; 1].
Fig. 2 is a tanner graph describing the operation of H in the above example. It can be seen that the schematic diagram of fig. 2 contains 3 parity nodes 202, 204, and 206, and 6 variable nodes 208, 210, 214, 216, and 218 corresponding to the bits of c. The parity nodes 202, 204, and 206 are connected to the variable nodes 208, 210, 214, 216, and 218 by edges 220, 222, 224, 226, 228, 230, 232, 234, and 236 as indicated by the entries in H. In other words, each side 220, 222, 224, 226, 228, 230, 232, 234, and 236 should correspond to a "1" in H.
In the LDPC decoder, the operations of the parity check nodes and the variable nodes may be implemented by a processor. In other words, each parity node may be implemented by a parity processor, and each variable node may be implemented by a variable node processor. The LDPC decoder is then an iterative decoder implementing the message passing algorithm defined by H.
Unfortunately, conventional LDPC decoding techniques result in implementation with highly complex, fully parallel decoders, where all messages to and from all check node processors must be computed for each iteration in the decoding process. This results in high complexity, high resource requirements, and high cost.
Therefore, much effort is currently devoted to reducing the complexity of check node message updates while keeping the performance penalty as small as possible. The most common simplification is the min-sum algorithm (MSA), which greatly reduces the complexity of check node updates, but causes 0.3-0.4dB of degradation in performance relative to standard sum-product algorithm (SPA) check node implementations. To correct for this performance degradation, it has also been proposed to correct the MSA using a normalization term and an offset adjustment term. Such a solution does reduce the performance penalty compared to more traditional MSA implementations, but there is still a significant performance penalty. In addition, two-dimensional MSA schemes have been proposed that can further improve MSA performance with increased complexity. Thus, in conventional implementations, there is often a tradeoff between complexity and performance.
Detailed Description
In the following description, certain exemplary parameters, values, and the like are used; however, it should be understood that the embodiments described herein are not necessarily limited by these examples. Therefore, these examples should not be construed as limiting the embodiments in any way. Also, the embodiments of LDPC decoders described herein may be applied to many different types of systems implementing a wide variety of protocols and communication techniques, such as a Binary Phase Shift Keying (BPSK) modulation technique, a Quadrature Phase Shift Keying (QPSK) modulation technique, or a Quadrature Amplitude Modulation (QAM) technique. Thus, unless specifically specified, the embodiments should not be construed as limited to a particular type of system, architecture, protocol, wireless interface, etc.
Check node processor 302 is shown in FIG. 3 for degree n. In each iteration, incoming soft messages { u } are utilizediI 1, 2, n update outgoing soft message λ i1, 2.. multidot.n }. Outgoing soft messages are defined as an algorithm of the ratio of the probability that the corresponding bit is 0 or 1.
For the standard sum-product algorithm, the outgoing message is determined as follows:
<math><mrow>
<msub>
<mi>λ</mi>
<mi>i</mi>
</msub>
<mo>=</mo>
<mn>2</mn>
<mi>tan</mi>
<msup>
<mi>h</mi>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<munderover>
<mi>Π</mi>
<munder>
<mrow>
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>j</mi>
<mo>≠</mo>
<mi>i</mi>
</mrow>
</munder>
<mi>n</mi>
</munderover>
<mi>tanh</mi>
<mfrac>
<msub>
<mi>u</mi>
<mi>j</mi>
</msub>
<mn>2</mn>
</mfrac>
<mo>,</mo>
<mi>i</mi>
<mo>=</mo>
<mn>1,2</mn>
<mo>.</mo>
<mo>.</mo>
<mo>.</mo>
<mi>n</mi>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>1</mn>
<mo>)</mo>
</mrow>
</mrow></math>
the outgoing soft messages are then fed back to the variable node processors for use in generating an output u during the next iterationiPerforming the following steps; however, the variable node-based soft message λ output from a specific nodeiNot returned to that node. Therefore, constrained by j ≠ i in (1) as follows:
<math><mrow>
<munderover>
<mi>Π</mi>
<munder>
<mrow>
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>j</mi>
<mo>≠</mo>
<mi>i</mi>
</mrow>
</munder>
<mi>n</mi>
</munderover>
<mi>tanh</mi>
<mfrac>
<msub>
<mi>u</mi>
<mi>j</mi>
</msub>
<mn>2</mn>
</mfrac>
<mo>,</mo>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
<mo>,</mo>
<mn>2</mn>
<mo>.</mo>
<mo>.</mo>
<mo>.</mo>
<mi>n</mi>
<mo>.</mo>
</mrow></math>
this too can be doneTo describe with the aid of FIG. 4, FIG. 4 is a schematic diagram depicting the operation of parity check node processor 202. First, the LDPC decoder initializes the variable data bits u0, u1, u 2.., u6 of the variable node processors 208, 210, 212, 214, 216, and 218 using r0, r1, r 2.., r 6. Referring to FIG. 4, u0 k-1、u2 k-1And u, and4 k-1are variable messages sent from variable nodes 208, 212, and 216 to parity node processor 202. The parity node processor 202 operates on these messages to compute its message lambdak. E.g. λk(0 → 2) represents the message sent from parity node 202 to variable node 212 in the k-th iteration.
The messages generated by the parity check node processor 202 may be defined using the following equation:
<math><mrow>
<msup>
<mi>λ</mi>
<mi>k</mi>
</msup>
<mrow>
<mo>(</mo>
<mn>0</mn>
<mo>→</mo>
<mn>0</mn>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mn>2</mn>
<mi>tan</mi>
<msup>
<mi>h</mi>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo>[</mo>
<mi>tanh</mi>
<mrow>
<mo>(</mo>
<mfrac>
<msubsup>
<mi>u</mi>
<mn>2</mn>
<mrow>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msubsup>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
<mi>tanh</mi>
<mrow>
<mo>(</mo>
<mfrac>
<msubsup>
<mi>u</mi>
<mn>4</mn>
<mrow>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msubsup>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
<mo>]</mo>
</mrow></math>
<math><mrow>
<msup>
<mi>λ</mi>
<mi>k</mi>
</msup>
<mrow>
<mo>(</mo>
<mn>0</mn>
<mo>→</mo>
<mn>2</mn>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mn>2</mn>
<mi>tan</mi>
<msup>
<mi>h</mi>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo>[</mo>
<mi>tanh</mi>
<mrow>
<mo>(</mo>
<mfrac>
<msubsup>
<mi>u</mi>
<mn>0</mn>
<mrow>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msubsup>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
<mi>tanh</mi>
<mrow>
<mo>(</mo>
<mfrac>
<msubsup>
<mi>u</mi>
<mn>4</mn>
<mrow>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msubsup>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
<mo>]</mo>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>2</mn>
<mo>)</mo>
</mrow>
</mrow></math>
<math><mrow>
<msup>
<mi>λ</mi>
<mi>k</mi>
</msup>
<mrow>
<mo>(</mo>
<mn>0</mn>
<mo>→</mo>
<mn>4</mn>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mn>2</mn>
<mi>tan</mi>
<msup>
<mi>h</mi>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo>[</mo>
<mi>tanh</mi>
<mrow>
<mo>(</mo>
<mfrac>
<msubsup>
<mi>u</mi>
<mn>0</mn>
<mrow>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msubsup>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
<mi>tanh</mi>
<mrow>
<mo>(</mo>
<mfrac>
<msubsup>
<mi>u</mi>
<mn>2</mn>
<mrow>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msubsup>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
<mo>]</mo>
</mrow></math>
thus, the parity node processor 202 may be configured to implement equation (2) above. Soft messages generated by parity nodes, e.g., parity node 202, are then fed back to variable nodes 208, 210, 212, 214, 216, and 218 for use in the next iteration.
For example, FIG. 5 is a schematic diagram depicting the operation of the variable node processor 208. Referring to FIG. 5, the variable node processor 208 receives as input messages from the parity node processors 202 and 206 and generates variable messages to be sent back to the same parity node processors 202 and 206. In the examples of fig. 4 and 5, for a multi-level variable un kHard decisions are made and checked to see if they satisfy the parity check node equations defined above. If there is a match, or if some defined number of iterations is exceeded, the decoder may be stopped.
The variable node processor 208 may be configured to implement the following equation:
<math><mrow>
<msubsup>
<mi>u</mi>
<mn>0</mn>
<mi>k</mi>
</msubsup>
<mo>=</mo>
<msub>
<mi>u</mi>
<mrow>
<mi>ch</mi>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<msup>
<mi>λ</mi>
<mi>k</mi>
</msup>
<mrow>
<mo>(</mo>
<mn>0</mn>
<mo>→</mo>
<mn>0</mn>
<mo>)</mo>
</mrow>
<mo>+</mo>
<msup>
<mi>λ</mi>
<mi>k</mi>
</msup>
<mrow>
<mo>(</mo>
<mn>2</mn>
<mo>→</mo>
<mn>0</mn>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>3</mn>
<mo>)</mo>
</mrow>
</mrow></math>
wherein u isch,0Is a message from the channel that does not change with each iteration.
It will be appreciated that the decoder as described above may be implemented using suitably configured hardware and/or software, and that although separate parity node processors and variable node processors are described, these processors may be implemented using a single processor, such as a digital signal processor, or circuitry, such as an Application Specific Integrated Circuit (ASIC); however, as described above, implementations of LDPC processors like those described with reference to fig. 2-5 can result in a high degree of complexity, stringent memory requirements, and interconnect complexity that can cause bottlenecks. These problems can be exacerbated if multiple data rates are to be achieved. In other words, the practical implementation of such a decoder can be made limited.
Thus, by using the system and method as described above, the resources required to implement a parity node may be reduced, i.e., complexity reduced, while still maintaining high accuracy. In certain embodiments, the complexity is reduced even further by degree reduction techniques. In other words, the number of inputs to the parity node may be reduced, and thus the resources required to implement the parity node may be reduced. It should also be noted that in many parity check node implementations, the sign and absolute value of the outgoing soft message are calculated separately.
Therefore, the LDPC code according to the parity check matrix H of size M × N has M check nodes and N variable nodes. In the decoder, soft messages are propagated and iteratively updated between variable nodes and check nodes until they coincide on a valid codeword. Otherwise, decoding ends with a failure. The update algorithm on the variable nodes involves two types of input messages, i.e. messages from channel observations and messages from check nodes.
Soft messages are defined as logarithms of probability ratios:
from channel observations: <math><mrow>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mi>l</mi>
<mi>n</mi>
<mfrac>
<mrow>
<msup>
<mi>p</mi>
<mn>0</mn>
</msup>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mn>1</mn>
<mo>-</mo>
<msup>
<mi>p</mi>
<mn>0</mn>
</msup>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
<mo>,</mo>
<mi>m</mi>
<mo>∈</mo>
<mrow>
<mrow>
<mo>[</mo>
<mn>1</mn>
<mo>,</mo>
<mo>·</mo>
<mo>·</mo>
<mo>·</mo>
<mo>,</mo>
<mi>N</mi>
<mo>]</mo>
</mrow>
<mo>,</mo>
</mrow>
</mrow></math> and (4)
From the check node: <math><mrow>
<msub>
<mi>λ</mi>
<mi>i</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mi>ln</mi>
<mfrac>
<mrow>
<msubsup>
<mi>p</mi>
<mi>i</mi>
<mi>c</mi>
</msubsup>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mn>1</mn>
<mo>-</mo>
<msubsup>
<mi>p</mi>
<mi>i</mi>
<mi>c</mi>
</msubsup>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
<mo>,</mo>
<mi>m</mi>
<mo>∈</mo>
<mrow>
<mo>[</mo>
<mn>1</mn>
<mo>,</mo>
<mo>·</mo>
<mo>·</mo>
<mo>·</mo>
<mo>,</mo>
<mi>N</mi>
<mo>]</mo>
</mrow>
<mo>,</mo>
<mi>i</mi>
<mo>∈</mo>
<mi>C</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>5</mn>
<mo>)</mo>
</mrow>
</mrow></math>
where m refers to the mth variable node, i.e., the mth bit in the codeword.
L (m) is a soft message from channel observation, p0(m) is a posterior probability that the conditional bit is 0 for channel observation y (m).
(5) C (m) in (a) is a set of check nodes connected to the m-th variable node. p is a radical ofc i(m) is the probability that the mth bit is 0, estimated by check node i in C (m).
For BPSK modulation and with unity gain and noise variance σ2L (m) becomes:
<math><mrow>
<mi>L</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mfrac>
<mrow>
<mn>2</mn>
<mi>y</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
<msup>
<mi>σ</mi>
<mn>2</mn>
</msup>
</mfrac>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>6</mn>
<mo>)</mo>
</mrow>
</mrow></math>
the variable node sends the message ui(m) to the verifying node i, ui(m) is defined in the same manner as in (4):
<math><mrow>
<msub>
<mi>u</mi>
<mi>i</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mi>ln</mi>
<mfrac>
<mrow>
<msubsup>
<mi>p</mi>
<mi>i</mi>
<mi>v</mi>
</msubsup>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mn>1</mn>
<mo>-</mo>
<msubsup>
<mi>p</mi>
<mi>i</mi>
<mi>v</mi>
</msubsup>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
<mo>,</mo>
<mi>m</mi>
<mo>∈</mo>
<mrow>
<mo>[</mo>
<mn>1</mn>
<mo>,</mo>
<mo>·</mo>
<mo>·</mo>
<mo>·</mo>
<mo>,</mo>
<mi>N</mi>
<mo>]</mo>
</mrow>
<mo>,</mo>
<mi>i</mi>
<mo>∈</mo>
<mi>C</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>7</mn>
<mo>)</mo>
</mrow>
</mrow></math>
wherein p isi v(m) is the probability estimated by the variable node that the mth bit is 0.
The update algorithm on a variable node may be defined as:
<math><mrow>
<msub>
<mi>u</mi>
<mi>i</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<munder>
<mi>Σ</mi>
<mrow>
<mi>j</mi>
<mo>∈</mo>
<mi>C</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>\</mo>
<mi>i</mi>
</mrow>
</munder>
<msub>
<mi>λ</mi>
<mi>j</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>8</mn>
<mo>)</mo>
</mrow>
</mrow></math>
where C (m) \\ i represents a subset of C (m) that does not include i.
The outgoing message from the check node to the variable node is a function of all incoming messages from all other variable nodes connected to this check node except the one to which the message was sent, i.e.:
λj(m)=f(uj(k),k∈V(j)\m),j∈[1,…,M],m∈V(j)。 (9)
where V (j) is a set of variable nodes connected to the jth check node.
(9) The standard update algorithm of f is the sum-product algorithm (SPA) as described above, where again:
<math><mrow>
<msub>
<mi>λ</mi>
<mi>j</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mn>2</mn>
<mi>tan</mi>
<msup>
<mi>h</mi>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<munder>
<mi>Π</mi>
<mrow>
<mi>k</mi>
<mo>∈</mo>
<mi>V</mi>
<mrow>
<mo>(</mo>
<mi>j</mi>
<mo>)</mo>
</mrow>
<mo>\</mo>
<mi>m</mi>
</mrow>
</munder>
<mi>tanh</mi>
<mfrac>
<mrow>
<msub>
<mi>u</mi>
<mi>j</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>k</mi>
<mo>)</mo>
</mrow>
</mrow>
<mn>2</mn>
</mfrac>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>10</mn>
<mo>)</mo>
</mrow>
</mrow></math>
this is equivalent to:
<math><mrow>
<msub>
<mi>λ</mi>
<mi>j</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<munder>
<mrow>
<mo>⊕</mo>
<mo></mo>
</mrow>
<mrow>
<mi>k</mi>
<mo>∈</mo>
<mi>V</mi>
<mrow>
<mo>(</mo>
<mi>j</mi>
<mo>)</mo>
</mrow>
<mo>\</mo>
<mi>m</mi>
</mrow>
</munder>
<msub>
<mi>u</mi>
<mi>j</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>k</mi>
<mo>)</mo>
</mrow>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>11</mn>
<mo>)</mo>
</mrow>
</mrow></math>
(11) represents | v (j) | -1 consecutive ⊕ operations, ⊕ is a binary operator defined as:
<math><mrow>
<mi>x</mi>
<mo>⊕</mo>
<mi>y</mi>
<mover>
<mo>=</mo>
<mi>Δ</mi>
</mover>
<mi>ln</mi>
<mfrac>
<mrow>
<mn>1</mn>
<mo>+</mo>
<msup>
<mi>e</mi>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mi>y</mi>
</mrow>
</msup>
</mrow>
<mrow>
<msup>
<mi>e</mi>
<mi>x</mi>
</msup>
<mo>+</mo>
<msup>
<mi>e</mi>
<mi>y</mi>
</msup>
</mrow>
</mfrac>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>12</mn>
<mo>)</mo>
</mrow>
</mrow></math>
for real numbers x and y, the ⊕ operator can be demonstrated to be commutative and associative.
The variable node update algorithm (8) involves only summation. Thus, the decoding complexity comes mainly from check nodes that require a large number of logarithmic and exponential estimates. A simplified form of SPA is the min-sum algorithm (MSA) operating with a simple approximate estimate ⊕:
x⊕y≈sgn(x)sgn(y)min{|x|,|y|}。 (13)
although MSA is simple enough to be implemented efficiently in hardware, some performance is lost compared to SPA. The amount of loss depends on the particular code structure and code rate, typically on the order of 0.3-0.4 dB. Many better improvements in performance, even without loss, compared to SPA have been published in the literature.
Certain embodiments described herein are based on log 2 by base2The SPA is modified instead of the base e log ln in equations (3), (4) and (7), so that (6) will become:
<math><mrow>
<mi>L</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mfrac>
<mrow>
<mn>2</mn>
<mi>y</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<msup>
<mi>σ</mi>
<mn>2</mn>
</msup>
<mi>ln</mi>
<mrow>
<mo>(</mo>
<mn>2</mn>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>14</mn>
<mo>)</mo>
</mrow>
</mrow></math>
and (12) becomes:
<math><mrow>
<mi>x</mi>
<mo>⊕</mo>
<mi>y</mi>
<mo>=</mo>
<msub>
<mi>log</mi>
<mn>2</mn>
</msub>
<mfrac>
<mrow>
<mn>1</mn>
<mo>+</mo>
<msup>
<mn>2</mn>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mi>y</mi>
</mrow>
</msup>
</mrow>
<mrow>
<msup>
<mn>2</mn>
<mi>x</mi>
</msup>
<mo>+</mo>
<msup>
<mn>2</mn>
<mi>y</mi>
</msup>
</mrow>
</mfrac>
<mo>.</mo>
<mo>-</mo>
<mo>-</mo>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mn>15</mn>
<mo>)</mo>
</mrow>
</mrow></math>
all operands and results involved in the decoding algorithm described herein may be rounded to the nearest integer. Thus, equations (14) and (15) become:
<math><mrow>
<mi>L</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
<mo>≈</mo>
<mi>Round</mi>
<mrow>
<mo>(</mo>
<mfrac>
<mrow>
<mn>2</mn>
<mi>y</mi>
<mrow>
<mo>(</mo>
<mi>m</mi>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<msup>
<mi>σ</mi>
<mn>2</mn>
</msup>
<mi>log</mi>
<mrow>
<mo>(</mo>
<mn>2</mn>
<mo>)</mo>
</mrow>
</mrow>
</mfrac>
<mo>)</mo>
</mrow>
<mo>,</mo>
</mrow></math> and (16)
<math><mrow>
<mi>x</mi>
<mo>⊕</mo>
<mi>y</mi>
<mo>≈</mo>
<mi>Round</mi>
<mrow>
<mo>(</mo>
<msub>
<mi>log</mi>
<mn>2</mn>
</msub>
<mfrac>
<mrow>
<mn>1</mn>
<mo>+</mo>
<msup>
<mn>2</mn>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mi>y</mi>
</mrow>
</msup>
</mrow>
<mrow>
<msup>
<mn>2</mn>
<mi>x</mi>
</msup>
<mo>+</mo>
<msup>
<mn>2</mn>
<mi>y</mi>
</msup>
</mrow>
</mfrac>
<mo>)</mo>
</mrow>
<mo>,</mo>
</mrow></math> (17)
Where Round () denotes rounding the operand to the nearest integer.
(16) And the right side of (17) is an approximation, less than 0.5, caused by rounding errors.
Note that for (16), (8), and (17), the entire decoding algorithm uses only integer arithmetic. In particular, the integer powers and integer logarithms of 2 in (17) can be easily implemented using binary hardware circuits. Thus, the complexity of standard SPA implementations can be greatly reduced. The following gives simulation results showing performance loss within 0.1 dB.
And, it can be proved that (17) is completely equivalent to the following equation:
x⊕y≈sign(x)sign(y)[min(|x|,|y|)-ε(|x|,|y|)], (18)
wherein,
comparing (18) and (19) with the MSA in (13), it can be seen that there is only a slight increase in complexity. It should be noted that in a hardware implementation, subtracting 1 is less complex than the normal subtraction, and that testing ≦ 1 and >1 requires only some bit test logic.
If all integers involved in the algorithm are limited to + -Amax=±(2v-1-1), then the algorithm can be implemented directly with a v-bit fixed point circuit, where 1 bit is used for the sign and v-1 bits for the absolute value. In addition, (19) should be modified to:
this is because, when one input is AmaxWhen the real value is [ A ]max,+∞]Inner variance, therefore, the real value of | a-b | is likely to be greater than 1.
Thus, by using the system and method as described above, the resources required to implement the check nodes can be reduced, i.e. the complexity is reduced, while still maintaining high accuracy. In certain embodiments, complexity may be reduced even further by degree reduction techniques. In other words, the number of inputs to the check nodes can be reduced, thereby reducing the resources required to implement the check nodes. It should also be noted that in many check node implementations, the sign and absolute value of the outgoing soft message are calculated separately.
Fig. 6 and 7 are graphs depicting simulated Frame Error Rate (FER) and Bit Error Rate (BER) in the AWGN channel for a floating point SPA, a floating point MSA, and the methods described herein using different quantization bits, respectively. The LDPC code is an irregular (1152, 576)1/2 rate LDPC code constructed according to 802.16eD 12. The decoder uses layered decoding with a maximum number of iterations of 30. The curve marked "SPA 2" indicatesIs a proposed algorithm in which all operations are integer operations. The curve labeled ` SPA2 unlimited ` refers to AmaxCase ∞. In computer simulations, it is practically limited by the maximum integer of the system. This curve reflects the effect of rounding errors in (17) and (18). It can be shown that the performance penalty due to rounding errors is less than 0.1dB, limiting the integer to 5 bits (a)max15) causes little further loss.
It should be noted that we are comparing floating point SPA and floating point MSA. If both algorithms are implemented directly with fixed point circuits, they require approximately 8 bits to maintain the same performance.
Fig. 8 is a flowchart describing an exemplary method of performing LDPC decoding as described above. First, in step 802, a signal may be received. In step 804, the signal may be demodulated. In step 806, a variable message may be generated from the demodulated signal as an estimate of the data bits. In step 808, the variable message may be operated on to approximate the value of the original signal. As mentioned above, this approximation is based on a sum-product algorithm (SPA) that uses base 2 logarithmic operations and rounding the resulting values. This approximation can be done according to equations 16 and 17. In step 810, the results of step 808 may be evaluated to determine if the variable message matches the parity check node equation. If there is a match, or if a certain number of iterations is exceeded, the LDPC decoder may be stopped.
While certain embodiments of the present invention have been described, it should be understood that the described embodiments are by way of example only. Therefore, the present invention should not be limited according to the embodiments. Rather, the scope of the invention described herein is limited only by the claims which follow in conjunction with the above description and accompanying drawings.