Decoding algorithm with enhanced parity check matrix and re-encoding scheme for LDPC code

09973212 ยท 2018-05-15

Assignee

Inventors

Cpc classification

International classification

Abstract

A decoding algorithm with an enhanced parity check matrix and a re-encoding scheme for LDPC codes is disclosed. The decoding algorithm includes the steps of: providing the enhanced parity check matrix; receiving a message part of an original codeword encoded by a generator matrix from the enhanced parity check matrix; setting a LLR for each bit node of the enhanced parity check matrix; processing hard decision on the message part of the original codeword; encoding the message part of the original codeword by the generator matrix to generate a new codeword having a generated parity part; comparing the original parity part with the generated parity part to find out bits of difference; voting candidate error bits to choose the most probably erratic bits; modifying LLR of the chosen bits to have a modified codeword; and processing a conventional iterative decoding procedure on the modified codeword to have a processed codeword.

Claims

1. A computer-implemented method of decoding a Low Density Parity Check (LDPC) code with an enhanced parity check matrix and a re-encoding scheme to decrease decoding iteration of the LDPC code and shorten decoding latency, comprising the steps of: A. providing the enhanced parity check matrix which is formed by a plurality of sub-matrixes, wherein a first identity matrix in a specific location; B. receiving a message part of an original codeword encoded by a generator matrix from the enhanced parity check matrix with at least one bit is corrupted; C. setting a Log-Likelihood Ratio (LLR) for each bit node of the enhanced parity check matrix while keeping receiving an original parity part of the original codeword; D. processing hard decision on the message part of the original codeword; E. encoding the message part of the original codeword by the generator matrix to generate a new codeword having a generated parity part; F. comparing the original parity part with the generated parity part to find out bits of difference; G. voting candidate error bits to choose the most probably erratic bits; H. modifying LLR of the chosen bits to have a modified codeword; and I. processing a conventional iterative decoding procedure on the modified codeword to have a processed codeword, wherein the enhanced parity check matrix, H.sub.enhanced, has a form of
H.sub.enhanced=[H.sub.1|H.sub.2], wherein each sub-matrix is a zero matrix, an identity matrix or a shifted matrix which has all 1s in an identity matrix shifted to the right side a certain times; arrangement of identity matrixes in H.sub.2 is a dual-diagonal structure; a first column of sub-matrixes in H.sub.2 is close to H.sub.1; a first sub-matrix located first from the top of the first column and a last sub-matrix located last from the top of the first column are both identity matrixes or shifted matrixes; sub-matrixes between the first sub-matrix and the last sub-matrix are zero matrixes and the first identity matrix; the first identity matrix is located closer to the last sub-matrix than the first sub-matrix.

2. The computer-implemented method according to claim 1, further comprising the steps of, after step I: J. judging if a preset number of iteration is reached or a product of the enhanced parity check matrix and the processed codeword equals zero; and K. if a result of step J is no, repeating the procedure from step D with the processed codeword; if the result of step J is yes, outputting a message part of the processed codeword.

3. The computer-implemented method according to claim 1, wherein the first identity matrix is located next to the last sub-matrix.

4. The computer-implemented method according to claim 1, wherein the LLR for each bit node is available by LLR = 2 2 y k , where y.sub.k is received signal of any one bit in the message part of the original codeword and is variance of all received signals; k is any integer.

5. The computer-implemented method according to claim 1, wherein a voting means works for voting candidate error bits.

6. The computer-implemented method according to claim 1, wherein the LLR is modified by changing magnitude thereof or sign.

7. The computer-implemented method according to claim 1, wherein the conventional iterative decoding procedure is Sun-Product Algorithm (SPA).

Description

BRIEF DESCRIPTION OF THE DRAWINGS

(1) FIG. 1 is a flow chart of a decoding algorithm for LDPC codes disclosed by the present invention.

(2) FIG. 2 shows a 960480 parity check matrix used as an IEEE 802.16e standard.

(3) FIG. 3 shows differences between an identity matrix and a shifted matrix.

(4) FIG. 4 shows a 960480 enhanced parity check matrix used by the present invention.

(5) FIG. 5 shows an example of grouping the rows of bits and the parity bits of a parity check matrix for (40,20) LDPC codes.

(6) FIG. 6 is a table about location of different bits found and associated situation of error of bits.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

(7) The present invention will now be described more specifically with reference to the following embodiments.

(8) Please refer to FIG. 1. FIG. 1 is a flow chart of a decoding algorithm for LDPC codes with an enhanced parity check matrix and a re-encoding scheme disclosed by the present invention. The basic concept of the proposed algorithm is very simple. The parity bits are generated from message bits. So they contain the information about the message bits. If a codeword transmit through AWGN (Additive White Gaussian Noise) channel, it could be incorrect because of the noise. Since noise is independent, errors of the message bits are not associated with the errors of the parity bits. Hence, if we regenerate the parities with the received message bits, the regenerated parities will contain the information of error message bits, but not the information of error parity bits. The received parities will only contain the information of error parity bits. Therefore, we can compare them to find out the errors and correct them.

(9) According to the present invention, the first step is to provide the enhanced parity check matrix (H.sub.enhanced will be used to illustrate the enhanced parity check matrix in any equation hereinafter) mentioned above which is formed by a number of sub-matrixes. Among these sub-matrixes, a first identity matrix is in a specific location (S01). In order to have better understanding about the enhanced parity check matrix, please refer to FIG. 2. FIG. 2 shows a 960480 parity check matrix, H.sub.16e, used as an IEEE 802.16e standard. The H.sub.16e is composed of two portions. It can be illustrated as H.sub.16e=[H.sub.1|H.sub.2]. H.sub.enhanced and H.sub.16e are alike in structure. Thus, H.sub.16e is composed of a number of sub-matrixes. Each sub-matrix can be a zero matrix, an identity matrix or a shifted matrix. The shifted matrix has all 1 s in an identity matrix shifted to the right side a certain times. Please see FIG. 3. FIG. 3 shows differences between an identity matrix and a shifted matrix. On the left side of FIG. 3 is a 1010 identity matrix. If all 1 s in the identity matrix are shifted to the right side (column) three times, we will get the shifted matrix on the right side of FIG. 3. Come back to FIG. 2. In order to know how many times the shifted matrixes shift and where the sub-matrixes are zero matrixes, a notation is used. Numbers are marked in each frame in the H.sub.16e. Each frame refers to a corresponding sub-matrix. If the number is 0, the sub-matrix is an identity matrix. If the number is 1, the sub-matrix is a zero matrix. If the number is a positive integer, the positive integer is the number all 1 s an identity matrix shifted to the right side. Because the size of the sub-matrix is 4040 in this case, the maximal positive integer is 39.

(10) Arrangement of identity matrixes in H.sub.2 is a dual-diagonal structure. As marked in a darker background color, the identity matrixes forms two diagonals from top left to bottom right. A first column of sub-matrixes (enclosed by a dashed frame) is close to H.sub.1. A first sub-matrix is located first from the top of the first column. In FIG. 2, the first sub-matrix is a shifted matrix with all 1 s shifted to right side twice (the positive integer is 2 in the frame representing the first sub-matrix and enclosed by a circle). A last sub-matrix is located last from the top of the first column. The last sub-matrix is also a shifted matrix with all 1s shifted to right side twice (the positive integer is 2 in the frame representing the last sub-matrix and enclosed by a square). The first sub-matrix and the last sub-matrix are both identity matrixes or both shifted matrixes. Sub-matrixes between the first sub-matrix and the last sub-matrix are zero matrixes and the first identity matrix. For H.sub.16e, the first identity matrix is located in the 6.sup.th sub-matrix location from the top of the first column. According to the present invention, the difference between the H.sub.16e and the H.sub.enhanced is that the first identity matrix of the H.sub.enhanced is located closer to the last sub-matrix than the first sub-matrix. Preferably, the first identity matrix of the H.sub.enhanced is just located next to the last sub-matrix as shown in FIG. 4. By simulation, the closer the first identity matrix is located from the last sub-matrix, the easier the error bits can be chosen in the following steps.

