US20140229788A1 - Ldpc design for high rate, high parallelism, and low error floor - Google Patents
Ldpc design for high rate, high parallelism, and low error floor Download PDFInfo
- Publication number
- US20140229788A1 US20140229788A1 US14/179,871 US201414179871A US2014229788A1 US 20140229788 A1 US20140229788 A1 US 20140229788A1 US 201414179871 A US201414179871 A US 201414179871A US 2014229788 A1 US2014229788 A1 US 2014229788A1
- Authority
- US
- United States
- Prior art keywords
- base
- nodes
- punctured
- ldpc code
- bits
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1105—Decoding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/033—Theoretical methods to calculate these checking codes
- H03M13/036—Heuristic code construction methods, i.e. code construction or code search based on using trial-and-error
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1105—Decoding
- H03M13/1131—Scheduling of bit node or check node processing
- H03M13/1137—Partly parallel processing, i.e. sub-blocks or sub-groups of nodes being processed in parallel
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/116—Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/116—Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
- H03M13/1168—Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices wherein the sub-matrices have column and row weights greater than one, e.g. multi-diagonal sub-matrices
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/118—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/118—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
- H03M13/1185—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/118—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
- H03M13/1185—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal
- H03M13/1188—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal wherein in the part with the double-diagonal at least one column has an odd column weight equal or greater than three
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/61—Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
- H03M13/611—Specific encoding aspects, e.g. encoding by means of decoding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/63—Joint error correction and other techniques
- H03M13/635—Error control coding in combination with rate matching
- H03M13/6362—Error control coding in combination with rate matching by puncturing
Definitions
- the present embodiments relate generally to communications and data storage systems, and specifically to communications and data storage systems that use LDPC codes.
- LDPC codes are a particular type of error correcting codes which use an iterative coding system.
- LDPC codes can be represented by bipartite graphs (often referred to as “Tanner graphs”), wherein a set of variable nodes corresponds to bits of a codeword, and a set of check nodes correspond to a set of parity-check constraints that define the code.
- a variable node and a check node are considered “neighbors” if they are connected by an edge in the graph.
- a bit sequence having a one-to-one association with the variable node sequence is a valid codeword if and only if, for each check node, the bits associated with all neighboring variable nodes sum to zero modulo two (i.e., they include an even number of 1's).
- FIG. 1A shows a bipartite graph 100 representing an exemplary LDPC code.
- the bipartite graph 100 includes a set of 5 variable nodes 110 (represented by circles) connected to 4 check nodes 120 (represented by squares). Edges in the graph 100 connect variable nodes 110 to the check nodes 120 .
- FIG. 1B shows a matrix representation 150 of the bipartite graph 100 .
- FIG. 2 graphically illustrates the effect of making three copies of the graph of FIG.
- a received LDPC codeword can be decoded to produce a reconstructed version of the original codeword.
- decoding can be used to recover the original data unit that was encoded.
- LDPC decoder(s) generally operate by exchanging messages within the bipartite graph 100 , along the edges, and updating these messages by performing computations at the nodes based on the incoming messages. For example, each variable node 110 in the graph 100 may initially be provided with a “soft bit” (e.g., representing the received bit of the codeword) that indicates an estimate of the associated bit's value as determined by observations from the communications channel.
- the LDPC decoders may update messages by iteratively reading them, or some portion thereof, from memory and writing an updated message, or some portion thereof, back to, memory.
- the update operations are typically based on the parity check constraints of the corresponding LDPC code.
- messages on like edges are often processed in parallel.
- LDPC codes designed for high speed applications often use quasi-cyclic constructions with large lifting factors and relatively small base graphs to support high parallelism in encoding and decoding operations.
- LDPC codes with higher code rates tend to have relatively fewer parity checks. If the number of base parity checks is smaller than the degree of a variable node (e.g., the number of edges connected to a variable node), then, in the base graph, that variable node is connected to at least one of the base parity checks by two or more edges (e.g., the variable node may have a “double edge”).
- Having a based variable node and a base check node connected by two or more edges is generally undesirable for parallel hardware implementation purposes.
- double edges may result in multiple concurrent read and write operations to the same memory locations, which in turn may create data coherency problems.
- Pipelining of parallel message updates can be adversely affected by the presence of double edges.
- a device and method of operation are disclosed that may aid in the encoding and/or decoding of low density parity check (LDPC) codewords.
- LDPC low density parity check
- an encoder may receive a set of information bits and perform an LDPC encoding operation on the information bits to produce a codeword.
- the device may then puncture a set of lifted codeword bits corresponding to one or more base variable nodes based on a lifted LDPC code used for the LDPC encoding operation, wherein the punctured bits correspond with one or more punctured base variable nodes, respectively, of the base LDPC graph.
- punctured variable nodes in the graphical description of the code can be eliminated from the description by a check node combining process operating on the lifted parity check matrix. Therefore, at least one of the one or more punctured base nodes is understood to eliminate multiple edges between node pairs of the base graph for the lifted LDPC code when the elimination of the punctured variable node results in multiple edges.
- the one or more punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code.
- at least one of the punctured nodes may be a highest-degree variable node of the LDPC code.
- the high degree of the node is often desirable for enhancing the performance of the code.
- the puncturing allows higher variable node degree while avoiding double edges in the base graph. The presence of the punctured variable node in the graph effectively increases the number of check nodes that would otherwise be present in a base graph of a code of the same size and rate.
- At least one of the punctured nodes may be a degree two variable node used to split a check node that would otherwise be connected to a variable node of the LDPC code by two or more edges.
- a punctured degree two node can be eliminated from the description by adding the two parity checks to which it is connected.
- the at least one punctured base degree two variable node may thus be used to eliminate double edges in the base LDPC graph.
- a high degree punctured node may be eliminated from a parity check matrix representation by an elimination process summing constraint nodes to effectively reduce the degree of the variable node to one.
- a degree one punctured node can be eliminated from the graph along with its neighboring check node without altering the code. Such an elimination process is likely to introduce double or multiple edges into the representation which is undesirable for parallel implementation of decoding.
- the present embodiments may reduce the complexity of the hardware that performs LDPC decoding operations in parallel, thereby increasing the processing efficiency of LDPC decoders that implement lifted LDPC codes. This further simplifies read and/or write operations performed in memory, and ensures that the read and write operations are not performed out of order. By allowing larger variable node degrees, while avoiding double edges, the present embodiments may also improve the error correcting performance of the LDPC coding system.
- FIGS. 1A-1B show graphical and matrix representations of an exemplary LDPC code
- FIG. 2 graphically illustrates the effect of making three copies of the graph of FIG. 1A ;
- FIG. 3 shows a communications system in accordance with some embodiments
- FIG. 4 is a block diagram of a communications device in accordance with some embodiments.
- FIG. 5 is an illustrative flow chart depicting an LDPC encoding operation in accordance with some embodiments
- FIG. 6 is an illustrative flow chart depicting an LDPC decoding operation in accordance with some embodiments
- FIG. 10 is a block diagram of a communications device in accordance with some embodiments.
- circuit elements or software blocks may be shown as buses or as single signal lines.
- Each of the buses may alternatively be a single signal line, and each of the single signal lines may alternatively be buses, and a single line or bus might represent any one or more of a myriad of physical or logical mechanisms for communication between components.
- the present embodiments are not to be construed as limited to specific examples described herein but rather to include within their scope all embodiments defined by the appended claims.
- FIG. 3 shows a communications system 300 in accordance with some embodiments.
- a transmitter 310 transmits a signal onto a channel 320
- a receiver 330 receives the signal from the channel 320 .
- the transmitter 310 and receiver 330 may be, for example, computers, switches, routers, hubs, gateways, and/or similar devices.
- the channel 320 is wireless.
- the channel 320 is a wired link (e.g., a coaxial cable or other physical connection).
- Imperfections of various components in the communications system 300 may become sources of signal impairment, and thus cause signal degradation.
- imperfections in the channel 320 may introduce channel distortion, which may include linear distortion, multi-path effects, and/or Additive White Gaussian Noise (AWGN).
- the transmitter 310 and the receiver 330 may include LDPC encoders and decoders. Specifically, the transmitter 310 may perform LDPC encoding on outgoing data to produce a codeword that can be subsequently decoded by the receiver 330 (e.g., through an LDPC decoding operation) to recover the original data. For some embodiments, the transmitter 310 may transmit LDPC-encoded codewords with one or more “punctured” bits, for example, based on an LDPC code with one or more punctured variable nodes.
- Lifting enables LDPC codes to be implemented using parallel encoding and/or decoding implementations while also reducing the complexity typically associated with large LDPC codes. More specifically, lifting is a technique for generating a relatively large LDPC code from multiple copies of a smaller base code. For example, a lifted LDPC code may be generated by producing a number (Z) of parallel copies of the base graph and then interconnecting the parallel copies through permutations of edge clusters of each copy of the base graph.
- Z number
- a more detailed discussion of lifted LDPC codes may be found, for example, in the book titled, “Modern Coding Theory,” published Mar. 17, 2008, by Tom Richardson and Ruediger Urbanke, which is hereby incorporated by reference in its entirety.
- an LDPC decoder may utilize Z processing elements to perform parity check or variable node operations on all Z edges of a lifted graph concurrently.
- each parity check operation may involve reading a corresponding soft bit value from memory, combining the soft bit value with other soft bit values associated with the check node and writing a soft bit back to memory that results from the check node operation.
- Double edges in the base graph may trigger parallel reading of the same soft bit value, in a memory location, twice during a single parallel parity check update. Additional circuitry may thus be needed to combine the soft bit values that are written back to memory, so as to properly incorporate both updates. Eliminating double edges in the base graph helps to avoid this extra complexity.
- the puncturing may reduce the complexity of the hardware that performs parallel check node or variable node operations, thereby increasing the parallel processing efficiency of a corresponding LDPC decoder. This further simplifies read and/or write operations performed in memory, and ensures that the read and write operations are not performed out of order.
- Puncturing is the act of removing bits from a codeword to yield a shorter codeword.
- Puncturing a variable node in an LDPC code creates a shortened code (e.g. due to the removal of a bit), while also effectively removing a check node.
- Puncturing the variable node removes the associated bit from the code and effectively removes its single neighboring check node from the graph.
- the number of check nodes in the graph is reduced by one. If the base transmitted block length is n ⁇ p, where p is the number of punctured columns, and the number of base parity checks is m, then the rate is (n ⁇ m)/(n ⁇ p). The binary information block size is (n ⁇ m)*Z, and the transmitted block size is (n ⁇ p)*Z. Note that if we increase n and p by 1 we may increase m by 1 and leave the rate and block size unchanged.
- a punctured degree-two variable node effectively merges its two neighboring check nodes into a single check node.
- the punctured degree two variable node effectively indicates that its two neighboring check nodes have, absent the degree two node, the same parity.
- punctured degree-two variable nodes may be used to “split” check nodes, thereby appearing to increase the total number of check nodes. This mechanism may therefore be used to remove multiple edges from an LDPC code.
- a variable node is typically connected to at least one check node by two or more edges if the degree of the variable node is greater than the total number of check nodes (N) in the base graph.
- N total number of check nodes
- Puncturing a high degree base variable node of the LDPC code can also increase the number of check nodes.
- high degree check nodes can be desirable in high performing LDPC design.
- the highest degree variable node may correspond to a variable node having a degree equal to (or one less than) the total number of check nodes in the base graph.
- Such a high degree variable node can evidently be present in a base graph without any double edges.
- a punctured variable node is treated as “erased” at decoding.
- high degree punctured variable nodes in the graph may improve the performance of the code. It is known that punctured nodes in a graph can improve the so-called iterative threshold of the code structure. In standard irregular LDPC designs (i.e., without punctured variable nodes), thresholds can be improved by increasing the average degree in the bipartite graph, and thus increasing the degrees of the variable and check nodes. With punctured variable nodes, the same effect may be achieved with lower average degree, thereby reducing the complexity of the LDPC code. Furthermore, LDPC code structures having lower average degrees may perform better on smaller graphs. Thus, puncturing high-degree variable nodes may both increase the number of check nodes (thus allowing higher degrees) and improve the performance of codes with limited maximum variable node degrees.
- FIG. 4 is a block diagram of a communications device 400 in accordance with some embodiments.
- the communications device 400 includes an encoder 410 , a decoder 420 , and a transceiver 430 , which transmits and/or receives LDPC-encoded codewords via a communications channel.
- the encoder 410 includes a memory 412 , and an LDPC encoder 414 .
- the memory 412 may be used to store data (i.e., information bits) to be encoded by the LDPC encoder 414 .
- the LDPC encoder 414 processes the information bits stored in the memory 412 by generating codewords, based on an LDPC code, to be transmitted to another device.
- the LDPC code may be a lifted LDPC code.
- the base LDPC code may include one or more punctured nodes.
- the LDPC encoder 414 may thus puncture one or more bits of the codeword which correspond with respective punctured nodes of the base LDPC code. These punctured codeword bits are not transmitted by the transceiver 430 .
- the punctured nodes may include a base variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code.
- at least one of the punctured nodes may be a highest-degree variable node of the LDPC code.
- At least one of the punctured nodes may be used to split a check node that is connected to a variable node of the LDPC code by two or more edges.
- Such a punctured node may be used to eliminate double edges in the base graph for the lifted LDPC code.
- the decoder 420 includes a memory 422 and an LDPC decoder 424 .
- the memory 422 stores codewords, received via the transceiver 430 , to be decoded by the LDPC decoder 424 .
- the LDPC decoder 424 processes the codewords stored in the memory 424 by iteratively performing parity check operations, using an LDPC code, and attempting correcting any bits that may have been received in error.
- the LDPC code may be a lifted LDPC code.
- the received codeword may include one or more puncture bits as determined, for example, based on a set of punctured nodes of the corresponding LDPC code. As described above, with reference to FIG.
- the punctured nodes may be determined based on the degrees of the variable nodes of the LDPC code.
- the LDPC decoder 424 may thus treat these punctured nodes as erased for purposes of decoding. For example, the LDPC decoder 424 may set the log-likelihood ratios (LLRs) of the punctured nodes to zero at initialization.
- LLRs log-likelihood ratios
- the LDPC decoder 424 may include a plurality of processing elements to perform the parity check or variable node operations in parallel. For example, when processing a codeword with lifting size Z, the LDPC decoder 424 may utilize a number (Z) of processing elements to perform parity check operations on all Z edges of a lifted graph, concurrently. Specifically, each parity check operation may involve reading a corresponding soft bit value from memory 422 , combining the soft bit value with other soft bit values associated with the check node and writing a soft bit back to memory 422 that results from the check node operation.
- a double edge in a base LDPC code may trigger parallel reading of the same soft bit value memory location twice during a single parallel parity check update. Thus, additional circuitry is typically needed to combine the soft bit values that are written back to memory, so as to properly incorporate both updates. However, eliminating double edges in the LDPC code, for example, as described above with respect to FIG. 3 , helps to avoid this extra complexity.
- FIG. 5 is an illustrative flow chart depicting an LDPC encoding operation 500 in accordance with some embodiments.
- the encoder 410 first receives a set of information bits to be encoded ( 510 ).
- the information bits may correspond to data intended to be transmitted to another device (e.g., a receiving device) over a communications channel or network.
- the information bits may be received from a central processing unit (CPU) and stored in memory 412 .
- CPU central processing unit
- the encoder 410 may then perform an LDPC encoding operation on the information bits to produce an LDPC codeword ( 520 ).
- the LDPC encoder 414 may encode the information bits into LDPC codewords based on an LDPC code that is shared by the encoder 410 and a corresponding decoder (e.g., of the receiving device).
- Each codeword may include the original information bits, or a portion thereof, as well as a set of parity bits which may be used (e.g., by the decoder) to perform parity check operations on and/or recover the original information bits.
- the encoder 410 may further puncture one or more bits of the LDPC codeword based on base punctured variable nodes of the LDPC code ( 530 ).
- the one or more punctured codeword bits may correspond with one or more base variable punctured nodes, respectively, of the base LDPC code.
- at least some of the punctured nodes are provided to eliminate multiple edges between node pairs in the base graph of the lifted LDPC code.
- the punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code.
- at least one of the punctured nodes may be a degree 2 variable node.
- the degree 2 variable node may be used to split a check node that would otherwise be connected to another variable node of the LDPC code by two or more edges. For some embodiments both may occur, specifically, both a high degree punctured variable node and a degree two punctured node may occur in the base graph.
- the LDPC code may be a lifted LDPC code. Still further, the LDPC code may be based on a quasi-cycling lifting, wherein the permutations of edge clusters are cyclic permutations.
- FIG. 6 is an illustrative flow chart depicting an LDPC decoding operation 600 in accordance with some embodiments.
- the decoder 420 first receives an LDPC codeword to be decoded ( 610 ).
- the LDPC codeword may be received from a transmitting device, for example, in the form of a quadrature amplitude modulated (QAM) data signal. Accordingly, the LDPC codeword may correspond with a subset of labeling bits of the de-mapped QAM data signal.
- QAM quadrature amplitude modulated
- the decoder 420 may identify one or more punctured bits of the LDPC codeword based on base punctured nodes of the LDPC code ( 620 ).
- the one or more punctured codeword bits may correspond with one or more base punctured nodes, respectively, of the LDPC code.
- the base punctured nodes are provided to eliminate multiple edges between node pairs in the base graph of the lifted LDPC code.
- the punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code.
- at least one of the punctured nodes may be a degree 2 variable node.
- the degree 2 variable node may be used to split a check node that would otherwise be connected to another variable node of the LDPC code by two or more edges.
- the LDPC code may be a lifted LDPC code (e.g., based on a quasi-cyclic lifting).
- the decoder 420 may then perform an LDPC decoding operation on the received codeword to recover the original information bits ( 630 ).
- the LDPC decoder 424 may process the codeword by iteratively performing parity check operations, using the LDPC code, and attempting to correct any bits that may have been received in error.
- the LDPC decoder 424 may treat the punctured codeword bits as erased during the decoding operation, for example, by setting the LLRs of the punctured nodes to zero at initialization.
- each of the LDPC codes may be viewed as a two dimensional binary array of size Z ⁇ n, where n is the base (transmission) block length.
- k is a factor of 360, and k bits may be taken at a time columnwise, thus generating 360/k dimensions or 180/k symbols per column. It should thus be noted that k is a factor of 60 for the set k ⁇ 1, 2, 3, 4, 5, 6 ⁇ , in the cases of interest.
- FIGS. 7 , 8 , and 9 show exemplary parity check matrices 700 , 800 , and 900 , respectively, in accordance with some embodiments.
- the top row indexes columns of H.
- the second row indicates information (1) and parity (0) columns.
- the third row indicates transmitted columns (1) and punctured columns (0).
- the parity check matrix 700 has a punctured degree two variable node (index 0). Such a node may split a single parity check into two. This ensures that the base matrix has no double edges, and facilitates some of the embodiments described herein.
- An equivalent code representation can be constructed by merging the two parity checks and eliminating the punctured degree 2 variable node. Moreover, such an equivalent representation shall have double or multiple edges in the base graph.
- FIG. 10 is a block diagram of a communications device 1000 in accordance with some embodiments.
- the communications device 1000 includes a transceiver 1010 , a processor 1020 , and memory 1030 .
- the transceiver 1010 may be used for communicating data to and/or from the communications device 1000 .
- the transceiver 1010 may receive and/or transmit information bits between the communications device 1000 and a CPU.
- the encoder interface 1010 may also output and/or receive LDPC codewords between the communications device 1000 and another communications device in a network.
- Memory 1030 may include a data store 1032 that may be used as a local cache to store the received information bits and/or codewords. Furthermore, memory 1030 may also include a non-transitory computer-readable storage medium (e.g., one or more nonvolatile memory elements, such as EPROM, EEPROM, Flash memory, a hard drive, etc.) that can store the following software modules:
- a non-transitory computer-readable storage medium e.g., one or more nonvolatile memory elements, such as EPROM, EEPROM, Flash memory, a hard drive, etc.
- the processor 1020 which is coupled between the encoder interface 1010 and the memory 1030 , may be any suitable processor capable of executing scripts of instructions of one or more software programs stored in the decoder 1000 (e.g., within memory 1030 ).
- the processor 1020 may execute the LDPC encoding module 1034 and/or the LDPC decoding module 1036 .
- the LDPC encoding module 1034 may be executed by the processor 1020 to encode the information bits, using the LDPC code, to produce a codeword.
- the processor 1020 in executing the LDPC encoding module 1034 , may perform an LDPC encoding operation on the information bits based on an LDPC code that is shared by the LDPC encoding module 1034 and a decoding module of a corresponding receive device.
- Each codeword may include the original information bits as well as a set of parity bits which may be used to perform parity checks on and/or recover the original information bits.
- the LDPC code may be a lifted LDPC code (e.g., based on a quasi-cyclic lifting).
- the processor 1020 in executing the LDPC encoding module 1034 , may further puncture one or more bits of the codeword based on the corresponding LDPC code.
- the one or more punctured codeword bits may correspond with one or more punctured nodes, respectively, of the LDPC code.
- the punctured nodes are provided to eliminate multiple edges between node pairs in the base graph for the lifted LDPC code.
- the punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code.
- at least one of the punctured nodes may be a degree 2 variable node (e.g., used to split a check node that would otherwise be connected to another variable node of the LDPC code by two or more edges).
- the LDPC decoding module 1036 may be executed by the processor 1020 to decode LDPC codewords using the LDPC code.
- the processor 1020 in executing the LDPC decoding module 1036 , may first identify one or more punctured bits of the received codeword based on the LDPC code. The processor 1020 may then perform an LDPC decoding operation on the received codeword, while treating the punctured codeword bits as erased.
- the LDPC decoding module 1036 as executed by the processor 1020 , may set the LLRs of the punctured nodes to zero at initialization.
- the LDPC code may be a lifted LDPC code (e.g., based on a quasi-cyclic lifting).
- the punctured codeword bits may correspond with respective punctured nodes of the LDPC code, wherein at least some of the punctured nodes are provided to eliminate multiple edges between node pairs in the base graph for the lifted LDPC code.
- the punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code.
- at least one of the punctured nodes may be a degree 2 variable node (e.g., used to split a check node that would otherwise be connected to another variable node of the LDPC code by two or more edges).
Landscapes
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Error Detection And Correction (AREA)
Abstract
A method of data encoding is disclosed. An encoder receives a set of information bits and performs a lifted LDPC encoding operation on the information bits to produce a codeword. The encoder then punctures all lifted bits of the codeword that correspond to one or more punctured base bits of a base LDPC code used for the LDPC encoding operation. The base LDPC code has no multiple edges, and the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code. For some embodiments, the one or more punctured base nodes correspond to one or more degree 2 variable nodes.
Description
- This application claims priority under 35 U.S.C. §119(e) of the co-pending and commonly-owned U.S. Provisional Patent Application No. 61/764,476, titled “LDPC Design for High Rate, High Parallelism, Low Error Floor, and Simple Encoding,” filed Feb. 13, 2013, which is hereby incorporated by reference in its entirety.
- The present embodiments relate generally to communications and data storage systems, and specifically to communications and data storage systems that use LDPC codes.
- Many communications systems use error-correcting codes. Specifically, error correcting codes compensate for the intrinsic unreliability of information transfer in these systems by introducing redundancy into the data stream. Low density parity check (LDPC) codes are a particular type of error correcting codes which use an iterative coding system. LDPC codes can be represented by bipartite graphs (often referred to as “Tanner graphs”), wherein a set of variable nodes corresponds to bits of a codeword, and a set of check nodes correspond to a set of parity-check constraints that define the code. A variable node and a check node are considered “neighbors” if they are connected by an edge in the graph. A bit sequence having a one-to-one association with the variable node sequence is a valid codeword if and only if, for each check node, the bits associated with all neighboring variable nodes sum to zero modulo two (i.e., they include an even number of 1's).
- For example,
FIG. 1A shows abipartite graph 100 representing an exemplary LDPC code. Thebipartite graph 100 includes a set of 5 variable nodes 110 (represented by circles) connected to 4 check nodes 120 (represented by squares). Edges in thegraph 100 connectvariable nodes 110 to thecheck nodes 120.FIG. 1B shows amatrix representation 150 of thebipartite graph 100. Thematrix representation 150 includes a parity check matrix H and a codeword vector x, where x1-x5 represent bits of the codeword x. More specifically, the codeword vector x represents a valid codeword if and only if Hx=0.FIG. 2 graphically illustrates the effect of making three copies of the graph ofFIG. 1A , for example, as described in commonly owned U.S. Pat. No. 7,552,097. Three copies may be interconnected by permuting like edges among the copies. If the permutations are restricted to cyclic permutations, then the resulting graph corresponds to a quasi-cyclic LDPC with lifting Z=3. The original graph from which three copies were made is referred to herein as the base graph. - A received LDPC codeword can be decoded to produce a reconstructed version of the original codeword. In the absence of errors, or in the case of correctable errors, decoding can be used to recover the original data unit that was encoded. LDPC decoder(s) generally operate by exchanging messages within the
bipartite graph 100, along the edges, and updating these messages by performing computations at the nodes based on the incoming messages. For example, eachvariable node 110 in thegraph 100 may initially be provided with a “soft bit” (e.g., representing the received bit of the codeword) that indicates an estimate of the associated bit's value as determined by observations from the communications channel. Using these soft bits the LDPC decoders may update messages by iteratively reading them, or some portion thereof, from memory and writing an updated message, or some portion thereof, back to, memory. The update operations are typically based on the parity check constraints of the corresponding LDPC code. In implementations for lifted LDPC codes, messages on like edges are often processed in parallel. - LDPC codes designed for high speed applications often use quasi-cyclic constructions with large lifting factors and relatively small base graphs to support high parallelism in encoding and decoding operations. LDPC codes with higher code rates (e.g., the ratio of the message length K to the codeword length N) tend to have relatively fewer parity checks. If the number of base parity checks is smaller than the degree of a variable node (e.g., the number of edges connected to a variable node), then, in the base graph, that variable node is connected to at least one of the base parity checks by two or more edges (e.g., the variable node may have a “double edge”). Having a based variable node and a base check node connected by two or more edges is generally undesirable for parallel hardware implementation purposes. For example, such double edges may result in multiple concurrent read and write operations to the same memory locations, which in turn may create data coherency problems. Pipelining of parallel message updates can be adversely affected by the presence of double edges.
- This Summary is provided to introduce in a simplified form a selection of concepts that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to limit the scope of the claimed subject matter.
- A device and method of operation are disclosed that may aid in the encoding and/or decoding of low density parity check (LDPC) codewords. It is noted that the addition of a punctured variable node (also known as a state variable node) into the base graph design can effectively increase the number of checks in the graph by one without changing the rate parameters (k and n) of the code. For some embodiments, an encoder may receive a set of information bits and perform an LDPC encoding operation on the information bits to produce a codeword. The device may then puncture a set of lifted codeword bits corresponding to one or more base variable nodes based on a lifted LDPC code used for the LDPC encoding operation, wherein the punctured bits correspond with one or more punctured base variable nodes, respectively, of the base LDPC graph. It is understood that punctured variable nodes in the graphical description of the code can be eliminated from the description by a check node combining process operating on the lifted parity check matrix. Therefore, at least one of the one or more punctured base nodes is understood to eliminate multiple edges between node pairs of the base graph for the lifted LDPC code when the elimination of the punctured variable node results in multiple edges.
- For some embodiments, the one or more punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code. For example, at least one of the punctured nodes may be a highest-degree variable node of the LDPC code. In such an embodiment, the high degree of the node is often desirable for enhancing the performance of the code. For example, the puncturing allows higher variable node degree while avoiding double edges in the base graph. The presence of the punctured variable node in the graph effectively increases the number of check nodes that would otherwise be present in a base graph of a code of the same size and rate. For other embodiments, at least one of the punctured nodes may be a degree two variable node used to split a check node that would otherwise be connected to a variable node of the LDPC code by two or more edges. A punctured degree two node can be eliminated from the description by adding the two parity checks to which it is connected. The at least one punctured base degree two variable node may thus be used to eliminate double edges in the base LDPC graph. Similarly, a high degree punctured node may be eliminated from a parity check matrix representation by an elimination process summing constraint nodes to effectively reduce the degree of the variable node to one. A degree one punctured node can be eliminated from the graph along with its neighboring check node without altering the code. Such an elimination process is likely to introduce double or multiple edges into the representation which is undesirable for parallel implementation of decoding.
- By eliminating or reducing double (or multiple) edges from the base LDPC graph, the present embodiments may reduce the complexity of the hardware that performs LDPC decoding operations in parallel, thereby increasing the processing efficiency of LDPC decoders that implement lifted LDPC codes. This further simplifies read and/or write operations performed in memory, and ensures that the read and write operations are not performed out of order. By allowing larger variable node degrees, while avoiding double edges, the present embodiments may also improve the error correcting performance of the LDPC coding system.
- The present embodiments are illustrated by way of example and are not intended to be limited by the figures of the accompanying drawings, where:
-
FIGS. 1A-1B show graphical and matrix representations of an exemplary LDPC code; -
FIG. 2 graphically illustrates the effect of making three copies of the graph ofFIG. 1A ; -
FIG. 3 shows a communications system in accordance with some embodiments; -
FIG. 4 is a block diagram of a communications device in accordance with some embodiments; -
FIG. 5 is an illustrative flow chart depicting an LDPC encoding operation in accordance with some embodiments; -
FIG. 6 is an illustrative flow chart depicting an LDPC decoding operation in accordance with some embodiments; -
FIG. 7 shows an exemplary parity check matrix associated with an LDPC code with rate r=27/30; -
FIG. 8 shows an exemplary parity check matrix associated with an LDPC code with rate r=13/15; -
FIG. 9 shows an exemplary parity check matrix associated with an LDPC code with rate r=21/28; and -
FIG. 10 is a block diagram of a communications device in accordance with some embodiments. - In the following description, numerous specific details are set forth such as examples of specific components, circuits, and processes to provide a thorough understanding of the present disclosure. The term “coupled” as used herein means connected directly to or connected through one or more intervening components or circuits. Also, in the following description and for purposes of explanation, specific nomenclature is set forth to provide a thorough understanding of the present embodiments. However, it will be apparent to one skilled in the art that these specific details may not be required to practice the present embodiments. In other instances, well-known circuits and devices are shown in block diagram form to avoid obscuring the present disclosure. Any of the signals provided over various buses described herein may be time-multiplexed with other signals and provided over one or more common buses. Additionally, the interconnection between circuit elements or software blocks may be shown as buses or as single signal lines. Each of the buses may alternatively be a single signal line, and each of the single signal lines may alternatively be buses, and a single line or bus might represent any one or more of a myriad of physical or logical mechanisms for communication between components. The present embodiments are not to be construed as limited to specific examples described herein but rather to include within their scope all embodiments defined by the appended claims.
-
FIG. 3 shows acommunications system 300 in accordance with some embodiments. Atransmitter 310 transmits a signal onto achannel 320, and areceiver 330 receives the signal from thechannel 320. Thetransmitter 310 andreceiver 330 may be, for example, computers, switches, routers, hubs, gateways, and/or similar devices. In some embodiments, thechannel 320 is wireless. In other embodiments, thechannel 320 is a wired link (e.g., a coaxial cable or other physical connection). - Imperfections of various components in the
communications system 300 may become sources of signal impairment, and thus cause signal degradation. For example, imperfections in thechannel 320 may introduce channel distortion, which may include linear distortion, multi-path effects, and/or Additive White Gaussian Noise (AWGN). To combat potential signal degradation, thetransmitter 310 and thereceiver 330 may include LDPC encoders and decoders. Specifically, thetransmitter 310 may perform LDPC encoding on outgoing data to produce a codeword that can be subsequently decoded by the receiver 330 (e.g., through an LDPC decoding operation) to recover the original data. For some embodiments, thetransmitter 310 may transmit LDPC-encoded codewords with one or more “punctured” bits, for example, based on an LDPC code with one or more punctured variable nodes. - “Lifting” enables LDPC codes to be implemented using parallel encoding and/or decoding implementations while also reducing the complexity typically associated with large LDPC codes. More specifically, lifting is a technique for generating a relatively large LDPC code from multiple copies of a smaller base code. For example, a lifted LDPC code may be generated by producing a number (Z) of parallel copies of the base graph and then interconnecting the parallel copies through permutations of edge clusters of each copy of the base graph. A more detailed discussion of lifted LDPC codes may be found, for example, in the book titled, “Modern Coding Theory,” published Mar. 17, 2008, by Tom Richardson and Ruediger Urbanke, which is hereby incorporated by reference in its entirety.
- For example, when processing a codeword with lifting size Z, an LDPC decoder may utilize Z processing elements to perform parity check or variable node operations on all Z edges of a lifted graph concurrently. Specifically, each parity check operation may involve reading a corresponding soft bit value from memory, combining the soft bit value with other soft bit values associated with the check node and writing a soft bit back to memory that results from the check node operation. Double edges in the base graph may trigger parallel reading of the same soft bit value, in a memory location, twice during a single parallel parity check update. Additional circuitry may thus be needed to combine the soft bit values that are written back to memory, so as to properly incorporate both updates. Eliminating double edges in the base graph helps to avoid this extra complexity.
- By eliminating or reducing double (and/or multiple) edges from the base LDPC code, the puncturing may reduce the complexity of the hardware that performs parallel check node or variable node operations, thereby increasing the parallel processing efficiency of a corresponding LDPC decoder. This further simplifies read and/or write operations performed in memory, and ensures that the read and write operations are not performed out of order.
- Puncturing is the act of removing bits from a codeword to yield a shorter codeword. Thus, punctured variable nodes correspond to codeword bits that are not actually transmitted. Puncturing a variable node in an LDPC code creates a shortened code (e.g. due to the removal of a bit), while also effectively removing a check node. Specifically, for a matrix representation of an LDPC code, including bits to be punctured, where the variable node to be punctured has a degree of one (such a representation may be possible through row combining provided the code is proper), puncturing the variable node removes the associated bit from the code and effectively removes its single neighboring check node from the graph. As a result, the number of check nodes in the graph is reduced by one. If the base transmitted block length is n−p, where p is the number of punctured columns, and the number of base parity checks is m, then the rate is (n−m)/(n−p). The binary information block size is (n−m)*Z, and the transmitted block size is (n−p)*Z. Note that if we increase n and p by 1 we may increase m by 1 and leave the rate and block size unchanged.
- As an example, consider a rate 0.9 code in which the base block length is 30. Without puncturing, the number of check nodes that would be used to define the base code is 3, resulting in a (27, 30) code (e.g., K=27 message bits, N=30 codeword bits). Such a code is likely to have double (or more) edges connecting at least one check node to a variable node (e.g., unless all variable nodes have a maximum degree of 3). However, it may be desirable to have larger degree variable nodes (e.g., degree≧4), for example, to ensure a deep error floor. If a punctured variable node is introduced into the LDPC code, thereby increasing the total number of variable nodes to 31, then the number of base check nodes increases to 4. It is now possible to have
degree 4 base variable nodes without double edges in the base graph. We note, however, such an LDPC code is still a (27, 30) code. - In the bipartite graph representation of an LDPC code, a punctured degree-two variable node effectively merges its two neighboring check nodes into a single check node. The punctured degree two variable node effectively indicates that its two neighboring check nodes have, absent the degree two node, the same parity. Accordingly, punctured degree-two variable nodes may be used to “split” check nodes, thereby appearing to increase the total number of check nodes. This mechanism may therefore be used to remove multiple edges from an LDPC code. A variable node is typically connected to at least one check node by two or more edges if the degree of the variable node is greater than the total number of check nodes (N) in the base graph. Thus, multiple edges in a base graph may be avoided and/or eliminated by introducing one or more degree-two variable nodes (i.e., assuming at least one variable node in the base graph has a degree greater than N).
- Puncturing a high degree base variable node of the LDPC code can also increase the number of check nodes. In addition, high degree check nodes can be desirable in high performing LDPC design. For example, the highest degree variable node may correspond to a variable node having a degree equal to (or one less than) the total number of check nodes in the base graph. Such a high degree variable node can evidently be present in a base graph without any double edges. As described in greater detail below, a punctured variable node is treated as “erased” at decoding. Thus, for codes targeting low error rates, it may be desirable to prevent such nodes from participating in the combinatorial structures (e.g., trapping sets or near codewords) that give rise to error floor events. Having a high degree generally makes it less likely that a node will contribute to an error floor event.
- Furthermore, high degree punctured variable nodes in the graph may improve the performance of the code. It is known that punctured nodes in a graph can improve the so-called iterative threshold of the code structure. In standard irregular LDPC designs (i.e., without punctured variable nodes), thresholds can be improved by increasing the average degree in the bipartite graph, and thus increasing the degrees of the variable and check nodes. With punctured variable nodes, the same effect may be achieved with lower average degree, thereby reducing the complexity of the LDPC code. Furthermore, LDPC code structures having lower average degrees may perform better on smaller graphs. Thus, puncturing high-degree variable nodes may both increase the number of check nodes (thus allowing higher degrees) and improve the performance of codes with limited maximum variable node degrees.
-
FIG. 4 is a block diagram of acommunications device 400 in accordance with some embodiments. Thecommunications device 400 includes anencoder 410, adecoder 420, and atransceiver 430, which transmits and/or receives LDPC-encoded codewords via a communications channel. Theencoder 410 includes amemory 412, and anLDPC encoder 414. Thememory 412 may be used to store data (i.e., information bits) to be encoded by theLDPC encoder 414. The LDPC encoder 414 processes the information bits stored in thememory 412 by generating codewords, based on an LDPC code, to be transmitted to another device. - For some embodiments, the LDPC code may be a lifted LDPC code. Further, for some embodiments, the base LDPC code may include one or more punctured nodes. The
LDPC encoder 414 may thus puncture one or more bits of the codeword which correspond with respective punctured nodes of the base LDPC code. These punctured codeword bits are not transmitted by thetransceiver 430. For some embodiments, the punctured nodes may include a base variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code. For example, at least one of the punctured nodes may be a highest-degree variable node of the LDPC code. For other embodiments, at least one of the punctured nodes may be used to split a check node that is connected to a variable node of the LDPC code by two or more edges. Such a punctured node may be used to eliminate double edges in the base graph for the lifted LDPC code. - The
decoder 420 includes amemory 422 and anLDPC decoder 424. Thememory 422 stores codewords, received via thetransceiver 430, to be decoded by theLDPC decoder 424. TheLDPC decoder 424 processes the codewords stored in thememory 424 by iteratively performing parity check operations, using an LDPC code, and attempting correcting any bits that may have been received in error. For some embodiments, the LDPC code may be a lifted LDPC code. Further, for some embodiments, the received codeword may include one or more puncture bits as determined, for example, based on a set of punctured nodes of the corresponding LDPC code. As described above, with reference toFIG. 3 , the punctured nodes may be determined based on the degrees of the variable nodes of the LDPC code. TheLDPC decoder 424 may thus treat these punctured nodes as erased for purposes of decoding. For example, theLDPC decoder 424 may set the log-likelihood ratios (LLRs) of the punctured nodes to zero at initialization. - For some embodiments, the
LDPC decoder 424 may include a plurality of processing elements to perform the parity check or variable node operations in parallel. For example, when processing a codeword with lifting size Z, theLDPC decoder 424 may utilize a number (Z) of processing elements to perform parity check operations on all Z edges of a lifted graph, concurrently. Specifically, each parity check operation may involve reading a corresponding soft bit value frommemory 422, combining the soft bit value with other soft bit values associated with the check node and writing a soft bit back tomemory 422 that results from the check node operation. A double edge in a base LDPC code may trigger parallel reading of the same soft bit value memory location twice during a single parallel parity check update. Thus, additional circuitry is typically needed to combine the soft bit values that are written back to memory, so as to properly incorporate both updates. However, eliminating double edges in the LDPC code, for example, as described above with respect toFIG. 3 , helps to avoid this extra complexity. -
FIG. 5 is an illustrative flow chart depicting anLDPC encoding operation 500 in accordance with some embodiments. With reference, for example, toFIG. 4 , theencoder 410 first receives a set of information bits to be encoded (510). The information bits may correspond to data intended to be transmitted to another device (e.g., a receiving device) over a communications channel or network. For example, the information bits may be received from a central processing unit (CPU) and stored inmemory 412. - The
encoder 410 may then perform an LDPC encoding operation on the information bits to produce an LDPC codeword (520). For some embodiments, theLDPC encoder 414 may encode the information bits into LDPC codewords based on an LDPC code that is shared by theencoder 410 and a corresponding decoder (e.g., of the receiving device). Each codeword may include the original information bits, or a portion thereof, as well as a set of parity bits which may be used (e.g., by the decoder) to perform parity check operations on and/or recover the original information bits. - The
encoder 410 may further puncture one or more bits of the LDPC codeword based on base punctured variable nodes of the LDPC code (530). For example, the one or more punctured codeword bits may correspond with one or more base variable punctured nodes, respectively, of the base LDPC code. Specifically, at least some of the punctured nodes are provided to eliminate multiple edges between node pairs in the base graph of the lifted LDPC code. For some embodiments, the punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code. For other embodiments, at least one of the punctured nodes may be adegree 2 variable node. For example, thedegree 2 variable node may be used to split a check node that would otherwise be connected to another variable node of the LDPC code by two or more edges. For some embodiments both may occur, specifically, both a high degree punctured variable node and a degree two punctured node may occur in the base graph. For some embodiments, the LDPC code may be a lifted LDPC code. Still further, the LDPC code may be based on a quasi-cycling lifting, wherein the permutations of edge clusters are cyclic permutations. -
FIG. 6 is an illustrative flow chart depicting anLDPC decoding operation 600 in accordance with some embodiments. With reference, for example, toFIG. 4 , thedecoder 420 first receives an LDPC codeword to be decoded (610). The LDPC codeword may be received from a transmitting device, for example, in the form of a quadrature amplitude modulated (QAM) data signal. Accordingly, the LDPC codeword may correspond with a subset of labeling bits of the de-mapped QAM data signal. - The
decoder 420 may identify one or more punctured bits of the LDPC codeword based on base punctured nodes of the LDPC code (620). For example, the one or more punctured codeword bits may correspond with one or more base punctured nodes, respectively, of the LDPC code. As described above, at least some of the base punctured nodes are provided to eliminate multiple edges between node pairs in the base graph of the lifted LDPC code. For some embodiments, the punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code. For other embodiments, at least one of the punctured nodes may be adegree 2 variable node. As described above, thedegree 2 variable node may be used to split a check node that would otherwise be connected to another variable node of the LDPC code by two or more edges. For some embodiments, the LDPC code may be a lifted LDPC code (e.g., based on a quasi-cyclic lifting). - The
decoder 420 may then perform an LDPC decoding operation on the received codeword to recover the original information bits (630). For example, theLDPC decoder 424 may process the codeword by iteratively performing parity check operations, using the LDPC code, and attempting to correct any bits that may have been received in error. For some embodiments, theLDPC decoder 424 may treat the punctured codeword bits as erased during the decoding operation, for example, by setting the LLRs of the punctured nodes to zero at initialization. - In the present embodiments, each of the LDPC codes may be viewed as a two dimensional binary array of size Z×n, where n is the base (transmission) block length. For some embodiments, the proposed downstream codes are defined such that Z=360. In each constellation, k bits may be taken at a time, per dimension (e.g., for 1024QAM, k=5). Furthermore, k is a factor of 360, and k bits may be taken at a time columnwise, thus generating 360/k dimensions or 180/k symbols per column. It should thus be noted that k is a factor of 60 for the set k ε{1, 2, 3, 4, 5, 6}, in the cases of interest.
-
FIGS. 7 , 8, and 9 show exemplaryparity check matrices parity check matrices - Note that the
parity check matrices parity check matrix 900, which is associated with an LDPC code with rate r=21/28, has a punctured information column, and is therefore not fully systematic. - Further, the
parity check matrix 700 has a punctured degree two variable node (index 0). Such a node may split a single parity check into two. This ensures that the base matrix has no double edges, and facilitates some of the embodiments described herein. An equivalent code representation can be constructed by merging the two parity checks and eliminating the punctureddegree 2 variable node. Moreover, such an equivalent representation shall have double or multiple edges in the base graph. -
FIG. 10 is a block diagram of acommunications device 1000 in accordance with some embodiments. Thecommunications device 1000 includes atransceiver 1010, aprocessor 1020, andmemory 1030. Thetransceiver 1010 may be used for communicating data to and/or from thecommunications device 1000. For example, thetransceiver 1010 may receive and/or transmit information bits between thecommunications device 1000 and a CPU. Theencoder interface 1010 may also output and/or receive LDPC codewords between thecommunications device 1000 and another communications device in a network. -
Memory 1030 may include adata store 1032 that may be used as a local cache to store the received information bits and/or codewords. Furthermore,memory 1030 may also include a non-transitory computer-readable storage medium (e.g., one or more nonvolatile memory elements, such as EPROM, EEPROM, Flash memory, a hard drive, etc.) that can store the following software modules: -
- an
LDPC encoding module 1034 to encode a set of information bits, using an LDPC code, to produce a codeword; - an
LDPC decoding module 1036 to decode LDPC codewords using an LDPC code.
Each software module may include instructions that, when executed by theprocessor 1020, may cause theencoder 1000 to perform the corresponding function. Thus, the non-transitory computer-readable storage medium ofmemory 1030 may include instructions for performing all or a portion of the operations described above with respect toFIGS. 5-6 . It should be noted that, while the modules 1034-1036 are depicted as software inmemory 1030, any of the module may be implemented in hardware, software, firmware, or a combination of the foregoing.
- an
- The
processor 1020, which is coupled between theencoder interface 1010 and thememory 1030, may be any suitable processor capable of executing scripts of instructions of one or more software programs stored in the decoder 1000 (e.g., within memory 1030). For example, theprocessor 1020 may execute theLDPC encoding module 1034 and/or theLDPC decoding module 1036. - The
LDPC encoding module 1034 may be executed by theprocessor 1020 to encode the information bits, using the LDPC code, to produce a codeword. For example, theprocessor 1020, in executing theLDPC encoding module 1034, may perform an LDPC encoding operation on the information bits based on an LDPC code that is shared by theLDPC encoding module 1034 and a decoding module of a corresponding receive device. Each codeword may include the original information bits as well as a set of parity bits which may be used to perform parity checks on and/or recover the original information bits. For some embodiments, the LDPC code may be a lifted LDPC code (e.g., based on a quasi-cyclic lifting). - The
processor 1020, in executing theLDPC encoding module 1034, may further puncture one or more bits of the codeword based on the corresponding LDPC code. For example, the one or more punctured codeword bits may correspond with one or more punctured nodes, respectively, of the LDPC code. As described above, at least some of the punctured nodes are provided to eliminate multiple edges between node pairs in the base graph for the lifted LDPC code. For some embodiments, the punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code. For other embodiments, at least one of the punctured nodes may be adegree 2 variable node (e.g., used to split a check node that would otherwise be connected to another variable node of the LDPC code by two or more edges). - The
LDPC decoding module 1036 may be executed by theprocessor 1020 to decode LDPC codewords using the LDPC code. For some embodiments, theprocessor 1020, in executing theLDPC decoding module 1036, may first identify one or more punctured bits of the received codeword based on the LDPC code. Theprocessor 1020 may then perform an LDPC decoding operation on the received codeword, while treating the punctured codeword bits as erased. For example, theLDPC decoding module 1036, as executed by theprocessor 1020, may set the LLRs of the punctured nodes to zero at initialization. For some embodiments, the LDPC code may be a lifted LDPC code (e.g., based on a quasi-cyclic lifting). - As described above, the punctured codeword bits may correspond with respective punctured nodes of the LDPC code, wherein at least some of the punctured nodes are provided to eliminate multiple edges between node pairs in the base graph for the lifted LDPC code. For some embodiments, the punctured nodes may include a variable node having a degree equal to, or one less than, a number of check nodes of the LDPC code. For other embodiments, at least one of the punctured nodes may be a
degree 2 variable node (e.g., used to split a check node that would otherwise be connected to another variable node of the LDPC code by two or more edges). - In the foregoing specification, the present embodiments have been described with reference to specific exemplary embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader scope of the disclosure as set forth in the appended claims. The specification and drawings are, accordingly, to be regarded in an illustrative sense rather than a restrictive sense. For example, the method steps depicted in the flow charts of
FIGS. 5-6 may be performed in other suitable orders, multiple steps may be combined into a single step, and/or some steps may be omitted.
Claims (44)
1. A method of data encoding, the method comprising:
receiving a set of information bits;
performing a lifted low density parity check (LDPC) encoding operation on the set of information bits to produce a codeword; and
puncturing all lifted bits of the codeword that correspond to one or more punctured base bits of a base LDPC code used for the LDPC encoding operation, wherein:
the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code; and
the base LDPC code has no multiple edges.
2. The method of claim 1 , wherein the one or more punctured base nodes correspond to one or more variable nodes having a degree equal to, or one less than, a number of check nodes of the base LDPC code.
3. The method of claim 1 , wherein at least one of the one or more punctured base nodes corresponds to a highest-degree variable node of the base LDPC code.
4. The method of claim 1 , wherein the one or more punctured base nodes correspond to one or more degree 2 variable nodes.
5. The method of claim 4 , wherein the one or more punctured base nodes split one or more respective check nodes that are each connected to another variable node, and wherein each of the other variable nodes is connected by edges to both elements of the corresponding split check node.
6. The method of claim 4 , wherein the one or more punctured base nodes eliminate double edges in the base LDPC code.
7. The method of claim 1 , wherein a quasi-cyclic lifting is applied to the base LDPC code, and wherein permutations of edge clusters in the quasi-cyclic lifting are cyclic permutations.
8. A method of data decoding, the method comprising:
receiving an LDPC codeword;
identifying all lifted bits of the LDPC codeword that correspond to one or more punctured based bits of a base LDPC code, wherein:
the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code; and
the base LDPC code has no multiple edges; and
performing an LDPC decoding operation on the received codeword to recover a set of information bits, wherein the identified lifted bits are treated as erased for purposes of decoding.
9. The method of claim 8 , wherein the one or more punctured base nodes correspond to one or more variable nodes having a degree equal to, or one less than, a number of check nodes of the base LDPC code.
10. The method of claim 8 , wherein at least one of the one or more punctured base nodes corresponds to a highest-degree variable node of the base LDPC code.
11. The method of claim 8 , wherein the one or more punctured base nodes correspond to one or more degree 2 variable nodes.
12. The method of claim 11 , wherein the one or more punctured base nodes split one or more respective check nodes that are each connected to another variable node, and wherein each of the other variable nodes is connected by edges to both elements of the corresponding split check node.
13. The method of claim 11 , wherein the one or more punctured base nodes eliminate double edges in the base LDPC code.
14. The method of claim 8 , wherein a quasi-cyclic lifting is applied to the base LDPC code, and wherein permutations of edge clusters in the quasi-cyclic lifting are cyclic permutations.
15. A computer-readable storage medium containing program instructions that, when executed by a processor provided within a communications device, causes the device to:
receive a set of information bits;
perform a lifted LDPC encoding operation on the set of information bits to produce a codeword; and
puncture all lifted bits of the codeword that correspond to one or more punctured base bits of a base LDPC code used for the LDPC encoding operation, wherein:
the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code; and
the base LDPC code has no multiple edges.
16. The computer-readable storage medium of claim 15 , wherein the one or more punctured base nodes correspond to one or more variable nodes having a degree equal to, or one less than, a number of check nodes of the base LDPC code.
17. The computer-readable storage medium of claim 15 , wherein at least one of the one or more punctured base nodes corresponds to a highest-degree variable node of the base LDPC code.
18. The computer-readable storage medium of claim 15 , wherein the one or more punctured base nodes correspond to one or more degree 2 variable nodes.
19. The computer-readable storage medium of claim 18 , wherein the one or more punctured base nodes split one or more respective check nodes that are each connected to another variable node, and wherein each of the other variable nodes is connected by edges to both elements of the corresponding split check node.
20. The computer-readable storage medium of claim 18 , wherein the one or more punctured base nodes eliminate double edges in the base LDPC code.
21. The computer-readable storage medium of claim 15 , wherein a quasi-cyclic lifting is applied to the base LDPC code, and wherein permutations of edge clusters in the quasi-cyclic lifting are cyclic permutations.
22. A computer-readable storage medium containing program instructions that, when executed by a processor provided within a communications device, causes the device to:
receive an LDPC codeword;
identify all lifted bits of the LDPC codeword that correspond to one or more punctured based bits of a base LDPC code, wherein:
the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code; and
the base LDPC code has no multiple edges; and
perform an LDPC decoding operation on the received codeword to recover a set of information bits, wherein the identified lifted bits are treated as erased for purposes of decoding.
23. The computer-readable storage medium of claim 22 , wherein the one or more punctured base nodes correspond to one or more variable nodes having a degree equal to, or one less than, a number of check nodes of the base LDPC code.
24. The computer-readable storage medium of claim 22 , wherein at least one of the one or more punctured base nodes corresponds to a highest-degree variable node of the base LDPC code.
25. The computer-readable storage medium of claim 22 , wherein the one or more punctured base nodes correspond to one or more degree 2 variable nodes.
26. The computer-readable storage medium of claim 25 , wherein the one or more punctured base nodes split one or more respective check nodes that are each connected to another variable node, and wherein each of the other variable nodes is connected by edges to both elements of the corresponding split check node.
27. The computer-readable storage medium of claim 25 , wherein the one or more punctured base nodes eliminate double edges in the base LDPC code.
28. The computer-readable storage medium of claim 22 , wherein a quasi-cyclic lifting is applied to the base LDPC code, and wherein permutations of edge clusters in the quasi-cyclic lifting are cyclic permutations.
29. A communications device, comprising:
a memory to store a set of information bits; and
an encoder to:
perform a lifted LDPC encoding operation on the set of information bits to produce a codeword; and
puncture all lifted bits of the codeword that correspond to one or more punctured base bits of a base LDPC code used for the LDPC encoding operation, wherein:
the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code; and
the base LDPC code has no multiple edges.
30. The device of claim 29 , wherein the one or more punctured base nodes correspond to one or more variable nodes having a degree equal to, or one less than, a number of check nodes of the base LDPC code.
31. The device of claim 29 , wherein at least one of the one or more punctured base nodes corresponds to a highest-degree variable node of the base LDPC code.
32. The device of claim 29 , wherein the one or more punctured base nodes correspond to one or more degree 2 variable nodes.
33. The device of claim 32 , wherein the one or more punctured base nodes split one or more respective check nodes that are each connected to another variable node, and wherein each of the other variable nodes is connected by edges to both elements of the corresponding split check node.
34. The device of claim 32 , wherein the one or more punctured base nodes eliminate double edges in the base LDPC code.
35. The device of claim 29 , wherein a quasi-cyclic lifting is applied to the base LDPC code, and wherein permutations of edge clusters in the quasi-cyclic lifting are cyclic permutations.
36. A communications device, comprising:
a memory to store an LDPC codeword; and
a decoder to:
identify all lifted bits of the LDPC codeword that correspond to one or more punctured based bits of a base LDPC code, wherein:
the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code; and
the base LDPC code has no multiple edges; and
perform an LDPC decoding operation on the received codeword to recover a set of information bits, wherein the identified lifted bits are treated as erased for purposes of decoding.
37. The device of claim 36 , wherein the one or more punctured base nodes correspond to one or more variable nodes having a degree equal to, or one less than, a number of check nodes of the base LDPC code.
38. The device of claim 36 , wherein at least one of the one or more punctured base nodes corresponds to a highest-degree variable node of the base LDPC code.
39. The device of claim 36 , wherein the one or more punctured base nodes correspond to one or more degree 2 variable nodes.
40. The device of claim 39 , wherein the one or more punctured base nodes split one or more respective check nodes that are each connected to another variable node, and wherein each of the other variable nodes is connected by edges to both elements of the corresponding split check node.
41. The device of claim 39 , wherein the one or more punctured base nodes eliminate double edges in the base LDPC code.
42. The device of claim 36 , wherein a quasi-cyclic lifting is applied to the base LDPC code, and wherein permutations of edge clusters in the quasi-cyclic lifting are cyclic permutations.
43. An encoder, comprising:
means for receiving a set of information bits;
means for performing a LDPC encoding operation on the set of information bits to produce a codeword; and
means for puncturing all lifted bits of the codeword that correspond to one or more punctured base bits of a base LDPC code used for the LDPC encoding operation, wherein:
the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code; and
the base LDPC code has no multiple edges.
44. A decoder, comprising:
means receiving an LDPC codeword;
means for identifying all lifted bits of the LDPC codeword that correspond to one or more punctured based bits of a base LDPC code, wherein:
the one or more punctured base bits are those that correspond with one or more punctured base nodes, respectively, of the base LDPC code; and
the base LDPC code has no multiple edges; and
means for performing an LDPC decoding operation on the received codeword to recover a set of information bits, wherein the identified lifted bits are treated as erased for purposes of decoding.
Priority Applications (10)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2014/016279 WO2014127140A1 (en) | 2013-02-13 | 2014-02-13 | Design for lifted ldpc codes having high parallelism, low error floor, and simple encoding principle |
JP2015557231A JP6542132B2 (en) | 2013-02-13 | 2014-02-13 | LDPC designs that use and puncture pseudo-cyclic configurations for high rates, high parallelism, and low error floor |
KR1020157024376A KR102142142B1 (en) | 2013-02-13 | 2014-02-13 | Ldpc design using quasi―cyclic constructions and puncturing for high rate, high parallelism, and low error floor |
KR1020157024378A KR101662747B1 (en) | 2013-02-13 | 2014-02-13 | Design for lifted ldpc codes having high parallelism, low error floor, and simple encoding principle |
CN201480008409.6A CN104981978B (en) | 2013-02-13 | 2014-02-13 | Using quasi- looping construct and perforate to realize that the LDPC of high-speed, high concurrency and low error floor is designed |
US14/179,871 US20140229788A1 (en) | 2013-02-13 | 2014-02-13 | Ldpc design for high rate, high parallelism, and low error floor |
CN201480008419.XA CN105075128B (en) | 2013-02-13 | 2014-02-13 | For the method for boosted LDPC code, computer readable storage medium and equipment |
BR112015019409-5A BR112015019409B1 (en) | 2013-02-13 | 2014-02-13 | LDPC DESIGN USING NEAR-CYCLIC CONSTRUCTIONS AND DRILLING FOR HIGH RATE, HIGH PARALLELISM, AND LOW ERROR FLOOR |
PCT/US2014/016261 WO2014127129A1 (en) | 2013-02-13 | 2014-02-13 | Ldpc design using quasi-cyclic constructions and puncturing for high rate, high parallelism, and low error floor |
JP2015557232A JP5976960B2 (en) | 2013-02-13 | 2014-02-13 | Design for lifted LDPC codes with high parallelism, low error floor, and simple coding principles |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361764476P | 2013-02-13 | 2013-02-13 | |
US14/179,871 US20140229788A1 (en) | 2013-02-13 | 2014-02-13 | Ldpc design for high rate, high parallelism, and low error floor |
Publications (1)
Publication Number | Publication Date |
---|---|
US20140229788A1 true US20140229788A1 (en) | 2014-08-14 |
Family
ID=51298356
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US14/179,942 Active 2034-04-12 US9306601B2 (en) | 2013-02-13 | 2014-02-13 | LDPC design for high parallelism, low error floor, and simple encoding |
US14/179,871 Abandoned US20140229788A1 (en) | 2013-02-13 | 2014-02-13 | Ldpc design for high rate, high parallelism, and low error floor |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US14/179,942 Active 2034-04-12 US9306601B2 (en) | 2013-02-13 | 2014-02-13 | LDPC design for high parallelism, low error floor, and simple encoding |
Country Status (7)
Country | Link |
---|---|
US (2) | US9306601B2 (en) |
EP (2) | EP2957038B1 (en) |
JP (2) | JP6542132B2 (en) |
KR (2) | KR102142142B1 (en) |
CN (2) | CN104981978B (en) |
BR (1) | BR112015019409B1 (en) |
WO (2) | WO2014127129A1 (en) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170141798A1 (en) * | 2015-11-12 | 2017-05-18 | Qualcomm Incorporated | Puncturing for structured low density parity check (ldpc) codes |
US20170331497A1 (en) * | 2016-05-12 | 2017-11-16 | Qualcomm Incorporated | Enhanced puncturing and low-density parity-check (ldpc) code structure |
CN107959501A (en) * | 2016-10-17 | 2018-04-24 | 上海数字电视国家工程研究中心有限公司 | A kind of LDPC encoder |
WO2018084735A1 (en) * | 2016-11-03 | 2018-05-11 | Huawei Technologies Co., Ltd. | Efficiently decodable qc-ldpc code |
RU2667772C1 (en) * | 2017-05-05 | 2018-09-24 | Хуавэй Текнолоджиз Ко., Лтд. | Method and device for information processing and communication device |
US10291359B2 (en) | 2016-07-27 | 2019-05-14 | Qualcomm Incorporated | Of hybrid automatic repeat request (HARQ) feedback bits for polar codes |
US10291354B2 (en) | 2016-06-14 | 2019-05-14 | Qualcomm Incorporated | High performance, flexible, and compact low-density parity-check (LDPC) code |
US20190165812A1 (en) * | 2017-11-30 | 2019-05-30 | Korea University Research And Business Foundation | Method and apparatus for deciding decoding order for shuffled decoding of ldpc codes |
US10313057B2 (en) | 2016-06-01 | 2019-06-04 | Qualcomm Incorporated | Error detection in wireless communications using sectional redundancy check information |
US10312939B2 (en) | 2017-06-10 | 2019-06-04 | Qualcomm Incorporated | Communication techniques involving pairwise orthogonality of adjacent rows in LPDC code |
US10324785B2 (en) | 2016-07-19 | 2019-06-18 | Samsung Electronics Co., Ltd. | Decoder using low-density parity-check code and memory controller including the same |
US10348451B2 (en) | 2016-06-01 | 2019-07-09 | Qualcomm Incorporated | Enhanced polar code constructions by strategic placement of CRC bits |
US10355822B2 (en) | 2017-07-07 | 2019-07-16 | Qualcomm Incorporated | Communication techniques applying low-density parity-check code base graph selection |
US11043966B2 (en) | 2016-05-11 | 2021-06-22 | Qualcomm Incorporated | Methods and apparatus for efficiently generating multiple lifted low-density parity-check (LDPC) codes |
US20210367709A1 (en) * | 2018-02-23 | 2021-11-25 | Nokia Technologies Oy | Ldpc codes for 3gpp nr ultra-reliable low-latency communications |
TWI768085B (en) * | 2017-07-28 | 2022-06-21 | 美商高通公司 | Techniques and apparatuses for low density parity check base graph determination and indication |
US11411581B2 (en) | 2017-05-12 | 2022-08-09 | Qualcomm Incorporated | Row orthogonality in LDPC rate compatible design |
US11455208B2 (en) | 2020-08-20 | 2022-09-27 | Western Digital Technologies, Inc. | Soft information for punctured bit estimation in a data storage device |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3035539A1 (en) * | 2014-12-19 | 2016-06-22 | Xieon Networks S.à r.l. | Encoder, decoder and encoding method with low error floor |
CN106160937B (en) | 2015-04-15 | 2019-01-04 | 中兴通讯股份有限公司 | A kind of method and device for realizing code block segmentation |
US10523364B2 (en) * | 2015-11-06 | 2019-12-31 | Samsung Electronics Co., Ltd. | Channel coding framework for 802.11AY and larger block-length LDPC codes for 11AY with 2-step lifting matrices and in-place property |
US10404280B2 (en) * | 2015-11-19 | 2019-09-03 | Westhold Corporation | Error correction using cyclic code-based LDPC codes |
CN109792253A (en) * | 2016-09-30 | 2019-05-21 | Lg电子株式会社 | QC LDPC code speed matching method and device for the method |
WO2018079987A1 (en) * | 2016-10-24 | 2018-05-03 | 엘지전자 주식회사 | Method for dividing carrying block of ldpc code and apparatus therefor |
PT3327936T (en) * | 2016-11-23 | 2021-06-18 | Grdf | Coding/decoding with short quasi-cyclic semi-regular ldpc codes for low consumption applications such as remote meter reading |
CN109891755A (en) * | 2017-01-06 | 2019-06-14 | Lg 电子株式会社 | The method and its equipment of LDPC basic code are selected in more LPDC codes |
KR102262186B1 (en) * | 2017-03-03 | 2021-06-08 | 후아웨이 테크놀러지 컴퍼니 리미티드 | High Rate Long LDPC Codes |
CN108631925B (en) * | 2017-03-24 | 2022-05-03 | 中兴通讯股份有限公司 | Quasi-cyclic low-density parity check coding processing method and device |
SG11202009379VA (en) | 2017-03-24 | 2020-10-29 | Zte Corp | Processing method and device for quasi-cyclic low density parity check coding |
WO2018201540A1 (en) * | 2017-05-05 | 2018-11-08 | 华为技术有限公司 | Information processing method and communication apparatus |
CN108809325B (en) * | 2017-05-05 | 2022-01-28 | 上海数字电视国家工程研究中心有限公司 | LDPC decoder |
CN109120276B (en) * | 2017-05-05 | 2019-08-13 | 华为技术有限公司 | The method of information processing, communication device |
CN108988871A (en) * | 2017-05-31 | 2018-12-11 | 电信科学技术研究院 | A kind of coding method and device, computer storage medium |
CN108988869B (en) * | 2017-05-31 | 2021-07-30 | 大唐移动通信设备有限公司 | Method and device for determining check matrix and computer storage medium |
CN109067407B (en) * | 2017-06-15 | 2019-11-15 | 华为技术有限公司 | The method, apparatus and communication equipment of information processing |
KR102194029B1 (en) | 2017-06-15 | 2020-12-22 | 후아웨이 테크놀러지 컴퍼니 리미티드 | Information processing method and communication device |
CN109327225B9 (en) | 2017-06-27 | 2021-12-10 | 华为技术有限公司 | Information processing method and device and communication equipment |
CN109150196B (en) * | 2017-06-27 | 2024-06-18 | 华为技术有限公司 | Information processing method, device and communication equipment |
WO2019226064A1 (en) * | 2018-05-22 | 2019-11-28 | Huawei Technologies Co., Ltd. | Type-i qc-ldpc codes with efficient encoding and good error floor characteristic |
KR101991447B1 (en) * | 2018-09-10 | 2019-06-20 | 국방과학연구소 | The Method of Protograph LDPC codes Construction Robust to Block Interference and Fading |
CN111064475A (en) * | 2018-10-16 | 2020-04-24 | 华为技术有限公司 | Decoding method and device based on low-density parity check code |
CN109639392B (en) * | 2018-11-09 | 2020-03-27 | 清华大学 | Construction method and system of space coupling LDPC code for broadcast channel transmission |
US11303303B2 (en) * | 2020-01-03 | 2022-04-12 | Qualcomm Incorporated | Rate 7/8 low-density parity-check (LDPC) code |
KR102476160B1 (en) * | 2020-11-11 | 2022-12-08 | 포항공과대학교 산학협력단 | Non-binary low density parity check codes decoder and decoding method using the same |
US11575390B2 (en) * | 2021-07-02 | 2023-02-07 | Hong Kong Applied Science and Technology Research Insitute Co., Ltd. | Low-latency segmented quasi-cyclic low-density parity-check (QC-LDPC) decoder |
CN116644071B (en) * | 2023-06-08 | 2024-04-05 | 中国长江三峡集团有限公司 | Material coding management method, device, computer equipment and storage medium |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040187129A1 (en) * | 2003-02-26 | 2004-09-23 | Tom Richardson | Method and apparatus for performing low-density parity-check (LDPC) code operations using a multi-level permutation |
US20050283708A1 (en) * | 2004-05-12 | 2005-12-22 | Samsung Electronics Co., Ltd. | Apparatus and method for encoding and decoding block low density parity check codes with a variable coding rate |
US20100023834A1 (en) * | 2006-10-26 | 2010-01-28 | Qualcomm Incorproated | Coding schemes for wireless communication transmissions |
US20130139024A1 (en) * | 2011-11-29 | 2013-05-30 | Thuy V. NGUYEN | High order modulation protograph codes |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6633856B2 (en) | 2001-06-15 | 2003-10-14 | Flarion Technologies, Inc. | Methods and apparatus for decoding LDPC codes |
US6961888B2 (en) * | 2002-08-20 | 2005-11-01 | Flarion Technologies, Inc. | Methods and apparatus for encoding LDPC codes |
KR100809619B1 (en) * | 2003-08-26 | 2008-03-05 | 삼성전자주식회사 | Apparatus and method for coding/decoding block low density parity check code in a mobile communication system |
KR100922956B1 (en) * | 2003-10-14 | 2009-10-22 | 삼성전자주식회사 | Method for encoding of low density parity check code |
US7346832B2 (en) * | 2004-07-21 | 2008-03-18 | Qualcomm Incorporated | LDPC encoding methods and apparatus |
US7143333B2 (en) | 2004-08-09 | 2006-11-28 | Motorola, Inc. | Method and apparatus for encoding and decoding data |
US7506238B2 (en) * | 2004-08-13 | 2009-03-17 | Texas Instruments Incorporated | Simplified LDPC encoding for digital communications |
WO2006039801A1 (en) | 2004-10-12 | 2006-04-20 | Nortel Networks Limited | System and method for low density parity check encoding of data |
CN100550655C (en) * | 2004-11-04 | 2009-10-14 | 中兴通讯股份有限公司 | A kind of encoder/decoder of low density parity check code and generation method thereof |
KR100856235B1 (en) | 2005-09-26 | 2008-09-03 | 삼성전자주식회사 | Apparatus and method for encoding and decoding block low density parity check codes with a variable coding rate |
US8132072B2 (en) | 2006-01-06 | 2012-03-06 | Qualcomm Incorporated | System and method for providing H-ARQ rate compatible codes for high throughput applications |
JP4918655B2 (en) * | 2006-03-30 | 2012-04-18 | 富士通株式会社 | Parity check matrix generation method and apparatus, transmitter and receiver |
US8028216B1 (en) * | 2006-06-02 | 2011-09-27 | Marvell International Ltd. | Embedded parity coding for data storage |
KR101191196B1 (en) * | 2006-06-07 | 2012-10-15 | 엘지전자 주식회사 | Method of encoding and decoding using a parity check matrix |
US8161363B2 (en) * | 2006-12-04 | 2012-04-17 | Samsung Electronics Co., Ltd | Apparatus and method to encode/decode block low density parity check codes in a communication system |
KR101433375B1 (en) | 2006-12-04 | 2014-08-29 | 삼성전자주식회사 | Apparatus and method of encoding/decoding block low density parity check codes in a communication system |
WO2008092040A2 (en) * | 2007-01-24 | 2008-07-31 | Qualcomm Incorporated | Ldpc encoding and decoding of packets of variable sizes |
US8261155B2 (en) * | 2007-03-09 | 2012-09-04 | Qualcomm Incorporated | Methods and apparatus for encoding and decoding low density parity check (LDPC) codes |
KR101119302B1 (en) * | 2007-04-20 | 2012-03-19 | 재단법인서울대학교산학협력재단 | Apparatus and method for encoding low density parity check codes in a communication system |
KR20080102902A (en) * | 2007-05-22 | 2008-11-26 | 삼성전자주식회사 | Method and apparatus for designing low density parity check code with multiple code rate, and information storage medium thereof |
US7966548B2 (en) | 2007-06-29 | 2011-06-21 | Alcatel-Lucent Usa Inc. | Method and system for encoding data using rate-compatible irregular LDPC codes based on edge growth and parity splitting |
JP5354985B2 (en) | 2007-07-30 | 2013-11-27 | パナソニック株式会社 | Encoding device and decoding device |
CN101227193B (en) * | 2008-02-02 | 2010-06-02 | 中国科学院计算技术研究所 | Method and device for encoding and decoding low density check code |
EP2099135B1 (en) * | 2008-03-03 | 2018-02-28 | Samsung Electronics Co., Ltd. | Apparatus and method for channel encoding and decoding in communication system using low-density parity-check codes |
US8433972B2 (en) * | 2009-04-06 | 2013-04-30 | Nec Laboratories America, Inc. | Systems and methods for constructing the base matrix of quasi-cyclic low-density parity-check codes |
US8484545B2 (en) | 2009-04-23 | 2013-07-09 | Georgia Tech Research Corporation | Secure communication using error correction codes |
-
2014
- 2014-02-13 KR KR1020157024376A patent/KR102142142B1/en active IP Right Grant
- 2014-02-13 JP JP2015557231A patent/JP6542132B2/en active Active
- 2014-02-13 EP EP14708175.6A patent/EP2957038B1/en active Active
- 2014-02-13 WO PCT/US2014/016261 patent/WO2014127129A1/en active Application Filing
- 2014-02-13 EP EP14707568.3A patent/EP2957037A1/en not_active Ceased
- 2014-02-13 BR BR112015019409-5A patent/BR112015019409B1/en active IP Right Grant
- 2014-02-13 JP JP2015557232A patent/JP5976960B2/en active Active
- 2014-02-13 WO PCT/US2014/016279 patent/WO2014127140A1/en active Application Filing
- 2014-02-13 US US14/179,942 patent/US9306601B2/en active Active
- 2014-02-13 US US14/179,871 patent/US20140229788A1/en not_active Abandoned
- 2014-02-13 CN CN201480008409.6A patent/CN104981978B/en active Active
- 2014-02-13 KR KR1020157024378A patent/KR101662747B1/en active IP Right Grant
- 2014-02-13 CN CN201480008419.XA patent/CN105075128B/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040187129A1 (en) * | 2003-02-26 | 2004-09-23 | Tom Richardson | Method and apparatus for performing low-density parity-check (LDPC) code operations using a multi-level permutation |
US20050283708A1 (en) * | 2004-05-12 | 2005-12-22 | Samsung Electronics Co., Ltd. | Apparatus and method for encoding and decoding block low density parity check codes with a variable coding rate |
US20080288846A1 (en) * | 2004-05-12 | 2008-11-20 | Samsung Electronics Co., Ltd. | Apparatus and method for encoding and decoding block low density parity check codes with a variable coding rate |
US20100023834A1 (en) * | 2006-10-26 | 2010-01-28 | Qualcomm Incorproated | Coding schemes for wireless communication transmissions |
US20130139024A1 (en) * | 2011-11-29 | 2013-05-30 | Thuy V. NGUYEN | High order modulation protograph codes |
Cited By (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170141798A1 (en) * | 2015-11-12 | 2017-05-18 | Qualcomm Incorporated | Puncturing for structured low density parity check (ldpc) codes |
WO2017082986A1 (en) * | 2015-11-12 | 2017-05-18 | Qualcomm Incorporated | Puncturing for structured low density parity check (ldpc) codes |
US10784901B2 (en) * | 2015-11-12 | 2020-09-22 | Qualcomm Incorporated | Puncturing for structured low density parity check (LDPC) codes |
AU2016351377B2 (en) * | 2015-11-12 | 2020-12-10 | Qualcomm Incorporated | Puncturing for structured low density parity check (LDPC) codes |
US11671120B2 (en) * | 2015-11-12 | 2023-06-06 | Qualcomm Incorporated | Puncturing for structured low density parity check (LDPC) codes |
US11043966B2 (en) | 2016-05-11 | 2021-06-22 | Qualcomm Incorporated | Methods and apparatus for efficiently generating multiple lifted low-density parity-check (LDPC) codes |
US10454499B2 (en) | 2016-05-12 | 2019-10-22 | Qualcomm Incorporated | Enhanced puncturing and low-density parity-check (LDPC) code structure |
CN109075802A (en) * | 2016-05-12 | 2018-12-21 | 高通股份有限公司 | Enhanced punching and low-density checksum (LDPC) code structure |
US11025276B2 (en) * | 2016-05-12 | 2021-06-01 | Qualcomm Incorporated | Enhanced puncturing and low-density parity-check (LDPC) code structure |
WO2017197267A1 (en) * | 2016-05-12 | 2017-11-16 | Qualcomm Incorporated | Enhanced puncturing and low-density parity-check (ldpc) code structure |
US20170331497A1 (en) * | 2016-05-12 | 2017-11-16 | Qualcomm Incorporated | Enhanced puncturing and low-density parity-check (ldpc) code structure |
RU2718171C1 (en) * | 2016-05-12 | 2020-03-30 | Квэлкомм Инкорпорейтед | Improved puncturing and code structure with low density of parity checks (ldpc) |
US10313057B2 (en) | 2016-06-01 | 2019-06-04 | Qualcomm Incorporated | Error detection in wireless communications using sectional redundancy check information |
US10644836B2 (en) | 2016-06-01 | 2020-05-05 | Qualcomm Incorporated | Enhanced polar code constructions by strategic placement of CRC bits |
US10348451B2 (en) | 2016-06-01 | 2019-07-09 | Qualcomm Incorporated | Enhanced polar code constructions by strategic placement of CRC bits |
US11239860B2 (en) | 2016-06-14 | 2022-02-01 | Qualcomm Incorporated | Methods and apparatus for compactly describing lifted low-density parity-check (LDPC) codes |
US11031953B2 (en) | 2016-06-14 | 2021-06-08 | Qualcomm Incorporated | High performance, flexible, and compact low-density parity-check (LDPC) code |
US10469104B2 (en) | 2016-06-14 | 2019-11-05 | Qualcomm Incorporated | Methods and apparatus for compactly describing lifted low-density parity-check (LDPC) codes |
US11496154B2 (en) | 2016-06-14 | 2022-11-08 | Qualcomm Incorporated | High performance, flexible, and compact low-density parity-check (LDPC) code |
US11831332B2 (en) | 2016-06-14 | 2023-11-28 | Qualcomm Incorporated | High performance, flexible, and compact low-density parity-check (LDPC) code |
US11942964B2 (en) | 2016-06-14 | 2024-03-26 | Qualcomm Incorporated | Methods and apparatus for compactly describing lifted low-density parity-check (LDPC) codes |
US11032026B2 (en) | 2016-06-14 | 2021-06-08 | Qualcomm Incorporated | High performance, flexible, and compact low-density parity-check (LDPC) code |
US10291354B2 (en) | 2016-06-14 | 2019-05-14 | Qualcomm Incorporated | High performance, flexible, and compact low-density parity-check (LDPC) code |
US10324785B2 (en) | 2016-07-19 | 2019-06-18 | Samsung Electronics Co., Ltd. | Decoder using low-density parity-check code and memory controller including the same |
US10291359B2 (en) | 2016-07-27 | 2019-05-14 | Qualcomm Incorporated | Of hybrid automatic repeat request (HARQ) feedback bits for polar codes |
CN107959501A (en) * | 2016-10-17 | 2018-04-24 | 上海数字电视国家工程研究中心有限公司 | A kind of LDPC encoder |
US11265014B2 (en) | 2016-11-03 | 2022-03-01 | Huawei Technologies Co., Ltd. | Method and apparatus for encoding and decoding LDPC codes |
EP3533146A4 (en) * | 2016-11-03 | 2019-10-09 | Huawei Technologies Co., Ltd. | Method and apparatus for encoding and decoding ldpc codes |
WO2018084735A1 (en) * | 2016-11-03 | 2018-05-11 | Huawei Technologies Co., Ltd. | Efficiently decodable qc-ldpc code |
US10567002B2 (en) | 2016-11-03 | 2020-02-18 | Huawei Technologies Co., Ltd. | Method and apparatus for encoding and decoding LDPC codes |
EP4224718A1 (en) * | 2016-11-03 | 2023-08-09 | Huawei Technologies Co., Ltd. | Method and apparatus for encoding and decoding ldpc codes |
RU2667772C1 (en) * | 2017-05-05 | 2018-09-24 | Хуавэй Текнолоджиз Ко., Лтд. | Method and device for information processing and communication device |
US11411581B2 (en) | 2017-05-12 | 2022-08-09 | Qualcomm Incorporated | Row orthogonality in LDPC rate compatible design |
US11916571B2 (en) | 2017-05-12 | 2024-02-27 | Qualcomm Incorporated | Row orthogonality in LDPC rate compatible design |
USRE49989E1 (en) | 2017-06-10 | 2024-05-28 | Qualcomm Incorporated | Communication techniques involving pairwise orthogonality of adjacent rows in LPDC code |
US10312939B2 (en) | 2017-06-10 | 2019-06-04 | Qualcomm Incorporated | Communication techniques involving pairwise orthogonality of adjacent rows in LPDC code |
US10355822B2 (en) | 2017-07-07 | 2019-07-16 | Qualcomm Incorporated | Communication techniques applying low-density parity-check code base graph selection |
TWI768085B (en) * | 2017-07-28 | 2022-06-21 | 美商高通公司 | Techniques and apparatuses for low density parity check base graph determination and indication |
US10778249B2 (en) * | 2017-11-30 | 2020-09-15 | Korea University Research And Business Foundation | Method and apparatus for deciding decoding order for shuffled decoding of LDPC codes |
US20190165812A1 (en) * | 2017-11-30 | 2019-05-30 | Korea University Research And Business Foundation | Method and apparatus for deciding decoding order for shuffled decoding of ldpc codes |
US20210367709A1 (en) * | 2018-02-23 | 2021-11-25 | Nokia Technologies Oy | Ldpc codes for 3gpp nr ultra-reliable low-latency communications |
US11973593B2 (en) * | 2018-02-23 | 2024-04-30 | Nokia Technologies Oy | LDPC codes for 3GPP NR ultra-reliable low-latency communications |
US11455208B2 (en) | 2020-08-20 | 2022-09-27 | Western Digital Technologies, Inc. | Soft information for punctured bit estimation in a data storage device |
Also Published As
Publication number | Publication date |
---|---|
JP2016510185A (en) | 2016-04-04 |
EP2957038B1 (en) | 2020-06-10 |
JP5976960B2 (en) | 2016-08-24 |
KR20150118992A (en) | 2015-10-23 |
KR101662747B1 (en) | 2016-10-06 |
CN105075128B (en) | 2018-07-17 |
BR112015019409B1 (en) | 2022-01-11 |
CN104981978B (en) | 2017-12-08 |
US9306601B2 (en) | 2016-04-05 |
BR112015019409A2 (en) | 2017-07-18 |
KR102142142B1 (en) | 2020-08-06 |
JP6542132B2 (en) | 2019-07-10 |
US20140229789A1 (en) | 2014-08-14 |
CN105075128A (en) | 2015-11-18 |
CN104981978A (en) | 2015-10-14 |
EP2957037A1 (en) | 2015-12-23 |
JP2016507200A (en) | 2016-03-07 |
WO2014127129A1 (en) | 2014-08-21 |
EP2957038A1 (en) | 2015-12-23 |
WO2014127140A1 (en) | 2014-08-21 |
KR20150118993A (en) | 2015-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20140229788A1 (en) | Ldpc design for high rate, high parallelism, and low error floor | |
EP3659261B1 (en) | Turbo product code based on polar codes | |
CA2915740C (en) | Method and apparatus for encoding and decoding low density parity check codes | |
US11463114B2 (en) | Protograph quasi-cyclic polar codes and related low-density generator matrix family | |
KR20080031136A (en) | Overlapping sub-matrix based ldpc(low density parity check) decoder | |
EP2690790A1 (en) | Bit interleaving for rotated constellations with quasi-cyclic LDPC codes | |
EP2892157A1 (en) | Offset Min-Sum decoding of LDPC codes | |
KR102546120B1 (en) | Bicm reception device and method corresponding to 4096-symbol mapping and low density parity check codeword with 64800 length, 2/15 rate | |
US8145986B2 (en) | Multi-CSI (Cyclic Shifted Identity) sub-matrix based LDPC (Low Density Parity Check) codes | |
EP2890016A1 (en) | Ldpc encoder and decoder | |
KR102546125B1 (en) | Bicm reception device and method corresponding to 4096-symbol mapping and low density parity check codeword with 64800 length, 3/15 rate | |
Sridharan et al. | Convergence analysis for a class of LDPC convolutional codes on the erasure channel | |
KR20170114406A (en) | Receiver and signal processing method thereof | |
US20160049962A1 (en) | Method and apparatus of ldpc encoder in 10gbase-t system | |
TWI407703B (en) | Multi-code ldpc (low density parity check) decoder | |
CN118694379A (en) | Advanced convergence for decoding of LDPC codes | |
KR102536691B1 (en) | Bicm receiving device for 256-symbol mapping and low density parity check codeword with 16200 length, 10/15 rate, and method using the same | |
KR102611823B1 (en) | Decoding method of parity check matrix by tdmp algorithm of ldpc decoder | |
US8259868B1 (en) | Conditionally cycle-free generalized tanner graphs based decoding | |
Liu | Novel LDPC coding and decoding strategies: design, analysis, and algorithms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: QUALCOMM INCORPORATED, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:RICHARDSON, THOMAS JOSEPH;REEL/FRAME:032244/0653 Effective date: 20140214 |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |