Various data processing systems have been developed including storage systems, cellular telephone systems, and radio transmission systems. In such systems data is transferred from a sender to a receiver via some medium. For example, in a storage system, data is sent from a sender (i.e., a write function) to a receiver (i.e., a read function) via a storage medium. As information is stored and transmitted in the form of digital data, errors are introduced that, if not corrected, can corrupt the data and render the information unusable. The effectiveness of any transfer is impacted by any losses in data caused by various factors. Many types of error checking systems have been developed to detect and correct errors in digital data. For example, in perhaps the simplest system, a parity bit can be added to a group of data bits, ensuring that the group of data bits (including the parity bit) has either an even or odd number of ones. When using odd parity, as the data is prepared for storage or transmission, the number of data bits in the group that are set to one are counted, and if there is an even number of ones in the group, the parity bit is set to one to ensure that the group has an odd number of ones. If there is an odd number of ones in the group, the parity bit is set to zero to ensure that the group has an odd number of ones. After the data is retrieved from storage or received from transmission, the parity can again be checked, and if the group has an even parity, at least one error has been introduced in the data. At this simplistic level, some errors can be detected but not corrected.
The parity bit may also be used in error correction systems, including in Low Density Parity Check (LDPC) decoders. An LDPC code is a parity-based code that can be visually represented in a Tanner graph 100 as illustrated in
The connections between variable nodes 110-124 and check nodes 102-108 may be presented in matrix form as follows, where columns represent variable nodes, rows represent check nodes, and a random non-zero element a(i,j) from the Galois Field at the intersection of a variable node column and a check node row indicates a connection between that variable node and check node and provides a permutation for messages between that variable node and check node:
By providing multiple check nodes 102-108 for the group of variable nodes 110-124, redundancy in error checking is provided, enabling errors to be corrected as well as detected. Each check node 102-108 performs a parity check on bits or symbols passed as messages from its neighboring (or connected) variable nodes. In the example LDPC code corresponding to the Tanner graph 100 of
A message from a variable node to any particular neighboring check node is computed using any of a number of algorithms based on the current value of the variable node and the last messages to the variable node from neighboring check nodes, except that the last message from that particular check node is omitted from the calculation to prevent positive feedback. Similarly, a message from a check node to any particular neighboring variable node is computed based on the current value of the check node and the last messages to the check node from neighboring variable nodes, except that the last message from that particular variable node is omitted from the calculation to prevent positive feedback. As local decoding iterations are performed in the system, messages pass back and forth between variable nodes 110-124 and check nodes 102-108, with the values in the nodes 102-124 being adjusted based on the messages that are passed, until the values converge and stop changing or until processing is halted.
The passing of correct messages enables the LDPC decoder to detect and correct errors in the data. However, the passing of incorrect messages based on erroneous data slows the decoding process.
The present inventions are related to systems and methods for an LDPC decoder with variable node hardening, and in particular, to an LDPC decoder that temporarily hardens the value of a variable node by using check node to variable node (C2V) messages from a previous iteration that are likely to be correct when generating variable node to check node (V2C) messages. When a C2V message in a particular decoding iteration is determined to be correct with a high probability, that C2V message is used in later iterations when generating V2C messages. The effect of the previous C2V is applied to later V2C message generation using a decaying scaling factor, gradually reducing the effect of the previous C2V message on later V2C message generation. The application of a previous likely correct C2V message on V2C message generation correlates messages from previous iterations and a current iteration to harden the V2C messages. This temporarily locks down the values of messages that are most probably correct so that they will influence the less probably correct messages for some decoding iterations before the incorrect messages can influence the correct message.
This summary provides only a general outline of some embodiments according to the present invention. Many other objects, features, advantages and other embodiments of the present invention will become more fully apparent from the following detailed description, the appended claims and the accompanying drawings.
A further understanding of the various embodiments of the present invention may be realized by reference to the figures which are described in remaining portions of the specification. In the figures, like reference numerals are used throughout several figures to refer to similar components. In some instances, a sub-label consisting of a lower case letter is associated with a reference numeral to denote one of multiple similar components. When reference is made to a reference numeral without specification to an existing sub-label, it is intended to refer to all such multiple similar components.
The present inventions are related to systems and methods for an LDPC decoder with variable node hardening, and in particular, to an LDPC decoder that temporarily hardens the value of a variable node by using check node to variable node (C2V) messages from a previous iteration that are likely to be correct when generating variable node to check node (V2C) messages. The LDPC decoder used in various embodiments may be any type of LDPC decoder, including binary and non-binary, layered and non-layered, non-erasure channel or erasure channel. LDPC technology is applicable to transmission of information over virtually any channel or storage of information on virtually any media. Transmission applications include, but are not limited to, optical fiber, radio frequency channels, wired or wireless local area networks, digital subscriber line technologies, wireless cellular, Ethernet over any medium such as copper or optical fiber, cable channels such as cable television, and Earth-satellite communications. Storage applications include, but are not limited to, hard disk drives, compact disks, digital video disks, magnetic tapes and memory devices such as DRAM, NAND flash, NOR flash, other non-volatile memories and solid state drives.
During traditional belief-propagation (BP) decoding of an LDPC code, LLR V2C and C2V messages are passed along the edges in the Tanner graph between check nodes and variable nodes. In each local iteration, the V2C and C2V messages on an edge are recalculated regardless of previous values on that edge. Because messages are interconnected through the Tanner graph, they influence each other more and more in successive decoding iterations and the correlation between messages increases. Just as correct messages influence incorrect messages, incorrect messages will also influence correct messages.
In the LDPC decoder with variable node hardening, messages along an edge may be correlated with messages from previous iterations. This temporarily locks down the values of messages that are most probably correct so that they will influence the less probably correct messages for some decoding iterations before the incorrect messages can influence the correct messages. When a C2V message in a particular decoding iteration is determined to be correct with a high probability, that C2V message is used in later iterations when generating V2C messages. The effect of the previous C2V is applied to later V2C message generation using a decaying scaling factor, gradually reducing the effect of the previous C2V message on later V2C message generation. The application of a previous likely correct C2V message on V2C message generation correlates messages from previous iterations and a current iteration to harden the V2C messages. By introducing memories along the decoding iterations, the LDPC decoder stores values which are likely to be correct, and biases the LLR messages of later iterations.
Turning to
During a normal decoding operation, the V2C message a′(i) 220 of
The C2V message a(k) 212 that is most probably correct may be identified in any suitable manner for storage and later use in generating V2C message a′(i) 220. C2V message a(k) 212 is most probably correct when the value or hard decision in variable node 200 is most probably correct. In some embodiments, the C2V message a(k) 212 that is most probably correct is identified by finding the iteration k in which the value in variable node 200 is most probably correct. Turning to
At certain global and local iterations, agreement between incoming check node messages is more likely than in other iterations to correspond with a high probability that the value of the variable node is correct. This means that there is better correlation between probability of an incorrect value in a variable node and received C2V message disagreement at these particular iterations. As shown in
Again, the probability 302 is the probability that the value of a variable node is correct when all received C2V messages match. Notably, this is not simply the probability that the perceived value in a variable node is correct, but the probability that the received C2V messages are correct in indicating that the value of the variable node is correct. This probability is highest when the check nodes are most independent, that is, their votes carry more weight or are most valid when they are the most independent of voters. After multiple local iterations in the LDPC decoder, each check node has been influenced by other check nodes, so it is less probable when they all vote the same way that the outcome is correct.
Given an LDPC decoder that yields a decoding result or simulated result as in
Turning to
Again, the variable node hardening applies C2V message a(k) 212 to the generation of
V2C message a′(i) 220 if the C2V messages from check nodes 202, 204, 206 were in agreement in iteration k. This process is repeated in parallel or serial to generate the V2C messages from every variable node to every check node during each iteration, as applicable according to the particular decoding algorithm used in the LDPC decoder.
Turning to
The read channel 500 includes an analog front end 504 that receives and processes the analog signal 502. Analog front end 504 may include, but is not limited to, an analog filter and an amplifier circuit as are known in the art. Based upon the disclosure provided herein, one of ordinary skill in the art will recognize a variety of circuitry that may be included as part of analog front end 504. In some cases, the gain of a variable gain amplifier included as part of analog front end 504 may be modifiable, and the cutoff frequency and boost of an analog filter included in analog front end 504 may be modifiable. Analog front end 504 receives and processes the analog signal 502, and provides a processed analog signal 506 to an analog to digital converter 510.
Analog to digital converter 510 converts processed analog signal 506 into a corresponding series of digital samples 512. Analog to digital converter 510 may be any circuit known in the art that is capable of producing digital samples corresponding to an analog input signal. Based upon the disclosure provided herein, one of ordinary skill in the art will recognize a variety of analog to digital converter circuits that may be used in relation to different embodiments of the present inventions. Digital samples 512 are provided to an equalizer 514. Equalizer 514 applies an equalization algorithm to digital samples 512 to yield an equalized output 516. In some embodiments of the present invention, equalizer 514 is a digital finite impulse response filter circuit as is known in the art. Data or codewords contained in equalized output 516 may be stored in a buffer 518 until a data detector 520 is available for processing.
The data detector 520 performs a data detection process on the received input, resulting in a detected output 522. In some embodiments of the present invention, data detector 520 is a Viterbi algorithm data detector circuit, or more particularly in some cases, a maximum a posteriori (MAP) data detector circuit as is known in the art. In these embodiments, the detected output 522 contains log-likelihood-ratio (LLR) information about the likelihood that each bit or symbol has a particular value. Based upon the disclosure provided herein, one of ordinary skill in the art will recognize a variety of data detectors that may be used in relation to different embodiments of the present invention. Data detector 520 is started based upon availability of a data set in buffer 518 from equalizer 514 or another source.
The detected output 522 from data detector 520 is provided to an interleaver 524 that protects data against burst errors. Burst errors overwrite localized groups or bunches of bits. Because LDPC decoders are best suited to correcting errors that are more uniformly distributed, burst errors can overwhelm LDPC decoders. The interleaver 524 prevents this by interleaving or shuffling the detected output 522 from data detector 520 to yield an interleaved output 526 which is stored in a memory 530. The interleaved output 526 from the memory 530 is provided to a LDPC decoder 532 which performs parity checks on the interleaved output 526, ensuring that parity constraints established by an LDPC encoder (not shown) before storage or transmission are satisfied in order to detect and correct any errors that may have occurred in the data during storage or transmission or during processing by other components of the read channel 500. As part of the decoding process, the LDPC decoder with variable node hardening 532 may harden variable node values by applying C2V messages that are highly probably correct when generating V2C messages for later decoding iterations.
Multiple detection and decoding iterations may be performed in the read channel 500, both global iterations through the detector 520 and LDPC decoder 532 and local iterations within the LDPC decoder 532. To perform a global iteration, LLR values 534 from the LDPC decoder 532 are stored in memory 530, deinterleaved in a deinterleaver 536 to reverse the process applied by interleaver 524, and provided again to the data detector 520 to allow the data detector 520 to repeat the data detection process, aided by the LLR values 534 from the LDPC decoder 532. In this manner, the read channel 500 can perform multiple global iterations, allowing the data detector 520 and LDPC decoder 532 to converge on the correct data values.
The LDPC decoder 532 also produces hard decisions 540 about the values of the data bits or symbols contained in the interleaved output 526 of the interleaver 524. For binary data bits, the hard decisions may be represented as 0's and 1's. In a GF(4) LDPC decoder, the hard decisions may be represented by four field elements 00, 01, 10 and 11.
The hard decisions 540 from LDPC decoder 532 are deinterleaved in a hard decision deinterleaver 542, reversing the process applied in interleaver 524, and stored in a hard decision memory 544 before being provided to a user or further processed. For example, the output 546 of the read channel 500 may be further processed to reverse formatting changes applied before storing data in a magnetic storage medium or transmitting the data across a transmission channel.
Turning to
A check node processor 622 receives the V2C messages 620 and performs parity check calculations for each check node based on messages from connected variable nodes. The check node processor 622 also generates C2V messages 624, enabling the variable node processor 610 to update the perceived value for each variable node based on C2V messages 624 from connected check nodes. Updated variable node values may also be updated in the memory 604 during local decoding iterations, either by the variable node processor 610 or check node processor 622 or both. LLR values 612 from the variable node processor 610 may also be provided to a decision circuit 614 which generates a hard decision output 616.
Turning to
The min-sum based non-binary LDPC decoder 700 is provided with an input 706, for example containing a hard decision and corresponding LLR values, which are stored in a symbol memory 710. The input 706 is provided to the variable node processor with variable node hardening 702 from the symbol memory 710, and the variable node processor 702 updates the perceived value of each symbol based on the value from input 706 and on C2V message vectors or check node messages from a check node processor 704. The variable node processor 702 also generates V2C message vectors 712 or variable node messages for neighboring check nodes. The V2C messages 712 may be hardened as disclosed above, storing C2V messages that are highly probably correct, that is, in some embodiments, storing C2V messages that were in agreement with other C2V messages for a variable node during an iteration k selected as a best candidate iteration for providing C2V messages for storage. The stored C2V messages are then applied when generating V2C messages for later decoding iterations using a decaying scaling factor.
Check nodes (implemented in check node processor 704) in a min-sum based non-binary LDPC decoder receive incoming messages from connected or neighboring variable nodes (implemented in variable node processor 702) and generate outgoing messages to each neighboring variable node to implement the parity check matrix for the LDPC code, an example of which is graphically illustrated in the Tanner graph of
In various embodiments of LDPC decoders that may be adapted to include variable node hardening, the variable node processor 702 and check node processor 704 may each be unitary, discrete components, or their functions may be distributed and intermixed in multiple components. The terms variable node processor and check node processor are therefore not limited to two discrete processing components, but apply generally to any components or combinations of components in an LDPC decoder that update variable node values and generate variable node to check node messages for variable node processing, and that perform check node constraint calculations and generate check node to variable node messages for check node processing.
Both V2C and C2V messages in this embodiment are vectors, each including a number of sub-messages with LLR values. Each V2C message vector from a particular variable node contains sub-messages corresponding to each symbol in the Galois Field, with each sub-message giving the likelihood that the variable node contains that particular symbol. For example, given a Galois Field GF(q) with q elements, V2C and C2V messages will include at least q sub-messages representing the likelihood for each symbol in the field.
Generally, the C2V vector message from a check node to a variable node contains the probabilities for each symbol d in the Galois Field that the destination variable node contains that symbol d, based on the prior round V2C messages from neighboring variable nodes other than the destination variable node. The inputs from neighboring variable nodes used in a check node to generate the C2V message for a particular neighboring variable node are referred to as extrinsic inputs and include the prior round V2C messages from all neighboring variable nodes except the particular neighboring variable node for which the C2V message is being prepared, in order to avoid positive feedback. The check node thus prepares a different C2V message for each neighboring variable node, using the different set of extrinsic inputs for each message based on the destination variable node.
In the min-sum based decoding disclosed herein, the check nodes calculate the minimum sub-message min1(d), the index idx(d) of min1(d), and the sub-minimum sub-message min2(d), or minimum of all sub-messages excluding min1(d), for each nonzero symbol din the Galois Field based on all extrinsic V2C messages from neighboring variable nodes. In other words, the sub-messages for a particular symbol d are gathered from messages from all extrinsic inputs, and the min1(d), idx(d) and min2(d) is calculated based on the gathered sub-messages for that symbol d. For a Galois Field with q symbols, the check node will calculate the min1(d), idx(d) and min2(d) sub-message for each of the q−1 non-zero symbols in the field except the most likely symbol.
The V2C message vectors 712 from the variable node processor 702 are provided to a message format converter 714 which converts the format of V2C message vectors 712 to a format consisting of two parts, the most likely symbol, and the LLR of other symbols, normalized to the most likely symbol, yielding normalized V2C message vectors 716 in the second format. Message normalization in the message format converter 714 is performed with respect to the most likely symbol. Thus, the V2C and C2V vector format includes two parts, an identification of the most likely symbol and the LLR for the other q−1 symbols, since the most likely symbol has LLR equal to 0 after normalization. The normalized V2C message vectors 716 are provided to an edge interleaver 720 which shuffles messages on the boundaries at message edges, randomizing noise and breaking dependencies between messages. The interleaved normalized V2C message vectors 722 are provided to the check node processor 704, which generates C2V messages 724 for each neighboring variable node processor based on extrinsic V2C messages from other neighboring variable node processors.
The C2V messages 724 are provided to an edge de-interleaver 726, which reverses the process of the edge interleaver 720, and then to a format recovery circuit 730, which converts message vectors from the second, normalized format to the first message vector format of the variable node processor 702, reversing the process of the message format converter 714. The resulting first format C2V messages 732 are provided to the variable node processor 702 for use in updating perceived LLR values in variable nodes. In other embodiments, the variable node processor 702 is adapted to operate directly with message vectors of the second, normalized format. In these embodiments, the message format converter 714 and format recovery circuit 730 are omitted.
When the values in the min-sum based non-binary LDPC decoder 700 converge and stabilize, or when a limit is reached on the number of local iterations, the variable node processor 702 provides the total LLR Sn(a) 734 to a decision circuit 736 to generate a hard decision 740 based on the argmina of the total LLR Sn(a).
The check node processor 704 includes a hard decision and parity memory circuit 750 that processes the interleaved normalized V2C message vectors 722 to provide the most likely symbol 752 to a select and combine circuit 754 having a number of elementary computation units (ECUs). The check node processor 704 also includes a min finder 756 that calculates the min1(d), idx(d) and min2(d) sub-messages 760 for each of the q symbols in the Galois Field and stores them in a min memory 762. The stored min1(d), idx(d) and min2(d) sub-messages 764 are provided by min memory 762 to the select and combine circuit 754. The select and combine circuit 754 combines the min1(d), idx(d) and min2(d) sub-messages 764 and the most likely symbol 752 to generate the C2V messages 724.
The message vector format conversion performed by message format converter 714 on V2C message vectors 712 is reversed by format recovery circuit 730, providing C2V messages 732 to variable node processor 702 in the format used by the variable node processor 702.
Turning to
Blocks 804-812 are operations used to generate a V2C message a′(i) from a variable node to a check node a for iteration i. A determination is made (block 804) as to whether all C2V messages to the target variable node of C2V message a(k) were in agreement. If so, a decaying scaling factor is obtained (block 806) as a function of i−k, and in decoding iteration i, V2C message a′(i) to check node a is generated (block 810) by adding channel data for target variable node for iteration i to C2V messages for iteration i from check nodes for target variable node other than a and to C2V message a(k) multiplied by the decaying scaling factor. If not, in decoding iteration i, V2C message a′(i) to check node a is generated (block 812) by adding channel data for target variable node for iteration i to C2V messages for iteration i from check nodes for target variable node other than a. A determination is made (block 814) as to whether all V2C messages have been generated for iteration i. If not, the process of generating V2C messages continues (block 804). If so, parity check calculations are performed (block 816) for check nodes based on the V2C messages. C2V messages are generated (block 820). Variable node values are generated (block 822) based on the C2V messages. A determination is made (block 824) as to whether the maximum number of local iterations has been reached. If so, decoding is ended (block 830). Otherwise, a determination is made (block 826) as to whether the data converged. If so, decoding is ended (block 830). Otherwise, decoding iterations continue (block 804). When decoding is ended (block 830), this may be the end of decoding for a global iterations, or may be the end of overall decoding for a block or sector of data if the data converged, or if the maximum number of global iterations has been reached.
Although the LDPC decoder with variable node hardening disclosed herein is not limited to any particular application, several examples of applications are presented in
In a typical read operation, read/write head assembly 920 is accurately positioned by motor controller 912 over a desired data track on disk platter 916. Motor controller 912 both positions read/write head assembly 920 in relation to disk platter 916 and drives spindle motor 914 by moving read/write head assembly to the proper data track on disk platter 916 under the direction of hard disk controller 910. Spindle motor 914 spins disk platter 916 at a determined spin rate (RPMs). Once read/write head assembly 920 is positioned adjacent the proper data track, magnetic signals representing data on disk platter 916 are sensed by read/write head assembly 920 as disk platter 916 is rotated by spindle motor 914. The sensed magnetic signals are provided as a continuous, minute analog signal representative of the magnetic data on disk platter 916. This minute analog signal is transferred from read/write head assembly 920 to read channel circuit 902 via preamplifier 904. Preamplifier 904 is operable to amplify the minute analog signals accessed from disk platter 916. In turn, read channel circuit 902 decodes and digitizes the received analog signal to recreate the information originally written to disk platter 916. This data is provided as read data 922 to a receiving circuit. As part of decoding the received information, read channel circuit 902 processes the received signal using an LDPC decoder with variable node hardening. Such an LDPC decoder with variable node hardening may be implemented consistent with that disclosed above in relation to
Storage system 900 may be integrated into a larger storage system such as, for example, a RAID (redundant array of inexpensive disks or redundant array of independent disks) based storage system. Such a RAID storage system increases stability and reliability through redundancy, combining multiple disks as a logical unit. Data may be spread across a number of disks included in the RAID storage system according to a variety of algorithms and accessed by an operating system as if it were a single disk. For example, data may be mirrored to multiple disks in the RAID storage system, or may be sliced and distributed across multiple disks in a number of techniques. If a small number of disks in the RAID storage system fail or become unavailable, error correction techniques may be used to recreate the missing data based on the remaining portions of the data from the other disks in the RAID storage system. The disks in the RAID storage system may be, but are not limited to, individual storage systems such as storage system 900, and may be located in close proximity to each other or distributed more widely for increased security. In a write operation, write data is provided to a controller, which stores the write data across the disks, for example by mirroring or by striping the write data. In a read operation, the controller retrieves the data from the disks. The controller then yields the resulting read data as if the RAID storage system were a single disk.
Turning to
It should be noted that the various blocks discussed in the above application may be implemented in integrated circuits along with other functionality. Such integrated circuits may include all of the functions of a given block, system or circuit, or a portion of the functions of the block, system or circuit. Further, elements of the blocks, systems or circuits may be implemented across multiple integrated circuits. Such integrated circuits may be any type of integrated circuit known in the art including, but are not limited to, a monolithic integrated circuit, a flip chip integrated circuit, a multichip module integrated circuit, and/or a mixed signal integrated circuit. It should also be noted that various functions of the blocks, systems or circuits discussed herein may be implemented in either software or firmware. In some such cases, the entire system, block or circuit may be implemented using its software or firmware equivalent. In other cases, the one part of a given system, block or circuit may be implemented in software or firmware, while other parts are implemented in hardware.
In conclusion, the present invention provides novel systems, devices, methods and arrangements for an LDPC decoder with variable node hardening. While detailed descriptions of one or more embodiments of the invention have been given above, various alternatives, modifications, and equivalents will be apparent to those skilled in the art without varying from the spirit of the invention. Therefore, the above description should not be taken as limiting the scope of the invention, which is defined by the appended claims.