(11) Next, receive a message part of an original codeword which was encoded by a generator matrix from the enhanced parity check matrix. (S02). In step S02, the received original codeword has at least one bit is corrupted due to noise in the channel it was transmitted. It should noticed that for the original codeword, the corrupted bits (or error bits) may in the message part, in an original parity part (original used here is to distinguish from other parity part illustrated later) received later or both in the message part and the original parity part. The decoding algorithm takes all situations into consideration, not only the error bits in the message part.

(12) Then, set a Log-Likelihood Ratio (LLR) for each bit node of the enhanced parity check matrix while keeping receiving the original parity part of the original codeword (S03). The LLR for each bit node is available by

(13) LLR = 2 2 y k ,
where y.sub.k is received signal of any one bit in the message part of the original codeword and is variance of all received signals. Numeral k can be any positive integer. In the example of original codeword, k is 480 since there is 480 message bits in the original codeword. Next, process hard decision on the message part of the original codeword (S04). It means the message bits are confirmed now although they might be wrong after transmitting.

(14) In a step S05, encode the message part of the original codeword by the generator matrix to generate a new codeword which has a generated parity part. Now, there are two parity parts available, the original parity part and the generated parity part. Then, compare the original parity part with the generated parity part to find out bits of difference (S06).

(15) In a next step, vote candidate error bits to choose the most probably erratic bits (S07). A voting means works for voting candidate error bits. Before the voting means is introduced, a grouping operation should be done to the H.sub.enhanced. Take FIG. 4 for example. The grouping operation can be separated into two parts, grouping the rows of bits and grouping the parity bits. For grouping the rows of bits, first, take the first row of each sub-matrix row. Then we can get 12 rows of bits. They are the 1.sup.st, 41.sup.st, 81.sup.st, 121.sup.st, 161.sup.st, 201.sup.st, 241.sup.st, 281.sup.st, 321.sup.st, 361.sup.st, 401.sup.st and 441.sup.st rows of bits in the H.sub.enhanced. Then, group the rows of bits as a first row group, G.sub.1.sup.r. Next, take the second row of each sub-matrix row. 12 rows of bits will be available. They are the 2.sup.nd, 42.sup.nd, 82.sup.nd, 122.sup.nd, 162.sup.nd, 202.sup.nd, 242.sup.nd, 282.sup.nd, 322.sup.nd 362.sup.nd, 402.sup.nd and 442.sup.nd rows of bits in the H.sub.enhanced. Group the rows of bits as a second row group, G.sub.2.sup.r. Keep grouping the rows of bits and 40 row groups are obtained. Let G.sub.i.sup.r where i=1, 2, . . . or 40 representing each row group and the i.sup.th group contains the (i+nb).sup.th row, where n is an integer from 0 to 11 and b is the sub-matrix size of 40. Name the i.sup.th row of bits as the first row in the i.sup.th row group, G.sub.i.sup.r, and the (40+i).sup.th row of bits is the second row in G.sub.i.sup.r, and so on. The (i+jb).sup.th row is the j.sup.th row in G.sub.i.sup.r.

(16) For grouping the parity bits, first, group the (1+nb).sup.th column of parity bits of the H.sub.enhanced as a first parity bit group G.sub.1.sup.p. Secondly, group the (2+nb).sup.th column of parity bits of the H.sub.enhanced as a second parity bit group. Keep grouping until all columns are grouped in one of the parity bit group. There are 40 parity bit groups of parity bits, G.sub.i.sup.p, obtained where i=1, 2, . . . 40. The i.sup.th parity bit group, G.sub.i.sup.p, contains the (1+nb).sup.th parity bits, where n is an integer from 0 to 11. The i.sup.th parity bit in one row is the first bit in the row of the i.sup.th parity bit group, the (40+i).sup.th parity bit in one row is the second bit in the row of the i.sup.th parity bit group, and so on. The (i+jb).sup.th parity bit in one row is the j.sup.th bit in the row of the i.sup.th parity bit group. FIG. 5 shows an example of grouping the rows of bits and the parity bits of a parity check matrix for (40,20) LDPC codes. It should be noticed that in the message part, H.sub.message, the arrangement of bits of 1 or 0 are not shown. However, in the parity part, H.sub.parity, a frame with 1 inside represents a bit of 1 in that location while a frame with nothing inside represents a bit of 0 in that location. In the each parity bit group, any difference (bit) between the received bits in the parity part and the bits in generated parity part correspond to the row that has a bit of 1.

