In information theory, a low-density parity-check (LDPC) code, or Gallager code, is an error correcting code. LDPC encoding is a method of transmitting a message over a noisy transmission channel. LDPC codes allow data transmission rates to approach the theoretical maximum of transmitting a message over a noisy transmission channel called the Shannon Limit. LDPC codes are defined by a sparse parity-check matrix, a matrix populated primarily with zeros. This sparse matrix is often randomly generated and may be subject to sparsity constraints.
LDPC code is a block code described with a binary sparse M×N parity-check matrix H. Each row, M, of the matrix H corresponds to a parity check, and each column, N, represents a demodulated symbol. The number of non-zero elements in each row or column may be referred to as a row weight or a column weight, respectively. The LDPC code with uniform row weight and column weight is called a regular code. Otherwise it is an irregular code. An LDPC code is considered (j, k)-regular if every variable node has an equal degree of j check node connections per variable node and every check node has an equal degree of k variable node connections per check node.
An exemplary parity-check matrix H of an LDPC code of length N=10 and dimension M=5 is given by:
where there are two is per column, or per variable node, and there are four is per row, or per check node. The leftmost side of any row in the parity-check matrix H is the start of an LDPC code, and the rightmost side of any row is the end of an LDPC code. As shown in the matrix H, the two 1 s per column means that there are two edge connections per variable node, and the four is per row means that there are four edge connections per check node.
A Tanner graph is a bipartite graph, a graph whose vertices are divided into disjoint sets. An LDPC code may be represented by a Tanner graph between N nodes on one side called variable (or message) nodes corresponding to a set of code-words and M nodes on another side called check (or constraint) nodes corresponding to the set of parity check constraints. Each edge corresponds to a non-zero entry in the parity check matrix. The node information is stored and updated during an iterative LDPC decoding procedure.
A one in the parity-check matrix in row j, j=1, . . . M and in column i, i=1, . . . N represents an edge connection between the i-th variable node vi and the j-th check node cj. The number of edges incident to the i-th variable node vi is called the variable node degree d(vi) which is equal to the number of ones in column i. Similarly, the number of edges connected with the j-th check node cj is called the check node degree d(cj), and is equal to the number of ones in row j. As depicted in
LDPC codes can be effectively decoded by an iterative belief-propagation (BP) algorithm, also known as a sum-product algorithm. The structure of the BP decoding algorithm directly matches the constraints of the conventional Tanner graph 100. Decoding of a message is computed on each conventional variable node 104 and each conventional check node 102 and iteratively communicated through the edge connections between neighboring nodes. During the decoding, belief messages are exchanged along the edge connections, and the information of variable and check nodes is updated.
Generally, LDPC decoder hardware implementations use a fixed-point method. Since the non-linear functions are used in calculation of the BP algorithm, the implementation complexity is relatively high. Conventional decoding systems may use a Very Large Scale Integration (VLSI) solution to decode an LDPC block code. However, typical VLSI solutions may cause message congestion between the check nodes and variable nodes due to routing congestion, especially for the irregular LDPC. Additionally, typical VLSI solutions may cause data congestion due to attempts to simultaneously access the information of the same node.
Embodiments of a system are described. In one embodiment, the system is a receiver to receive a signal associated with a low-density parity-check (LDPC) code. The receiver includes a memory device, an address generator, and an LDPC decoder. The LDPC decoder includes a row designator and a position designator. The memory device stores data related to an LDPC decoding process. The address generator generates an access address to the stored data. The LDPC decoder performs the LDPC decoding process. The row designator designates a row from a parity-check matrix as a parent row and designates a plurality of corresponding rows from the parity-check matrix as child rows. The position designator designates an original position order of each parent non-zero element of the parent row according to an actual position order of each parent non-zero element in the parent row. The actual position order includes a numerical order of the parent non-zero elements. Other embodiments of the system are also described.
Embodiments of an LDPC decoding method are also described. In one embodiment, the method is a method for decoding LDPC codes. The method includes storing data related to an LDPC decoding process. The method also includes generating an access address to the stored data. The method also includes designating a row from a parity-check matrix as a parent row. The method also includes designating a plurality of corresponding rows from the parity-check matrix as child rows. The method also includes designating an original position order of each parent non-zero element of the parent row according to an actual position order of each parent non-zero element in the parent row. The actual position order includes a numerical order of the parent non-zero elements. Other embodiments of the method are also described.
Other aspects and advantages of embodiments of the present invention will become apparent from the following detailed description, taken in conjunction with the accompanying drawings, illustrated by way of example of the principles of the invention.
Throughout the description, similar reference numbers may be used to identify similar elements.
The STiMi Tanner graph 200 of
In an LDPC decoding process, the decoding operations include the local application of Bayes' theorem at each node and the exchange of the messages or results with neighboring nodes. At any given iteration, two types of messages are passed—probabilities or “beliefs” from symbol nodes to check nodes, and probabilities or “beliefs” from check nodes to symbol nodes. The framework of the iterative belief-propagation (BP) algorithm is shown in the STiMi Tanner graph 200 of
Let M(n) denote the set of check nodes connected to variable nodes n, e.g., the positions of ones in the n-th column of H, and let N(m) denote the set of variable nodes that participate in the m-th parity-check equation, e.g., the positions of ones in the m-th row of H. N(m)\n represents the exclusion of n from the set N(m). M(n)\m represents the exclusion of m from the set M(n). In addition, qmn(0) and qmn(1) denote the messages from variable node n to check node m, which indicate the probabilities of symbol n being zero and one, respectively, based on all the checks involving n except m. Similarly, rmn(0) and rmn(1) denote the message from the m-th check node to the n-th symbol node, which indicate the probability of symbol n being zero and one, respectively, based on all the variables checked by m except n. yn represents a word which is modulated by a receiver after transmission through an Additive White Gaussian Noise (AWGN) channel, and Fn is the initial information of a variable node.
and
x=[x1, x2, . . . , xN] denote the transmitted codeword, and y=[y1, y2, . . . , yN] denotes the received word.
During initialization, each variable node n is assigned an a posteriori log-likelihood ratio (LLR), according to the following:
L(xn|yn)=log(P(xn=0|yn)/P(xn=1|yn)
for every position (m, n) such that
During the check-node update, for each m, and for each nεN(m):
where
During the variable node update, for each n:
Finally, for each n:
A quantization of {circumflex over (x)}=[{circumflex over (x)}1, {circumflex over (x)}2, . . . , {circumflex over (x)}N] may be used such that {circumflex over (x)}n=0 if Zn(xn)<0, and {circumflex over (x)}n=1 if Zn(xn)>0. If {circumflex over (x)}HT=0, the process ends, with {circumflex over (x)} determined to be the decoded output. Otherwise the above computations may be repeated. If the algorithm does not halt within some iteration, a decoder failure may be declared.
For the BP-based algorithm, the check-node update step is replaced with:
In the STiMi example, the LDPC code has 2 code rates, ½ and ¾. The code length N is 9,216 bits. One specific configuration is listed in Table 1.
For the ½ rate STiMi example, the non-zero element position of the i-th row in the parity can be traced back to the its parent row with shifting parameter, s:
s=i mod 18.
If the non-zero is the j-th column in the parent row, the number of the position of this non-zero element in the child row, j′, can be computed by the following:
j′=j+s×36
The non-zero position in the parent rows, which is the i-th non-zero element in the row, is referred to as the original position. The node information of the child row is stored according to the original position order, no matter the actual position order. For example, there are six positions, position 0, position 1, position 2, position 3, position 4 and position 5, for the six non-zero elements in each row in the ½ rate STiMi parity-check matrix from the left to the right. In the STiMi parity-check matrix, the column of the sixth non-zero element, “F”, is in the 9189th column of the 5th row, or the fifth parent row. The 1st non-zero element in the 22nd row, the first child row of the 5th row, is generated by “F”. According to the principle of OPNS, the variable and check nodes information for the 22nd row is still stored in the 6th position, position 5, in order to enable an iteration procedure using a modular adder and/or counter.
As depicted in
The output processor 306, in one embodiment, controls a packetizing process, including accessing data, encoding data, and modulating data for transmission. The transmission memory device 308 stores data that is transmitted by the transmitter 302. The data source 310 supplies a portion of data stored in the transmission memory device 308 to include in a packetized transmission packet.
In one embodiment, the LDPC encoder 312 encodes the portion of data supplied by the data source 310 according to an LDPC encoding scheme. In some embodiments, the LDPC encoder encodes a portion of data into a contiguous block of encoded data. The LDPC encoder generates the contiguous block of encoded data of a certain block size for a certain code rate. In some embodiments, the LDPC encoder 312 implements a convolutional LDPC code to encode the transmission packet. A convolutional code is a forward error-correction (FEC) scheme, in which the coded sequence is algorithmically achieved through the use of presently encoded data bits combined with previous encoded data bits from the same portion of data supplied by the data source 110.
In one embodiment, the block interleaver 314 interleaves the encoded data generated by the LDPC encoder 312. Interleaving is a method to protect the transmission against errors by arranging the bits in a non-contiguous order. In one embodiment, the modulator 316 implements an orthogonal frequency division multiple access modulation (OFDMA) scheme to modulate the transmission packet at the physical layer (PHY) and to drive the transmitter antenna 318 with the modulated transmission packet. In some embodiments, the transmitter modulates the transmission packet using Quadrature Phase Shift Keying (QPSK) or other similar modulation. The transmitter antenna 318 then transmits the modulated transmission packet signal to the receiver 304.
As depicted in
The receiver antenna 320 receives the modulated transmission packet transmitted from the transmitter 302. The demodulator 322 senses the modulated transmission packet received by the antenna 320 and de-modulates the modulated transmission packet. In one embodiment, the demodulator 322 is an orthogonal demodulator configured to de-modulate an OFDMA modulated signal. In some embodiments, the demodulator 322 de-modulates a QPSK modulated signal or other similar modulated signal.
Following the demodulation of the modulated transmission packet, in one embodiment, the block de-interleaver 324 de-interleaves the block interleaved patterns applied to the transmission packet. For each block interleaving pattern there is a complementary block de-interleaving scheme.
Following the de-interleaving of the block interleaving patterns, the LDPC decoder 326 decodes each bit segment contained in the received code block according to an LDPC decoding process. As depicted, the LDPC decoder 326 includes a position designator 338, and a row designator 336. In some embodiments, the LDPC decoder 326 determines the cyclical shifting features among the rows and columns in a parity-check matrix. In some embodiments, the LDPC decoder 326 uses the address generator 328 to store, access, and update node information associated with the check nodes 202 and the variable nodes 204 of the LDPC decoding process. The data sink 330 then stores the decoded bits. Other embodiments may implement other types of decoders.
In one embodiment, the LDPC decoder 326 determines the cyclical shifting features among the rows and columns in a parity-check matrix and designates certain rows in the parity-check matrix as parent rows and other rows in the parity-check matrix as child rows. In the STiMi example using the ½ rate, the elements in a row are cyclically shifted 36 columns in the right direction every 18 rows, and the elements in a column are cyclically shifted 18 rows in the down direction every 36 column. For the ¾ rate, the elements in a row are cyclically shifted 72 columns in the right direction every 18 rows, and the elements in a column are cyclically shifted 18 rows in the down direction every 72 columns. Determining the cyclical shifting features among the rows and columns in a parity-check matrix allows node information storage to be addressed according to a row or a column.
An access address is used to access and update non-zero entries in the parity-check matrix. The access address is associated with the number of rows and columns corresponding to a non-zero element in the matrix. The total addresses accessed in LDPC decoding for the STiMi example are 4,608×6 rows+9,216×3 columns for the ½ rate and 2,304×12 rows+9,216×3 columns for the ¾ rate. In one embodiment, the addressing of node information associated with a parent non-zero element is generated with the table lookup (TLU) 344, which is described in more detail below. In the STiMi example, the table size is 108+216 for ½ rate and 216+432 for ¾ rate. The node information associated with a parent non-zero element is stored according to the actual position of the parent non-zero element. The node information associated with a child non-zero element is stored according to original position of a corresponding parent non-zero element. Storing the node information of a child non-zero element according to the original position of the corresponding parent non-zero element allows the addressing of node information associated with the child non-zero element to be generated by the modular adder 340 and/or the counter 342.
In some embodiments, the row designator 336 designates a row from a parity-check matrix as a parent row. The parent row includes an LDPC code word with a certain number of non-zero elements. In some embodiments, the row designator 336 designates other rows from the parity-check matrix as child rows. Each child row comprises a cyclically shifted version of the LDPC code word of the parent row. In some embodiments, the position designator 338 designates an original position order of each parent non-zero element of the parent row according to an actual position order of each parent non-zero element in the parent row. The actual position order is a numerical order of the parent non-zero elements from a first position at a leftmost parent non-zero element in an LDPC code word to a last position at a rightmost parent non-zero element in the LDPC code word. In some embodiments, the position designator 338 correlates a child non-zero element in a child row to the original position order of the parent non-zero element that corresponds to the child non-zero element.
The depicted address generator 328 includes at least one modular adder 340, and at least one counter 342. The depicted receiver memory device 332 includes a table lookup (TLU) 344. The LDPC decoder 326 implements the address generator 328 and the memory device 332 in the LDPC decoding process. In particular, the LDPC decoder 326 implements the TLU 344 to generate addressing information for a parent row of the parity-check matrix. In other words, in some embodiments, the TLU 344 provides access addresses only for the parent rows of the parity-check matrix. In some embodiments, the LDPC decoder 326 implements the modular adder 340 and the counter 342 to generate addressing information for a child row according to the address information generated by the TLU 344 for a parent row that corresponds to the child row.
In one embodiment, the depicted address generator 328 generates an address for an LDPC process of the LDPC decoder 326. In some embodiments, the modular adder 340 is implemented in software and/or hardware. In some embodiments, the modular adder 340 is an adder integrated-circuit (IC). In some embodiments, the address generator 328 uses at least one modular adder 340 to generate an address for an LDPC decoding process by the LDPC decoder 326. In some embodiments, the modular adder 340 generates an address associated with a child row of the parity-check matrix. In some embodiments, the LDPC decoder 326 uses the TLU 344 to generate an address of a parent row of the parity-check matrix and uses the modular adder 340 to generate an address of a child row according to the address generated by the TLU 344 for a corresponding parent row. In some embodiments, the LDPC decoder 326 uses the TLU 344 and the modular adder 340 in an initial procedure of the LDPC decoding process such as storing the initial node information of a parent non-zero element according to the actual position order of the parent non-zero element, and storing the initial node information of a child non-zero element according to the original position of the corresponding parent non-zero element.
In one embodiment, the counter 342 is implemented in software, firmware, hardware, or a combination thereof. In some embodiments, the counter 342 is a counter integrated-circuit (IC). In some embodiments, the address generator 328 uses at least one counter 342 to generate an address for an LDPC decoding process of the LDPC decoder 326. In some embodiments, the counter 342 generates an address associated with a child row of the parity-check matrix. In some embodiments, the LDPC decoder 326 uses the TLU 344 to generate an address of a parent row of the parity-check matrix and uses the counter 342 to generate an address of a child row according to the address generated by the TLU 344 for a corresponding parent row. In some embodiments, the LDPC decoder 326 uses the TLU 344 and the counter 342 in an updating procedure of the LDPC decoding process following the initial procedure. In some embodiments, the TLU 344 generates an offset to access and update the node information of a parent row. In some embodiments, the LDPC decoder 326 uses the counter 342 in conjunction with the offset generated by the TLU to access and update the node information of a child row.
In one embodiment, the LDPC decoder 326 finds the values of certain unknown or indecipherable variable nodes, bits of a data block that were corrupted during transmission from the transmitter 302 to the receiver 304. Using the STiMi Tanner graph of
In some embodiments, the memory devices 308 and 332 are random access memory (RAM) or another type of dynamic storage device. In other embodiments, the memory devices 308 and 332 are read-only memory (ROM) or another type of static storage device. In other embodiments, the illustrated memory devices 308 and 332 are representative of both RAM and static storage memory within the LDPC system 300. In some embodiments, the memory devices 308 and 332 are content-addressable memory (CAM). In other embodiments, the memory devices 308 and 332 are electronically programmable read-only memory (EPROM) or another type of storage device. Additionally, some embodiments store instructions as firmware such as embedded foundation code, basic input/output system (BIOS) code, LDPC decoding code, modular adder code, node information storage code, and other similar code.
In some embodiments, the receiver memory device 332 is configured to store a parity-check matrix associated with a received data block. In some embodiments, the receiver memory device 332 is configured to store node information associated with a parent row of the parity-check matrix. In some embodiments, the receiver memory device 332 is configured to store node information associated with a child row of the parity-check matrix. In some embodiments, the receiver memory device 332 is configured to store the node information associated with a child non-zero element according to the original position of the parent non-zero element that corresponds to the child non-zero element regardless of the actual position of the child non-zero element in the child row. In the case that the de-interleaving and LDPC decoding are successful, i.e., the de-interleaved and decoded bits are decipherable and no errors are detected, then the bits are stored in the receiver memory device 332 or transferred to upper layers (L2/L3) for further processing.
The input processor 334, in one embodiment, computes a calculation associated with the LDPC decoding process. In some embodiments, the processors 306 and 334 are central processing units (CPUs) with one or more processing cores. In other embodiments, the processors 306 and 334 are network processing units (NPUs) or another type of processing devices such as general purpose processors, application specific processors, multi-core processors, or microprocessors. Alternatively, at least one separate processor may be coupled to the LDPC decoder 326 and/or address generator 328. In general, the processors 306 and 334 execute one or more instructions to provide operational functionality to the transmitter 302 and receiver 304, respectively. The instructions may be stored locally in the processors 302 and 304 or in the memory devices 308 and 332. Alternatively, the instructions may be distributed across one or more devices such as the processors 306 and 334, the memory devices 308 and 332, or another data storage device.
For the variable node updating procedure, 216 and 432 offset points are used for ½ and ¾ rate respectively. This is achieved with the TLU 344. In some embodiments, a parent row of a variable node is updated simultaneously. In order to achieve a relatively higher decoding speed, parallel processing may be implemented. Thus, variable node updating is performed simultaneously for every row in the H matrix. Thus, 12 and 24 check nodes may be accessed simultaneously for ½ and ¾ rate respectively, which can be obtained with 12 or 24 offset points generated by the TLU 344. For OPNS, the check node information required for its first child row can be accessed with offset points plus one, and the check node information required for the second child row can be accessed with offset points plus two. Thus, all of the check node information can be accessed and updated by using the counter 342, of which the offset point generated by the TLU 344 is the initial value. For example, when the variable information stored in the first cell of M0-Z is updated, the offset points are 256 of M0-Z and 0 of M6-Z. That is, the check node information stored in the 257th cell of M0-Z and the 1st cell of M6-Z is used to update the variable node stored in the 1st cell of M0-Z. When the variable information stored in the second cell of M0-Z is updated, the check node information stored in the 258th cell of M0-Z and the 2nd cell of M6-Z is used to update the variable node stored in the 2nd cell of M0-Z. That is, the accessing address is the offset point plus one. Thus, all of the variable node information updating can be performed by the counter 342, of which the offset point will be the initial value.
In some embodiments, each variable node memory block of the variable node information storage scheme 400 contains variable node information associated with the non-zero elements of two parent rows and the associated child rows of the two parent rows. For example, the first row of variable node memory blocks 402 contains the variable node information associated with the non-zero elements of the first and second parent rows and the child rows associated with the first and second parent rows. In the exemplary STiMi LDPC decoding process, there are 18 parent rows in the parity-check matrix. Thus, the variable node information storage scheme 400 from the STiMi example includes 9 rows of variable node memory blocks with two parent rows per row. The variable node information for each parent row and child row is stored according to the original position of the parent row's non-zero elements. For example, the first non-zero element of the first parent row, row 1 in the parity-check matrix, is stored in the Position 0 memory block of the first row 402 of variable node memory blocks. Thus, all first non-zero elements of each parent row are stored in Position 0, all second non-zero elements of each parent row are stored in Position 1, and so on, each non-zero element stored in the appropriate row of memory blocks. In the exemplary STiMi LDPC decoding process, there are 255 child rows that correspond to each of the 18 parent rows in the parity-check matrix, for a total of 4,608 total rows. Likewise, each non-zero element of a child row that corresponds to the first parent row is stored according to the position of the child non-zero element as it relates to the position of the parent non-zero element, the original position, not the actual position of the child non-zero element in the child row.
There are six non-zero elements per row of the STiMi parity-check matrix, thus there are six positions in the variable node information storage scheme 400 of
In one embodiment, there are 54 memory blocks in the variable node information storage scheme 400, 6 memory blocks per row, and 9 rows. Each memory block includes 512 memory cells, cell-0 through cell-511. Alternatively, the variable node information storage scheme 400 includes less or more memory blocks with less or more memory cells per memory block.
In one embodiment, the node information associated with the first non-zero element of the 1st parent row of the parity-check matrix is stored in the first cell, cell-o, of the first memory block column, Position 0, in the first row 402 of variable node memory blocks. The node information associated with the second non-zero element of the 1st parent row of the parity-check matrix is stored in the first cell, cell-0, of the second memory block column, Position 1, in the first row 402 of variable node memory blocks, and so on. The node information associated with the child non-zero element of the 19th row that corresponds to the first parent non-zero element of the first parent row is stored in the second cell, cell-1, of the first memory block column, Position 0, in the first row 402 of the variable node memory blocks. The node information associated with the child non-zero element of the 19th row that corresponds to the second parent non-zero element of the first parent row is stored in the second cell, cell-1, of the second memory block column, Position 1, in the first row 402 of the variable node memory blocks, and so on. The node information associated with the child non-zero element of the 37th row that corresponds to the first parent non-zero element of the first parent row is stored in the third cell, cell-2, of the first memory block column, Position 0, in the first row 402 of the variable node memory blocks. The node information associated with the child non-zero element of the 37th row that corresponds to the second parent non-zero element of the first parent row is stored in the third cell, cell-2, of the second memory block column, Position 1, in the first row 402 of the variable node memory blocks, and so on.
Furthermore, the node information associated with the first non-zero element of the 2nd parent row of the parity-check matrix is stored in the two hundred fifty seventh cell, cell-256, of the first memory block column, Position 0, in the first row 402 of the variable node memory blocks. The node information associated with the second non-zero element of the 2nd parent row of the parity-check matrix is stored in the two hundred fifty seventh cell, cell-256, of the second memory block column, Position 1, in the first row 402 of the variable node memory blocks, and so on. In other words, the variable node information associated with the first non-zero element of the 1st parent row and every child non-zero element that corresponds to a cyclical shifted version of the first non-zero element of the 1st parent row are stored, in respective row order, in the first 256 cells of the first memory block column, Position 0, in the first row 402 of the variable node memory blocks. The node information associated with the second non-zero element of the 1st parent row and every child non-zero element that corresponds to a cyclical shifted version of the second non-zero element of the 1st parent row are stored, in respective row order, in the first 256 cells of the second memory block column, Position 1, in the first row 402 of the variable node memory blocks, and so on.
Storing and accessing node information for a parity-check matrix may include thousands or tens of thousands of storage and accessing routines to the receiver memory device 332 per iteration of the LDPC decoding process. Storing the node information associated with a particular non-zero element of a parent row in consecutive cells of a single memory block according to the original position of the non-zero element in the respective parent row allows the address generator 328 to generate an address for the LDPC decoding process with the modular adder 340 and/or counter 342. In some embodiments, the receiver memory device 332 includes the variable node memory blocks of the variable node information storage scheme 400. Alternatively, the variable node memory blocks of the variable node information storage scheme 400 are included in a separate and/or dedicated memory device. In some embodiments, the variable node memory blocks of the variable node information storage scheme 400 are distributed over several dedicated memory devices.
In the STiMi example, there are 6 ones per row of the parity-check matrix, and so there are six columns of memory block in the depicted STiMi check node information storage scheme 500. Alternatively, some variable node information storage schemes have less or more columns of memory blocks.
In some embodiments, the storage routine of the check node information storage scheme 500 is substantially similar to the storage routine of the variable node information storage scheme 400 with reference to
For the check node updating procedure, a check node receives variable node information and updates the check node information row by row. For example, the variable node information stored in the first cell of the memory blocks in
In some embodiments, each check node memory block of the check node information storage scheme 500 contains check node information associated with the non-zero elements of two parent rows and the associated child rows of the two parent rows. For example, the first row 502 of check node memory blocks contains the check node information associated with the non-zero elements of the first and second parent rows and the child rows associated with the first and second parent rows. In the exemplary STiMi LDPC decoding process, there are 18 parent rows in the parity-check matrix. Thus, the check node information storage scheme 500 of
In some embodiments, the receiver memory device 332 includes the check node memory blocks of the check node information storage scheme 500. Alternatively, the check node memory blocks of the check node information storage scheme 500 are included in a separate and/or dedicated memory device. In some embodiments, the check node memory blocks of the check node information storage scheme 500 are distributed over several dedicated memory devices.
Out of the total 4,608 rows in the STiMi parity-check matrix, the first 18 rows of are designated as parent rows. The subsequent rows in the parity-check matrix are designated as children rows, or child rows. Each child row is the cyclically shifted version of one of the parent rows. In the STiMi example, each parent row correlates to 255 child rows. Furthermore, each non-zero element of a certain child row, or child non-zero element, correlates with a parent non-zero element of a correlated parent row. The actual position of each parent non-zero element such as first, second, third, fourth, fifth, or sixth position is referred to as the original position. The node information relating to a parent non-zero element is stored according to the detected actual position of each parent non-zero element. Likewise, the node information relating to a child non-zero element is stored according to the original position order of the correlated parent non-zero element, regardless of the actual position order of the child non-zero element in a child row of the parity-check matrix. In other words, the first parent non-zero element of a particular parent row correlates to one of the child non-zero elements of a particular child row. However, the child non-zero element that correlates to the first parent non-zero element may be in any order on the child row such as the third non-zero element of the particular child row. Even though the actual position of the correlated child non-zero element may be the third position, the third child non-zero element of a child row is stored in the first position memory block when it correlates with the parent non-zero element that is in the first position, or whose original position is the first position.
The node information, including variable nodes 204 and check nodes 202, are stored and updated in the row order. During the initial procedure of the LDPC decoding process of the STiMi example, 108 and 216 column numbers for the parent rows, the accessing addresses, are obtained from the TLU 344 for ½ and ¾ rate respectively, while the accessing address for children rows are generated with the modular adder 340. For the check node updating procedure, the check node information is updated row by row based on variable node information passed by a variable node 204. For the STiMi variable node updating procedure, 216 and 432 offset points are generated by the TLU 344 and used for ½ and ¾ rate, respectively. In one embodiment, a parent row of the variable node 204 is updated simultaneously. Thus, information from 12 and 24 check nodes 202 is used for ½ and ¾ rate respectively, which can be obtained with 12 or 24 offset points generated by the TLU 344. For OPNS, the check node information for the first child row is accessed with offset points plus one, and the check node information for the second child row is accessed with offset points plus two, and so on. Thus, the variable information is obtained by the counter 342, for which the offset point is the initial value.
At block 604, the OPNS position designator 338 determines an actual position of a parent non-zero element in the parity-check matrix and designates the actual position of the parent non-zero element as an original position of the parent non-zero element.
At block 606, the row designator 336 correlates each child row with a parent row. The row designator 336 also correlates a child non-zero element with the original position of the corresponding parent non-zero element of the correlated parent row. In other words, using the STiMi example, the actual order of the positions of the six non-zero elements of the 1st row in the STiMi parity-check matrix, the first parent row, are designated as original positions 1-2-3-4-5-6. Likewise, the non-zero elements of each row of the first 18 rows of the parity-check matrix are designated as original positions 1-2-3-4-5-6. However, regardless of the actual order of the positions of the six non-zero elements of each child row, each child non-zero element is correlated with a corresponding parent non-zero element.
At block 608, the LDPC decoder 326 stores node information associated with a parent non-zero element according to the original position of the parent non-zero element. Storing the parent node information according to the original position of the parent non-zero elements allows the LDPC decoder 326 to access and update the parent node information via the TLU 344.
At block 610, the LDPC decoder 326 stores node information associated with the child non-zero element according to the original position of the correlated parent non-zero element. Storing the child node information according to the original position of the correlated parent non-zero elements allows the LDPC decoder 326 to access and update the child node information via the modular adder 340. At block 612, the LDPC decoder 326 uses the counter 342 to generate an access address associated with stored node information of an LDPC decoding process according to an offset generated by the TLU 344.
In one embodiment, the OPNS method 600 is implemented for the BP algorithm. In some embodiments, a BP-based algorithm is implemented. Modifications of the BP-based algorithm such as the offset BP-based algorithm and the normalized BP-based algorithm may be used in order to approach the performance of the BP algorithm. In some embodiments, the OPNS method 600 is implemented with the BP-based, the Log-BP, the Log-BP-based, the normalized BP-based, the offset BP-based and/or other variations of the belief propagation algorithm. In some embodiments, the OPNS method 600 is implemented with an LDPC decoder 326 designed to operate in a serial mode. In some embodiments, the OPNS method 600 is implemented with an LDPC decoder 326 designed to operate in a parallel mode. Embodiments of the OPNS method 600 reduce the memory requirements of an LDPC decoding process. Furthermore, embodiments of the OPNS method 600 reduce the complexity of the address generator 328 based on the structure and properties of the LDPC code compared with conventional techniques.
It should also be noted that at least some of the operations for the methods may be implemented using software instructions stored on a computer useable storage medium for execution by a computer. As an example, an embodiment of a computer program product includes a computer useable storage medium to store a computer readable program that, when executed on a computer, causes the computer to perform operations, including an operation to access and update node information associated with a parent row of the parity-check matrix via the TLU 344, an operation to access and update node information associated with a child row of the parity-check matrix via the modular adder 344, and an operation to store node information associated with a child non-zero element according to the original position of the parent non-zero element that corresponds to the child non-zero element. As described above, an access address used for node information updating can be generated with the counter 342 in the OPNS method 600. The modular adder 340 and the counter 342 consume less silicon than the TLU 344. In OPNS, only the parent rows are generated with the TLU 344. Generating only the parent addresses with the TLU 344 reduces the size of the TLU 344, and generating the child addresses with the modular adder 340 and/or counter 342 consumes less silicon than generating addresses only with the TLU 344. The complexity of the storage and memory access processes of the iterative LDPC decoding procedure is simplified and memory access times are reduced, substantially minimizing the processing time of an LDPC process.
Embodiments of the invention can take the form of an entirely hardware embodiment, an entirely software embodiment, or an embodiment containing both hardware and software elements. In one embodiment, the invention is implemented in software, which includes but is not limited to firmware, resident software, microcode, etc.
Furthermore, embodiments of the invention can take the form of a computer program product accessible from a computer-usable or computer-readable storage medium providing program code for use by or in connection with a computer or any instruction execution system. For the purposes of this description, a computer-usable or computer readable storage medium can be any apparatus that can store the program for use by or in connection with the instruction execution system, apparatus, or device.
The computer-useable or computer-readable storage medium can be an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system (or apparatus or device), or a propagation medium. Examples of a computer-readable storage medium include a semiconductor or solid state memory, magnetic tape, a removable computer diskette, a random access memory (RAM), a read-only memory (ROM), a rigid magnetic disk, and an optical disk. Current examples of optical disks include a compact disk with read only memory (CD-ROM), a compact disk with read/write (CD-R/W), and a digital video disk (DVD).
An embodiment of a data processing system suitable for storing and/or executing program code includes at least one processor coupled directly or indirectly to memory elements through a system bus such as a data, address, and/or control bus. The memory elements can include local memory employed during actual execution of the program code, bulk storage, and cache memories which provide temporary storage of at least some program code in order to reduce the number of times code must be retrieved from bulk storage during execution.
Input/output or I/O devices (including but not limited to keyboards, displays, pointing devices, etc.) can be coupled to the system either directly or through intervening I/O controllers. Additionally, network adapters also may be coupled to the system to enable the data processing system to become coupled to other data processing systems or remote printers or storage devices through intervening private or public networks. Modems, cable modems, and Ethernet cards are just a few of the currently available types of network adapters.
Although the operations of the method(s) herein are shown and described in a particular order, the order of the operations of each method may be altered so that certain operations may be performed in an inverse order or so that certain operations may be performed, at least in part, concurrently with other operations. In another embodiment, instructions or sub-operations of distinct operations may be implemented in an intermittent and/or alternating manner.
Although specific embodiments of the invention have been described and illustrated, the invention is not to be limited to the specific forms or arrangements of parts so described and illustrated. The scope of the invention is to be defined by the claims appended hereto and their equivalents.
Number | Date | Country | Kind |
---|---|---|---|
61073433 | Jun 2008 | US | national |
Filing Document | Filing Date | Country | Kind | 371c Date |
---|---|---|---|---|
PCT/IB2009/052592 | 6/18/2009 | WO | 00 | 3/25/2011 |