This application is based upon and claims the benefit of priority from prior Japanese Patent Application No. 2010-276646, filed Dec. 13, 2010, the entire contents of which are incorporated herein by reference.
Embodiments described herein relate generally to error correction using a low-density parity check (LDPC) code.
When transmitting or storing data, an error correction code is added to the data. The data to which the error correction code is added is decoded by an error correction decoder incorporated in a receiver or a memory controller.
If a few bit errors are included in received data or read data, the data can be accurately reconstituted by correcting the bit errors using the error correction code.
As an error correction code, an LDPC code is known. LDPC codes excel at correcting errors. Regarding LDPC codes, a phenomenon called “error floor” is known. When error floor is observed, a decoding error rate almost does not reduce in a region in which a bit error rate before decoding is below a certain level. Error floor is caused by an error event called “trapping set” during the process of iterative decoding using LDPC codes. When trapping set occurs, the iterative decoding does not function properly. By reducing a decoding error rate in the error floor region, the LDPC codes can exhibit better performance of error correction.
In the following, each embodiment will be explained with reference to the figures.
According to embodiments, an error correction decoder carrying out iterative decoding for coded data based on LDPC code. The decoder comprises a generation unit, an inversion control unit, a row processing unit, a parity check unit, an amplification control unit and a column processing unit. The generation unit is configured to generate an inversion node list listing variable nodes connected to check nodes not satisfying a parity check when a code word cannot be obtained after carrying out the iterative decoding a first number of iterations. The inversion control unit is configured to choose a variable node which is a target for inversion from among the variable nodes listed in the inversion node list, and to carry out inversion processing which includes updating an input likelihood of the variable node which is the target for inversion temporarily by inverting a sign of an a posteriori likelihood of the variable node which is the target for inversion. The row processing unit is configured to generate each extrinsic value based on each input likelihood and each a priori likelihood iteratively after carrying out the inversion processing. The parity check unit is configured to generate a temporary estimated word based on the each input likelihood and the each extrinsic value, to carry out the parity check for the temporary estimated word, and to determine the temporary estimated word as the code word when all check nodes satisfy the parity check. The amplification control unit is configured to carry out amplification processing to amplify an absolute value of the extrinsic value from a check node not satisfying the parity check to a variable node when at least one check node does not satisfy the parity check for the temporary estimated word. The column processing unit is configured to update the each a priori likelihood based on the each extrinsic value after the amplification processing.
An error correction decoder according to the first embodiment comprises, as shown in
The LDPC decoding unit 110 inputs input likelihood Fn of coded data (for example, a data frame) obtained from a signal processing unit (not shown) in a previous stage. The LDPC decoding unit performs iterative decoding of coded data based on so-called message passing algorithm (for example, Sum-Product algorithm, Min-Sum algorithm decoding method).
The LDPC decoding unit 110 outputs a result of the decoding (i.e., a code word) to the outside of the decoder (for example, a signal processing unit at a subsequent stage) if decoding of coded data at the process of iterative decoding succeeds (in other words, when all check nodes satisfy a parity check), and the decoding is completed. On the other hand, the LDPC decoding unit 110 provides the post-processing determination unit 120 with information indicating the number of check nodes not satisfying the parity check if the decoding fails (specifically, when a code word cannot be obtained even after iterating decoding a maximum number of times). Also, when the LDPC decoding unit 110 fails decoding (or the post-processing determination unit 120 determines that a post-processing should be carried out), the LDPC decoding unit 110 provides the inversion node list generation unit 130 with information to identify check nodes not satisfying the parity check (for example, index), information of LDPC parity check matrix (hereinafter, “LDPC parity check matrix” will be simply referred to as “parity check matrix”), and information indicating signs of an a posteriori likelihood of each variable node.
As illustrated in
The input likelihood storage unit 111 inputs input likelihood Fn of coded data obtained by the signal processing unit at a previous stage. The input likelihood storage unit 111 retains input likelihood Fn until iterative decoding of the coded data at the LDPC decoding unit 110 is completed. The coded data is LDPC-coded, and the LDPC code is defined by a parity check matrix stored in the parity check matrix storage unit 115. Here, it is assumed that the LDPC code is so-called systematic code, and it consists of data bits and parity bits.
As an example, assuming coded data consisting of four data bits C1, . . . , C4 and eight parity bits C5, . . . , C12, the input likelihood storage unit 111 stores input likelihoods F1, . . . , F12 respectively corresponding to bits C1, . . . , C12. These input likelihoods F1, . . . , F12 are read by the row processing unit 112 and the parity check unit 114, as needed.
Herein, as expressed in the expression (1) below, a likelihood is a logarithmical value (a natural logarithm) of a ratio of a probability P (x=0) when a data bit is “0” to a probability P (x=1) when a data bit is “1”. In the description hereinafter, an a priori likelihood means likelihood of an a priori probability, and an a posteriori likelihood means a likelihood of an a posteriori probability.
The parity check matrix storage unit 115 stores information of a parity check matrix H with M rows and N columns in advance. The same parity check matrix H is shared between a decoder side and an encoder side. The parity check matrix H (or the information of the parity check matrix H) is read by the row processing unit 112, the column processing unit 113, the parity check unit 114, as needed.
Further, in the explanation hereafter, a set of column indices indicating column positions of “1” on the mth row will be referred to as A(m), a set of row indices indicating row positions of “1” in the nth column will be referred to as B(n). For example, in
As shown in
The row processing unit 112 generates an extrinsic value αmn using input likelihood Fn obtained from the input likelihood storage unit 111, the information of the parity check matrix H from the parity check matrix storage unit 115 and a priori likelihood βmn from the column processing unit 113. More specifically, the row processing unit 112 generates extrinsic value αmn by the following expression (2). The row processing unit 112 provides the column processing unit 113 and the parity check unit 114 with generated extrinsic value αmn.
It should be noted that every a priori likelihood βmn at the first decoding is set to zero, and after the first decoding, a newest value which is fed back from the column processing unit 113 is set as a priori likelihood βmn. The function sign(x) and the function f(x) in expression (2) are expressed in the following expressions (3 and 4). The row processing unit 112 may use a Min-Sum algorithm.
The parity check unit 114 generates a temporary estimated word based on the parity check matrix H information from the check matrix storage unit 115, extrinsic value αmn from the row processing unit 112 and input likelihood Fn from the input likelihood storage unit 111. More specifically, the parity check unit 114 generates the nth element of the temporary estimated word by the following expression (5).
Then, the parity check unit 114 checks whether the generated temporary estimated word is a code word defined by the check matrix H or not. More specifically, the parity check unit 114 calculates a parity check vector U by the following expression (6).
U=ĉH
T (6)
Each element in the parity check vector U indicates whether a corresponding check node satisfies the parity check or not (whether the parity of the corresponding check node is correct or not). If the mth element in the parity check vector U is “0,” the mth check node Pm satisfies the parity check. If the mth element in the parity check vector U is “1,” the mth check node Pm does not satisfy the parity check. The total number of “1” included in the parity check vector U is equal to the total number of check nodes that do not satisfy the parity check.
For example, as shown in
When the parity check vector U is a zero vector, it means all check nodes satisfy the parity check. If the parity check vector U becomes a zero vector, the parity check unit 104 outputs a temporary estimated word as a code word. If the parity check vector U is not a zero vector, as will be described later, updating extrinsic value αmn, the parity check based on updated extrinsic value αmn, and, in case where the parity check is not satisfied, updating a priori likelihood βmn are iterated, up to a maximum number of iterations Lmax 1. If the parity check vector U is not a zero vector and iterative times L1<Lmax 1, the parity check unit 114, for example, instructs the column processing unit 113 to carry out the column processing. The number of iterations L1 is counted (incremented) by, for example, the row processing unit 112.
The parity check unit 114 provides the post-processing determination unit 120 with information indicating the number of check nodes not satisfying the parity check, when the parity check vector U is not a zero vector and the number of iterations L1 reaches the maximum number of iterations Lmax1 (i.e., decoding failed). The parity check unit 114 provides the inversion node list generation unit 130 with information identifying check nodes not satisfying the parity check, information of the parity check matrix, and information indicating sings of a posteriori likelihood of each variable node, when the decoding fails (or when the post-processing determination unit 120 determines to carry out the post-processing.
The column processing unit 113 calculates a priori likelihood βmn using the information of the parity check matrix H from the parity check matrix storage unit 115 and extrinsic value αmn from the row processing unit 112. More specifically, the column processing unit 113 calculates a priori likelihood βmn by the following expression (7). The column processing unit 113 feeds calculated a priori likelihood βmn back to the row processing unit 112.
The post-processing determination unit 120 inputs the information indicating the number of check nodes not satisfying the parity check from the LDPC decoding unit 110 (the parity check unit 114) to determine whether the number is greater than a threshold value K or not. If the number of check nodes not satisfying the parity check is greater than the threshold value K, the post-processing determination unit 120 determines to omit the post-processing, and if not greater, the unit determines to carry out the post-processing. When the post-processing is to be omitted, the post-processing determination unit 120 outputs information, for example, indicating a failure of the decoding to the outside of the decoder, then the decoding is completed; when the post-processing is to be carried out, the unit instructs, for example, the inversion node list generation unit 130 to generate an inversion node list. Generally, when error floor occurs, the number of check nodes not satisfying the parity check tends to be relatively less. Thus, the post-processing determination unit 120 can determine whether error floor occurs or not simply using this tendency. As will be described later, errors in the error floor region can be effectively corrected by the post-processing carried out by the post-processing unit 140.
The inversion node list generation unit 130 inputs the information identifying check nodes not satisfying the parity check, the information of the parity check matrix, and the information indicating signs of the a posteriori likelihood of each variable node from the LDPC decoding unit 110 (the parity check unit 114). The inversion node list generation unit 130 generates an inversion node list which lists information identifying variable nodes connected to check nodes not satisfying the parity check (for example, indices for variable nodes) and information indicating signs of the a posteriori likelihood of each of the variable nodes. The inversion node list generation unit 130 provides the post-processing unit 140 with the generated inversion node list. Herein, an a posteriori likelihood Gj of a variable node Vj can be calculated using the following expression (8).
For example, as shown in
The post-processing unit 140 inputs the inversion node list from the inversion node list generation unit 130. The post-processing unit 140 performs post processing described later, using the lists. When the decoding of coded data succeeds during the post-processing, the post-processing unit 140 outputs the result of the decoding (i.e., a code word) to the outside of the decoder, and the post-processing is completed. On the other hand, when the decoding fails (more specifically, no code word can be obtained after the post-processing), the post-processing unit 140 outputs information indicating failure of decoding to the outside of the decoder, and the post-processing completes.
As shown in
The post-processing unit 140 and the LDPC decoding unit 110 may be separate functional unit, or may be an integrated functional unit. For example, the input likelihood storage unit 141, the row processing unit 142, the column processing unit 143, the parity check unit 144, and the check matrix storage unit 145 may respectively function as the input likelihood storage unit 111, the row processing unit 112, the column processing unit 113, the parity check unit 114, and the parity check matrix storage unit 115, while normal LDPC decoding which precedes the post-processing is being carried out. Also, although the structure of the LDPC decoding unit 110 is the same or similar as that of a typical LDPC decoder, the structure of each functional unit may be altered depending on implementation constraints. In other words, the present embodiment can be applied to an arbitrary message-passing type LDPC decoder.
The input likelihood storage unit 141 stores the same input likelihood Fn as the input likelihood storage unit 111 stores. The input likelihood storage unit 141 stores input likelihood Fn until the post-processing of coded data by the post-processing unit 140 completes. Input likelihood Fn is read by the row processing unit 142 as needed.
The parity check matrix storage unit 145 stores the same information of the parity check matrix H as the parity check matrix storage unit 115 stores. The information of the parity check matrix H is read by the row processing unit 142, the column processing unit 143, the parity check unit 144 and the amplification control unit 147, as needed.
The inversion control unit 146 reads input likelihood Fn from the input likelihood storage unit 141, reads the number of iterations L2 from the number of iterations storage unit 148, reads the inversion node list from the inversion node list storage unit 149, and inputs the a priori likelihood from the column processing unit 143. The inversion control unit 146 performs different processing in accordance with the number of iterations L2.
If the number of iterations L2 is an initial value (for example, “0”), the inversion control unit 146 resets all a priori likelihoods βmn to “0.” Further, the inversion control unit 146 selects one variable node Vj for which inversion processing has not performed from among the nodes included in the inversion node list. The inversion control unit 146 inverts a sign, sign (Gj), of the a posteriori likelihood of the variable node Vj which is a target of inversion, and substitutes a value obtained by multiplying a configurable maximum absolute value Amax for an input likelihood Fj of the variable node Vj. In other words, the inversion control unit 146 calculates the following expression (9), and substitutes the input likelihood Fj for a positive maximum likelihood Amax or a negative maximum likelihood −Amax, in order to update the input likelihood Fj temporarily.
F
j=−sign(Gj)*Amax (9)
Although a value of Amax may vary in accordance with a design of the post-processing unit 140 (for example, a bit resolution), the present embodiment is applicable to any arbitrary value. The inversion control unit 146 may carry out inversion processing different from expression (9). For example, the inversion control unit 146 may simply inverse a sign of an input likelihood, or may adjust the absolute value of the input likelihood to a value other than a maximum value after the inversion.
When the inversion control unit 146 has carried out inversion processing for a different variable node Vi just before carrying out inversion processing for the variable node Vj, the inversion control unit 146 resets an input likelihood Fi of the variable node Vi to an input likelihood Fi read from the input likelihood storage unit 141 (i.e., an initial value). The inversion control unit 146 gives the input likelihood Fn and a posteriori likelihood βmn to the row processing unit 142. The inversion control unit 146 gives input likelihood Fn to the parity check unit 144.
On the other hand, when the number of iterations L2 is a value other than the initial value, the inversion control unit 146 retains the input likelihood Fj (for example, Amax or −Amax) of a variable node for which inversion processing is carried out (in other words, a variable node which is currently a target for inversion). The inversion control unit 146 provides the row processing unit 142 with input likelihood Fn and a priori likelihood βmn. The inversion control unit 146 provides the parity check unit 144 with input likelihood Fn.
The order of choosing variable nodes as a target for the inversion processing is arbitrary. The inversion control unit 146 may choose variable nodes in an ascending or descending order of variable node indices, or may choose variable nodes randomly. The inversion control unit 146 may choose variable nodes in an ascending order of absolute values of a posteriori likelihoods. Generally, a variable node with a small absolute value of an a posteriori likelihood is less reliable compared to a variable node with a large absolute value of an a posteriori likelihood (i.e., more likely to be an error). Choosing variable nodes as a target for the inversion processing in an increasing order of reliability would result in obtaining a code word in a short time. Further, regarding an irregular LDPC code, the inversion code control unit 146 may choose variable nodes in an ascending or descending order of row weights of variable nodes.
For example, if the inversion processing carried out for the variable node V4 in the example of
The row processing unit 142 generates an extrinsic value αmn using input likelihood Fn and a posteriori likelihood βmn from the inversion control unit 146 and information of the check matrix H read from the check matrix storage unit 145. More specifically, the row processing unit 142 generates an extrinsic value αmn by following expression (2) above. The row processing unit 142 provides the parity check unit 144 and the amplification control unit 147 with the generated extrinsic value αmn.
The parity check unit 144 reads the information of the check matrix H from the check matrix storage unit 146, inputs the extrinsic value αmn from the row processing unit 142, and obtains the input likelihood Fn from the inversion control unit 146. The parity check unit 144 generates a temporary estimated word based on those values and information. More specifically, the parity check unit 144 generates the nth element of the temporary estimated word by following expression (5) above. The parity check unit 144 checks whether the generated temporary estimated word is the code word defined by the parity check matrix H. More specifically, the parity check unit 144 calculates the parity check vector U by following expression (6) above.
If the parity check vector U is a zero vector, the parity check unit 144 outputs the temporary estimated value as a code word to the outside of the decoder. On the other hand, if the parity check vector U is not a zero vector and the number of iterations L2 does not reach the maximum number of iterations Lmax2, the parity check unit 144 provides, for example, the amplification unit 147 with information identifying check nodes not satisfying the parity check. The number of iterations L2 is counted (incremented) by, for example, the row processing unit 142, and retained by the number of iterations storage unit 148. If the parity check vector U is not a zero vector and the number of iterations L2 reaches the maximum number of iterations Lmax2, the parity check unit 144 resets the number of iterations L2 stored by the number of iterations storage unit 148 to an initial value.
Further, the parity check unit 144 may determine whether an iteration discontinuation condition is satisfied or not. When the iteration discontinuation condition is satisfied, the parity check unit 144 resets the number of iterations L2 stored in the number of iterations storage unit 148 to an initial value. The iteration discontinuation condition will be described below.
Basically, the post-processing unit 140 inverts a chosen variable node, and then carries out iterative decoding. However, if an inappropriate variable node (i.e., a variable node with no error) is inverted, a code word cannot be obtained even after decoding is iterated. More specifically, as shown in
Consequently, it is possible to define an iteration discontinuation condition as “L2>Lin (“Lin” is less than Lmax2) and when the number of check nodes not satisfying the parity check is increased compared to that in a previous parity check.” The above iteration discontinuation condition is of course merely an example of iteration discontinuation conditions, and it can be arbitrarily changed. By using such an iteration discontinuation condition, unnecessary iterative decoding can be canceled in midstream; as a result, a code word can be obtained in a short time.
The amplification control unit 147 inputs the extrinsic value αmn from the row processing unit 142, inputs information identifying check nodes not satisfying the parity check from the parity check unit 144, and reads information of the parity check matrix H from the parity check matrix storage unit 145. The amplification control unit 147 carries out amplification processing to amplify the absolute value of extrinsic value αmn of a check node not satisfying the parity check. For example, the amplification control unit 147 amplifies the absolute value of extrinsic value αmn by following the expression (10) below. The amplification control unit 147 provides each amplified extrinsic value αmn with the column processing unit 143.
αmn=Wαmn (10)
Herein, a constant W is greater than 1. More specifically, taking
Further, the amplification control unit 147 may determine whether an amplification carrying out condition is satisfied or not. If the amplification carrying out condition is satisfied, the amplification control unit 147 carries out amplification processing for the absolute value of extrinsic value αmn of a check node not satisfying the parity check. On the other hand, when the amplification carrying out condition is not satisfied, the amplification control unit 147 omits the amplification processing. For example, “the number of check nodes not satisfying the parity check is less than the first number of check nodes” can be defined as an amplification carrying out condition. When the number of check nodes not satisfying the parity check is greater than the first number of check nodes, increase of errors can be effectively avoided by not adjusting the extrinsic value αmn.
Also, the amplification control unit 147 may amplify the absolute value of extrinsic value αmn by addition and subtraction of a constant, instead of expression (10). Or, it may amplify the absolute value of extrinsic value αmn by a combination of addition, reduction, multiplication and division of a constant. Further, in addition to, or as an alternative of amplification of amplify the absolute value of extrinsic value αmn of a check node not satisfying the parity check, the amplification control unit 147 may reduce the absolute value of some of or all extrinsic value αmn of the check nodes satisfying the parity check. The amplification control unit 147 may reduce the absolute value by addition and subtraction of a constant, or a combination of addition, subtraction, multiplication and division. The constant used for amplifying (or reducing) extrinsic value αmn may vary from one variable node to another variable node. For example, a constant may be dependent on a column weight of a variable node.
The column processing unit 143 reads information of the check matrix H from the check matrix storage unit 145, and inputs the extrinsic value αmn from the amplification control unit 147. The column processing unit 143 calculates a priori likelihood βmn using these information and value. More specifically, the column processing unit 143 calculates a priori likelihood βmn by following expression (7) above. The column processing unit 143 feeds the calculated a priori likelihood βmn back to the inversion control unit 146.
The iteration numbers storage unit 148 inputs the number of iteration L2 from, for example, the parity check unit 144, and retains it. The number of iterations L2 is read by the inversion control unit 146, as needed. The inversion node list storage unit 149 inputs the inversion node list from the inversion node list generation unit 130, and retains it. The inversion node list is read by the inversion control unit 146 as needed.
In the following, an example of the operation of the error correction decoder of
In step S410, the LDPC decoding unit 110 carries out normal LDPC decoding. The detail of step S410 will be described later. In step S410, the process may end by successful decoding, or a code word cannot be obtained even when the number of iterations L1 reaches the maximum number of iterations Lmax1. When step S410 ends for a reason that, for example, the number of iterations L1 reaches the maximum number of iterations Lmax1, the process proceeds to step S420.
In step S420, the post-processing determination unit 120 determines whether the number of check nodes not satisfying the parity check is greater than a threshold value K or not. If the number of check nodes not satisfying the parity check is greater than the threshold value K, the process is ended (decoding failed), if not, the process proceeds to step S430.
In step S430, the inversion node list generation unit 130 generates an inversion node listing information identifying a variable node connecting to a check node not satisfying the parity check and information indicating sign of the a posteriori likelihood of the variable node. Following step S430, the post-processing unit 140 carries out post-processing (step S440). The details of step S440 will be described later. At the step S440, the process may end if the decoding succeeds, or may end without obtaining a code word even after carrying out the post-processing for all the variable nodes listed in the inversion node list (decoding failed).
In the following an example of the operation of the LDPC decoding unit 110 in
Step S410 begins from step S411. In step S411, the row processing unit 112 generates extrinsic value αmn using input likelihood Fn from the input likelihood storage unit 101, information of the check matrix H from the parity check matrix storage unit 115, and the (newest) a priori likelihood βmn from the column processing unit 113. The row processing unit 112 may count (increment) the number of iterations L1 every time the process in step S411 is carried out.
Next, the parity check unit 114 generates a temporary estimated word based on input likelihood Fn from the input likelihood storage unit 111, the information of the parity check matrix H from the parity check matrix storage unit 115, and extrinsic value αmn from the row processing unit 112, and checks whether the generated temporary estimated word is a code word defined by the parity check matrix H (step S412). If the temporary estimated word is a code word, the process ends (decoding succeeded), if not, the process proceeds to step S413.
In step S413, the parity check unit 114 determines whether the number of iterations L1 reaches the maximum number of iterations Lmax1 or not. If L1 is equal to or greater than Lmax1, the process proceeds to step S 420, and if L1<Lmax1, the process proceeds to step S414. When the process proceeds to step S420, the parity check unit 114 provides each of the post-processing determination unit 120 and the inversion node list generation unit 130 with necessary information.
In step S414, the column processing unit 113 calculates an a priori likelihood βmn using the information of the parity check matrix H from the parity check matrix storage unit 115 and extrinsic value αmn from the row processing unit 112, and then, the process proceeds to step S411
In the following, an example of the operation of the post-processing unit 140 illustrated in
Step S440 begins upon step S441. In step S441, the inversion control unit 146 chooses a variable node Vj which has not been inverted from the inversion node list, and carries out inversion processing for the variable node. Further, the inversion control unit 146 resets all the a priori likelihood βmn to “0.” Following step S441, the process proceeds to step S442.
In step S442, the row processing unit 142 generates an extrinsic value αmn using input likelihood and a (newest) a priori likelihood βmn from the inversion control unit 146 and information of the check matrix H from the check matrix storage unit 145. The row processing unit 142 may count (increment) the number of iterative time L2 every time the process in step S442 is carried out.
Next, the parity check unit 144 generates a temporary estimated word based on input likelihood Fn from the inversion control unit 146, information of the parity check matrix H from the check matrix storage unit 145 and the extrinsic value αmn from the row-processing unit 142, and checks whether the generated temporary estimated word is a code word defined by the parity check matrix H or not (step S443). If the generated temporary estimated word is a code word, the process ends (decoding succeeded), if not, the process proceeds to step S444.
In step S444, the parity check unit 144 determines whether the iteration discontinuation condition is satisfied or not. If iteration discontinuation condition is satisfied, the process proceeds to step S449, if not, the process proceeds to step S445. In step S445, the parity check unit 144 determines whether the number of iterations L2 reaches the maximum number of iterations Lmax2 or not. If L2 is equal to or greater than Lmax2, the process proceeds to step 9449, if L2<Lmax2, the process proceeds to step S446.
In step S446, the amplification control unit 147 determines whether the amplification carrying out condition is satisfied or not. If satisfied, the process proceeds to step S447, if not, the process proceeds to step S448. In step S447, the amplification control unit 147 amplifies the absolute value of the extrinsic value αmn of the check node not satisfying the parity check, and then, the process proceeds to step S448.
In step S448, the column processing unit 143 calculates a priori likelihood βmn using the information of the parity check matrix H from the parity check matrix storage unit 145 and extrinsic value αmn from the amplification control unit 147, and then, the process returns to step S442.
In step S449, the inversion control unit 146 determines whether there is a node which has not been inverted among the variable nodes listed in the inversion node list. If there is a node which has not been inverted in the list, the process proceeds to step S450, if not, the process ends (decoding failed). In step S450, the parity check unit 144 resets the number of iterations L2 to an initial value, and then, the process returns to step S441.
As explained above, the error correction decoder according to the first embodiment carries out the post-processing when a code word cannot be obtained even after sufficiently carrying out normal iterative decoding. In the post-processing, inversion of a variable node connected to a check node not satisfying the parity check and amplification of the absolute value of an extrinsic value of a check node not satisfying the parity check in the iterative decoding after the inversion of variable nodes are used in combination. Thus, according to the present error correction decoder, an error in an error floor region can be reduced and the ability of error correction can be effectively improved.
A storage apparatus according to the second embodiment is an application of the error correction decoder according to the above first embodiment. The storage apparatus is typically a memory card which includes a nonvolatile memory such as a flash memory and a memory controller to control the nonvolatile memory.
A storage apparatus 303 of
The memory controller 302 includes a read-only memory (ROM) 307, a central processing unit (CPU) core 308, a random access memory (RAM) 309, a host interface (I/F) 310, an error correction unit 311 and a memory interface 312. Each element of the memory controller 302 is connected to each other via a bus 306.
The CPU core 308 transmits and receives data with the host 304 through the host interface 310 and with the semiconductor memory unit 305 through the memory interface 312. In other words, the CPU core 308 can function as a reading unit to receive data from the semiconductor memory unit 305 or as a writing unit to transmit data on the semiconductor memory unit 305. Firmware (FW) executed by the CPU core 308 realizes address management of the semiconductor unit 306 including restrictions on the number of rewritable times. Further, the FW realizes the control of whole storage apparatus 303 in accordance with commands input from the host 304.
The ROM 307 stores a control program for the storage apparatus 303, etc. The RAM 309 stores an address conversion table which is necessary for address management, information on abnormal circuits, and so on.
The error correction unit 311 includes a decoder 301 and an encoder 313. The error correction decoder according to the first embodiment is incorporated into to the decoder 301. The decoder 301 performs error correction decoding on data read from the semiconductor memory unit 305. On the other hand, the encoder 313 adds an error correction code to data to be written on the semiconductor memory 305.
As explained in the above, in the storage apparatus according to the second embodiment, the error correction decoder according to the aforementioned first embodiment is incorporated into the memory controller. Thus, according to the present storage apparatus, an excellent ability of error correction on the read data can be achieved.
A receiver according to the third embodiment is an application of the error correction decoder according to the aforementioned first embodiment. The receiver according to the present embodiment includes, as shown in
The antenna 320 receives high-frequency radio signals. The frequency converter 321 downconverts the received signals from the antenna 320 to intermediate-frequency signals. The A/D converter 322 digitizes the intermediate frequency signals from the frequency converter 321. The demodulator 323 demodulates the digital signals from the A/D converter 322 in accordance with a demodulation scheme corresponding to a modulation scheme on the transmitter side.
The error correction decoder according to the aforementioned first embodiment is incorporated into the decoder 324. The decoder 324 performs decoding process including error correction decoding on the demodulated data from the demodulator 323 to reconstruct the received data.
As explained above, in the receiver according to the third embodiment, the error correction decoder according to the aforementioned first embodiment is incorporated into the decoder. Thus, according to the present receiver, an excellent ability of error correction for the received data can be achieved. The transmitter-receiver may be configured by combining the elements shown in
The processing of each of the above-described embodiments can be realized using a general-purpose computer as a basic hard ware. It is possible to provide a program that realizes the processing of each of the above-described embodiments by storing the program in a computer-readable storage medium. Such a program is stored in a storage medium in a file of installable form, or a file of executable form. A storage medium may be a magnetic disk, an optical disc (such as CD-ROM, CD-R, DVD, etc.), a magneto-optical disc (MO, etc.) or a semiconductor memory, as long as it can store a program and is computer-readable. Also, the program that realizes the processing of each of the above-described embodiments may be stored on a computer (server) connected to network such as the Internet and may be downloaded by a computer (client) via network.
While certain embodiments have been described, these embodiments have been presented by way of example only, and are not intended to limit the scope of the inventions. Indeed, the novel embodiments described herein may be embodied in a variety of other forms; furthermore, various omissions, substitutions and changes in the form of the embodiments described herein may be made without departing from the spirit of the inventions. The accompanying claims and their equivalents are intended to cover such forms or modifications as would fall within the scope and spirit of the inventions.
Number | Date | Country | Kind |
---|---|---|---|
2010-276646 | Dec 2010 | JP | national |