(17) Come back to step S07. After the bits in the enhanced parity check matrix are grouped according to what have been discussed above, based on computing and simulating, the voting means can be found that can recognize which bits are probable errors and votes are done. As receiving the original parity part of the original codeword, the generated parity bits and the received original parity bits can be compared. Potential error bits can be located according to FIG. 6. It is a table about location of different bits found and associated situation of error of bits.

(18) In FIG. 6, if the m.sup.th generated parity bit is the same as the m.sup.th original parity bit, and the (m+1).sup.th and the (m+2).sup.th generated parity bits are also the same as the original parity bits (0 in each field shows two corresponding bits are the same and 1 in each field shows two corresponding bits are different) in corresponding locations, it is confirmed that there might be no message bit error in the original codeword in the m.sup.th row of the row group. It should be noticed that, for the condition that errors occurred, location of the error bits correspond to 1s in a specific row of the row group. If the m.sup.th generated parity bit is the same as the m.sup.th original parity bit, the (m+1).sup.th generated parity bit is also the same as the (m+1).sup.th original parity bit, but the (m+2).sup.th generated parity bit is different from the (m+2).sup.th original parity bit, it is not able to know which bit is error now. If the m.sup.th and the (m+2).sup.th generated parity bits are the same as the m.sup.th and the (m+2).sup.th original parity bit, but the (m+1).sup.th generated parity bit is different from the (m+1).sup.th original parity bit, it means the (m+1).sup.th parity bit corresponding to 1 in the row group might be error. And if the m.sup.th generated parity bit is the same as the m.sup.th original parity bit, but the (m+1).sup.th and (m+2).sup.th generated parity bits are different from the (m+1).sup.th and (m+2).sup.th original parity bits, respectively, it means there might be a message bit error corresponding to 1 in the m.sup.th row of the row group.

(19) Although it is able to tell that the errors might be in which row, it is not known that the errors exactly locate in which bit. For example, if it is known that there is an error in the first row of the first row group, it means the 80.sup.th, 111.sup.st, 183.sup.th, 254.sup.th message bits might be errors. But if it is also known that there is an error in the second row of the 29th row group, that means the 80.sup.th, 239.sup.st, 262.sup.th, 413.sup.th message bits might be errors. Concluding all the information above, we can know that the 80.sup.th bit is most likely being erratic. So the voting means applies voting scheme to the candidate error bits and pick the most likely error bits. If there is a message bit error in the m.sup.th row, it is voted one to a count of the bits which are on the position of 1 in the row. If there is no message bit error in the m.sup.th row, one is deducted from the voting count to the bits which are on the position of 1 in the row. After voting, since it is assumed that every row has at most one 1 corresponding to the bit error, a bit has the most votes in the row is chosen as the most likely error bit. Collect all most likely error bits in the row group. Because the row weight of the parity matrix is 4 or 5, the average number of error bits in a row is less than 0.5 if SNR is above 2.

(20) The next step is to modify LLR of the chosen bits to have a modified codeword (S08). The LLR may be modified by changing its magnitude or sign. It is not limited by the present invention. Now, some bits in the modified codeword are flipped. Then, process a conventional iterative decoding procedure on the modified codeword to have a processed codeword (S09). In the present embodiment, the conventional iterative decoding procedure is Sun-Product Algorithm (SPA). From step S01 to step S08, the modified codeword is more correct with some bits changed for SPA. Therefore, the number of iteration of the SPA can be reduced.

(21) According to the spirit of the present invention, further steps can be applied after S09. First, judge if a preset number of iteration is reached or a product of the enhanced parity check matrix and the processed codeword equals zero (S10). It is to make sure if the iteration can be stopped. If a result of step S10 is no, repeat the procedure from step S04 with the processed codeword (S11-1); if the result of step S10 is yes, output a message part of the processed codeword (S11-2).

(22) While the invention has been described in terms of what is presently considered to be the most practical and preferred embodiments, it is to be understood that the invention needs not be limited to the disclosed embodiments. On the contrary, it is intended to cover various modifications and similar arrangements included within the spirit and scope of the appended claims, which are to be accorded with the broadest interpretation so as to encompass all such modifications and similar structures.