Embodiments of the present disclosure are directed to methods of forming error correcting codes.
In coding theory, BCH codes form a class of cyclic error-correcting codes that are constructed using finite fields. BCH codes are named for their inventors Raj Bose, D. K. Ray-Chaudhuri, and Alexis Hocquenghem. BCH codes can be defined as follows. Let GF(q) be a finite field, where g is a prime power, and choose positive integers m, n, d, c such that 2≤d≤n, gcd(n, q)=1, and m is the multiplicative order of q modulo n. Further, let a be a primitive nth root of unity in GF(qm), and let ml(x) be the minimal polynomial over GF(q) of ai for all i, The generator polynomial of the BCH code is the least common multiple g(x)=1 cm(mc(x), . . . , mc+d−2(x)). BCH codes allow a precise control over the number of symbol errors correctable by the code during code design. In particular, it is possible to design binary BCH codes that can correct multiple bit errors. BCH codes can also be easily decoded using an algebraic method known as syndrome decoding. This can simplify the design of the decoder for these codes by using small, low-power electronic hardware.
The syndrome of a received codeword y=x+e, where x is the transmitted codeword and e is an error pattern, is defined in terms of the parity matrix H. The parity check matrix of a linear code C is a generator matrix of the dual code C⊥, which means that a codeword c is in C iff the matrix-vector product Hc=0. Then, the syndrome of the received word y=x+e is defined as S=Hy=H(x+e)=Hx+He=0+He=He. Syndromes are useful in that the message polynomial drops out, and the length of S, the assumed number of errors L, is much less than the length of the codeword x itself.
The Berlekamp-Massey (BM) algorithm is an algorithm for decoding BCH codes that was originally developed to find the shortest linear feedback shift register (LFSR) for a given binary output sequence. The BM algorithm finds an error locator polynomial (ELP) C(x)=1+Clx+C2x2+ . . . +CLxL which results in all syndromes being equal to 0: Sn+ClSn-1+ . . . +CLSn-L=0, where L is the number of assumed errors, N is the total number of syndromes, and n is an index that ranges from 0 to (N−1), and L≤n≤N−1.
The BM algorithm begins by initializing C(x) to 1, L to zero; B(x) (a copy of the last C(x) since L was updated) to 1, b (a copy of the last discrepancy d since L was updated and initialized) to 1; and m (the number of iterations since L, B(x), and b were updated and initialized) to 1. The algorithm iterates from n=0 to N−1. At each iteration k of the algorithm, a discrepancy d is calculated:
d=Sk+ClSk-1+ . . . +CLSk-L.
If d is zero, C(x) and L are assumed correct for the moment, m is incremented, and the algorithm continues.
If d is not zero and 2L>n, C(x) is adjusted so that a recalculation of d would be zero:
C(x)=C(x)−(d/b)xmB(x).
The xm term shifts B(x) to follow the syndromes corresponding to b. If the previous update of L occurred on iteration j, then m=k−j, and a recalculated discrepancy would be:
d=Sk+ClSk-1+ . . . −(d/b)(Sj+B1Sj−1+ . . . ).
This would change a recalculated discrepancy to: d=d−(d/b)b=d−d=0. Then, m is incremented, and the algorithm continues.
On the other hand, if d is not zero and 2L≤n, a copy of C is saved in vector T, C(x) is adjusted as above, B is updated from T, L is reset to (n+1−L), the discrepancy d is saved as b, m is reset to 1, and the algorithm continues.
Hard information for a received bit is the estimated bit value, i.e., 0 or 1, while “soft information” includes both an estimated value and the reliability of this estimation. This reliability may take many forms, but one common form is the probability, or an estimation of this probability, that the estimation is correct. For example, in the case of a single-level cell (SLC) flash memory, in which each cell stores a single bit, hard information is obtained with a single read (single threshold), while increasingly refined soft information is obtained from additional reads.
In hard-decision (HD) decoding, the hard-information vector (per-coordinate bit estimates) is used as the input of an error-correcting code (ECC) decoder, while in soft-decision (SD) decoding, a soft information vector (per-coordinate reliability vector on top of the hard-information vector) is used as the input of the ECC decoder.
Thus, soft information may be regarded as an estimate of the reliability of each bit estimate, on top of the bit estimates themselves. Hence, bits with a high enough reliability may be considered “strong”, while the remaining bits may be considered “weak”. For example, in an SLC flash memory, one read, e.g., with threshold level h, results in the HD vector, while two additional reads, e.g., with thresholds h+Δ, h−Δ, may be used to divide bits into strong and weak bits.
An exemplary encoding/decoding is depicted in
where the number of rows of matrix Hd is (n−ks)−(n−kw)=kw−ks, where the subscripts s, w, d respectively refer to strong, weal; and delta. The information data x∈Fqk
Information data x∈Fqk
A read of cw with errors yields:
y=cw+e. (2)
From y, the syndrome of the weak BCH can be computed:
Hwy=Hwe. (3)
If the information can be decoded from syndrome, then the decoding is completed, otherwise, compute:
Hdy−Hdcw=Hdcw+Hde−Hdcw=Hde, (4)
since Hdcw was saved in a protected form. Thus there exist both Hwe and Hde and therefore, from EQ. (1):
Thus, decoding can be performed using the stronger BCH Cs with parity check matrix Hs.
Let the error probability of weak BCH be given by p=4.5×10−3; the correction capability be t=64; and the BCH frame error rate (fer) be q=bch_fer(p, 213+64×14, t, 1), i.e., a function of the bit error rate p, length 213+64×14, and error capability t. That is, the length of the BCH code is n=213+64×14. Let, the error probability of the strong BCH is given by:
p=4.5×10−3;t1=91;q1=bch_fer(p,213+64×14,t1,1)
As in the weak BCH, the length of the BCH code is n=213+64×14, but the correction capability is larger here and is determined by t1=91.
Suppose that a weak BCH has error capability tw and a strong BCH has error capability ts. Then the weak code uses the syndromes Hwe, and the strong BCH requires the syndromes of the weak BCH Hwe, as well as additional syndromes Hde. The Berlekamp-Massey (BM) decoder works sequentially on the syndromes, that is, one syndrome after the other. Therefore, if a weak BCH fails, a decoding procedure of the strong BCH can resume from the same point. It will not be necessary to start decoding the strong BCH from the beginning, and it is therefore more efficient. In contrast, other decoding algorithms, such as Euclidian decoding, work simultaneously on all syndromes. Therefore, decoding of weak BCH and strong BCH codes is performed separately, and consequently will be more time consuming.
Exemplary embodiments of the disclosure as described herein are directed to an encoding method for generalized concatenated codes tailored for using RAID on a function of a codeword, instead of on the codeword itself. According to embodiments of the disclosure, vectors are calculated with prescribed syndromes by using properties that the code is linear and cyclic, and using matrix manipulation of polynomials to find a systematic encoder that saves computations and required memory.
According to an embodiment of the disclosure, there is provided a computer implemented method of encoding generalized concatenated error-correcting codes, including receiving a codeword {tilde over (C)}j comprising nr rows, wherein nr>=1, of n bits each with kM information bits, kM<n, n>=1, wherein codeword {tilde over (C)}j is a code with parity check matrix
wherein matrix H1 is the parity check matrix of code C1, matrix
where {tilde over (Δ)}tj−1,j has Lj rows and extj has Lj−δj rows, and matrix Δj−1,j represents the additional checks for codewords in Cj that are not in Cj−1 and has δj rows; partitioning the kM information bits into n, blocks, wherein each layer comprises kj+1RS−kjRS blocks of {tilde over (k)}j bits each for j=2, . . . , L, wherein L is a number of layers of weak BCH code C1, wherein each layer, except for a first layer, comprises a Reed Solomon (RS) stage followed by a BCH code, and the first layer includes only a BCH code, and {tilde over (k)}j is a dimension of codeword {tilde over (C)}j; encoding a first k2RS blocks with a with code C1 and computing syndromes Sij={tilde over (Δ)}Sj(xi) wherein a vector of syndromes
is information encoded by Reed Solomon code RS2, wherein a resulting RS2 codeword is given by
transforming information blocks of size {tilde over (k)}j, for j=2, . . . , L and i∈{kjRS+1, . . . , kj+1RS} into blocks ui, i=1 to nr, of size kj using zero padding in coordinates specified by unit vectors; encoding block ui with an encoder for C to compute codeword xi; calculating a vector b of length n−{tilde over (k)}j from
wherein matrix Tj is defined by Rj=(Qj|Tj), where Q has n−kl columns, Tj has k1−{tilde over (k)}j columns, and Rj is a square matrix of dimension (n−{tilde over (k)}j)(n−{tilde over (k)}j) such that Rj{tilde over (H)}j=(A|I), wherein A is an arbitrary matrix, I is an identity matrix, {tilde over (H)}j is a parity matrix of codeword {tilde over (C)}j; updating codeword xi according to
and computing syndromes Sij, ={tilde over (Δ)}Sj,(xi) for j′=j+1, . . . , L, wherein a resulting RSj+1 codeword is given by
for j<=L−1.
According to a further embodiment of the disclosure, the method includes, if parity matrix {tilde over (H)}j is not a full rank matrix, calculating a full rank parity matrix H′j from one of {tilde over (H)}j if a degree of a minimum polynomial for each element is m, wherein m is defined from a length n of a primitive binary BCH code associated with said parity matrix {tilde over (H)}j by n=2m−1, and H′i with rank(H1)=deg(Pα
According to an embodiment of the disclosure, there is provided a computer implemented method of encoding generalized concatenated error-correcting codes, including providing a parity matrix {tilde over (H)}j of a j-th layer code and predefined syndrome {tilde over (s)}, wherein syndrome g is a vector
of length n−{tilde over (k)}j, in which the first n−kl coordinates are zero, wherein s is a vector of length k1−{tilde over (k)}j, wherein n is a length of a codeword c of a first layer BCH code Cl of dimension {tilde over (k)}j, wherein codeword c satisfies {tilde over (H)}jc={tilde over (s)}, wherein a first layer code includes only a BCH code, and each subsequent layer includes a Reed-Solomon (RS) stage followed by a BCH code; finding a square matrix Rj of dimension (n−{tilde over (k)}j)(n−{tilde over (k)}j) such that Rj{tilde over (H)}j=(A|I), wherein A is an arbitrary matrix and I is the identity matrix, wherein Rj=(Qj|Tj), where Q has n−kl columns and Tj has k1−{tilde over (k)}j columns; finding a vector c=(a b) wherein a is a vector of length {tilde over (k)}j and b is a vector of length n−{tilde over (k)}j; and solving
wherein a=0 and b=Tjs, wherein codeword c is nonzero only on the last n−{tilde over (k)}j=n−kj bits.
According to an embodiment of the disclosure, there is provided a computer processor configured to execute a program of instructions to perform the method steps for encoding generalized concatenated error-correcting codes, wherein the computer processor is one or more of an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), or firmware.
Exemplary embodiments of the invention as described herein generally provide systems and methods for encoding and decoding BCH codes tailored for a RAID. While embodiments are susceptible to various modifications and alternative forms, specific embodiments thereof are shown by way of example in the drawings and will herein be described in detail. It should be understood, however, that there is no intent to limit the invention to the particular forms disclosed, but on the contrary, the invention is to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the invention.
According to embodiments of the disclosure, there is provided a new projected BCH coding scheme that achieves superior performance relative to standard BCH code. According to an embodiment, instead of using RAID on an entire codeword, RAID is used only on a function of the codeword. This function, because it is also linear, is referred to hereinbelow as a projection. For a projected BCH according to an embodiment for a double-layered case; embodiments assume there is a weak BCH code Cw and a strong BCH code Cs. These codes will be referred to herein below as C1 and C2, respectively. According to embodiments, the condition C1⊃C2 holds, that is, every codeword of the strong code C2 is also a codeword of the weak code C1.
According to an embodiment, suppose there are N bits of information to code. These bits can be distributed among nr blocks, as illustrated in
According to embodiments, continuing with the example of
Si=HΔxi1,i=1, . . . ,4.
If the x21-x23 syndrome is computer based on HΔ, the result is the zero vector, since these are codewords of the strong code C2, so these are not computed at the encoder. According to embodiments, the encoder can be any standard encoder as is known in the art, such as a BCH encoder or an RS encoder.
However, according to embodiments, the syndromes Si can be treated as symbols that are encoded using RS codes. In the example of
HΔwi=RSi,i=1,2,3.
It will be shown below it is always possible to find wi. For now, embodiments assume there is a simple lookup table that maps each syndrome into a codeword. The encoder computes and stores, shown in
z1=x12+w1.
z2=x22+w2.
z3=x32+w3.
Because both x21 and w1 are codewords of C1, so is z1. Similarly, so are z2 and z3.
At the output of the BSC channel, each codeword has noise added to it. A decoder according to an embodiment starts by attempting to decode the codewords of C1: x11-x14, z1-z3. If at least 4 of the decoding attempts successful, then the RS stage will succeed. For codewords x11-x14: if decoding succeeds, then the syndromes Si=HΔxi1 can be computed and used to decode RS. For codeword z1-z3: if decoding succeeds, then the syndromes Si=HΔzi, i=1, 2, 3 can be computed. Since x21-x23, are codewords of C2 then HΔxi2=0, i=1, 2, 3. It follows that HΔzi=HΔwi, i=1, 2, 3. Thus, given the syndrome, the codeword wi can be found in C1. This can be carried out by a lookup table that maps any given syndrome into a codeword of C1. The codeword wi can be subtracted from z, to obtain the codeword xi2. The syndrome HΔzi=HΔwi can be used for the RS decoding.
If at least 4 codewords were successfully decoded, the RS can be successfully decoded. However, according to an embodiment, if codeword x11-x14 are not successfully decoded at the first layer, the syndrome HΔxi that was decoded using the RS decoding can be used to decode it using the stronger code C2. The syndrome can be used for syndrome decoding, in a similar manner to what was described above for a projected BCH according to an embodiment. In addition, if codeword z1-z3 was not successfully decoded at the first layer, the syndrome HΔwi that was decoded using the RS decoding can be used to find w, using a lookup table. Then, the wi can be subtracted from zi+e2i, where e2i is the noise added to the respective codeword, to obtain xi2+ei2, which can be decodes to find xi2 using a decoder according to an embodiment for the strong code, since xi2 is a codeword of C2.
For example, referring to
Multi-Layer BCH Encoding/Decoding: Preliminaries
Further embodiments of the disclosure provide a general multi-layer scheme for BCH encoding/decoding. According to embodiment, the following notations and preliminaries will be defined as follows.
L is the number of layers;
Each layer, except the first one, is composed of an RS stage followed by the BCH code;
The first layer includes only a BCH code;
n is the length of each block;
nr is the number of blocks;
Layer j is associated with the BCH code Cj;
{Ci} is a set of binary linear codes of length n that maintain C1 ⊃C2 . . . ⊃CL, i.e., C1 is the weakest code;
dj is the minimum distance of code cj, where the codes maintain: d1≤d2≤ . . . ≤dL
kj is the dimension of code Cj;
is the correction capability of code Cj;
δj=kj−1=kj is the difference between dimensions;
The parity check matrix of code Cj can be written in the form
where H1 is the parity check matrix of code C1;
The matrix Δ21 represents the additional checks for codewords in C2 that are not in C1;
the parity check matrix is assumed to be full rank; and
the delta syndrome of a binary vector x of length n is defined as ΔSj(x)=Δmj,j−1·x.
According to embodiments, for RS codes, the following preliminaries apply.
For layer j, j=2, . . . , L, there is also an RS code. The RS code is not necessarily binary, and may be shortened. For layer j, there is an integer Lj≥δj, such that Lj≥nr. Lj will be the size (in bits) of each symbol of the RS code. The field size of the RS will be 2L
According to embodiments, the following preliminaries apply for an extended panty matrix. Recall that the matrix Δj,j−1 has δj rows. Because an RS code is defined over symbols of Lj≥δj, there may be a need to extend the syndrome matrices to the size that will be at least the size of the RS symbols
where {tilde over (Δ)}j−1,j has Lj rows and extj has Lj−δj rows. The code {tilde over (C)}j can be defined to be the code with parity check matrix
The condition is that the matrix below is full rank
Because all the rows of Hj appear also in {tilde over (H)}j it follows that the correction distance of {tilde over (C)}j is at least the distance of Cj. A decoder of Cj can be sued to decode words of {tilde over (C)}j up to the correction capability tj. The dimension of the code {tilde over (C)}j is given by
Similarly to the previous delta syndrome function for Cj, a syndrome can be defined for {tilde over (C)}j by {tilde over (Δ)}Sj(x)={tilde over (Δ)}j,j−1·x.
According to an embodiment, a codeword of a large code CM is composed of blocks of nr rows, where each block has length n:
The blocks of length n are denoted by x1, x2, . . . , xn
According to an embodiment, an undetected error (UED) is defined as follows. For a linear code C with error capability t, a vector v in the vector space is an undetected error if there is a nonzero codeword c in C such that the distance between c and v is less than the error capability.
A BCH code according to embodiments has the following properties.
The length of the code is nr·n.
The dimension of the code is
kM=k1RS+(k2RS−k3RS){tilde over (k)}2+ . . . +(kLRS−kL−1RS){tilde over (k)}L−1+(nr−kLRS){tilde over (k)}L.
A decoding capability of the code is as follows:
Define an error matrix e, similar to the definition of the code matrix:
For j=2, . . . , L+1, define: εj(e)=|{|wt(ei)≥tj−1+1 and ei is not UED for Cj−1}|
where wt( ) is Hamming weight, and φj(e)=|{i|ei is a UED for Cj−1}|.
A decoding according to an embodiment will be successful if the following condition on the error matrix is satisfied, for j=1, . . . , L:
εj(e)+2φj(e)≤djRS−1,
and
εL+1(e)=φL+1(e)=0.
Encoding and Decoding the Code
Embodiments of the disclosure can find a codeword c of code C1 with a predefined syndrome {tilde over (s)}, that is:
{tilde over (H)}jc={tilde over (s)}.
The syndrome {tilde over (s)} is a vector of length n−{tilde over (k)}j, in which the first n−kl coordinates are zero. That is, the vector is in the form:
where s is a vector of length k1−{tilde over (k)}j.
Lemma:
For a cyclic code of length n and dimension k, any k cyclically consecutive coordinates can be taken as information symbols.
According to embodiments, there exists a square matrix Rj of dimension (n−{tilde over (k)}j)(n−{tilde over (k)}j) such that
Rj{tilde over (H)}j=(A|I),
where A is an arbitrary matrix and I is the identity matrix. The matrix Rj should be be full rank, since it has an inverse matrix. The relationship {tilde over (H)}jc={tilde over (s)} can be used to obtain an equivalent relationship:
Rj{tilde over (H)}jc=Rj{tilde over (s)}.
Rj can be written as:
Rj=(Qj|Tj),
where Q has n−kl columns and Tj has k1−{tilde over (k)}j columns.
According to an embodiment, for some vector a of length {tilde over (k)}j and some vector b of length n−{tilde over (k)}j, there is a vector c=(a b). Substituting everything:
According to an embodiment, a=0 and b=Tjs. This choice leads to a systematic coding, i.e., a coding that includes the information bits as well as the coded bits, described below. The length of b is n−{tilde over (k)}j and it follows that the codeword c may be nonzero only on the last n−
coordinates. If c is added to a codeword in {tilde over (c)}∈{tilde over (C)}j, with parity check matrix {tilde over (H)}j, then the resulting codeword c+{tilde over (c)} will also maintain the relationship {tilde over (H)}jc={tilde over (s)}, because the codeword {tilde over (c)} is in Cl, and therefore c+{tilde over (c)} is also in Cl. Since {tilde over (c)}∈{tilde over (C)}j, the syndrome, with parity check matrix {tilde over (H)}j, of {tilde over (c)} is zero by definition, and thus the syndrome of c+{tilde over (c)}∈C1 is {tilde over (s)}. Because codeword c may be nonzero only on the last
to generate c+{tilde over (c)} from {tilde over (c)}, at most the last
coordinates of {tilde over (c)} will need to be modified
Encoding {tilde over (C)}j with an Encoder for Cj
Recall that the constraint on the matrices extj is that the following matrix is full rank:
where the rows of the matrices extj are unit vectors.
According to an embodiment, the information set of a linear code is a set of k bits such that the k information bits can be mapped into these coordinates and the projection from C is onto, which means that the columns in the generator matrix associated with the k coordinates are independent. If the matrix extj contains unit vectors with coordinates within an information set, then encoding {tilde over (C)}j is as follows:
Recall that a codeword c for a predetermined syndrome may be nonzero only on the last
coordinates. If the forced zero coordinates for {tilde over (C)}j were at the end of the information for Cj, that is in the range
then the information coordinates
would not be affected by adding c. But for j<L, the zeros will not be forced at the end of the information, but on a different set of the same size, and therefore the information coordinates will be affected by adding c. The resulting encoding is not systematic, but the computational cost at the decoder is typically small.
Encoding for Full Rank Parity Check Matrices
According to an embodiment of the disclosure, there is a systematic encoder for Cj, denoted by Encj. A systematic encoder is an encoder that outputs the information bits, as well as the coded bits, so that the original information bits always appear in the codeword. The encoding for {tilde over (C)}j can be performed using the encoder for Cj, as explained above, by padding zeros at the end of the information. The kM bits of information are then partitioned into non-equal blocks, as shown In
is now treated as the information to be encoded by RS2, where each symbols of the vector consists L2 bits (or is from an alphabet of size 2L
as illustrated in
and the codeword xi is updated at step 176 according to:
as illustrated in
into a resulting RSj+1 codeword at step 177 given by:
Decoding for Full Rank Parity Check Matrices
According to an embodiment, there is a decoder for Cj given by Decj for j=1, . . . , L. As in the case of the encoder, the decoder can be any standard decoder as is known in the art, such as BCH decoder or an RS decoder. According to embodiments, the inputs to the decoders are the syndromes and the output is an error vector. The input syndrome is a binary vector of length n−kj, and the output is a binary error vector of length n or failure. Failure occurs when there is no codeword of distance at most tj from the received codeword. A decoder according to an embodiment can decode all error patterns defined in the properties of the code.
A decoding algorithm according to an embodiment takes as input a received binary matrix with nr rows and nc columns, where yi is given by row i, and the output is a binary vector u of length kM or failure. The vector u is a correct information vector if the error matrix has the error patterns defined in the properties of the code. If an error is detected the output is failure.
IF={i|êi=failure},
IN={i|êi≠failure}.
For all rows with non-failures, the decoded codeword {circumflex over (x)}i=yi+êi and the syndromes {tilde over (Δ)}S2({circumflex over (x)}i) can be calculated for all rows. If the set of syndromes is already a codeword of RS2, the decoded error vectors can be added to the received rows and u can be output as the vector of information at step 183.
According to embodiments, in a general case, errors and erasures can be used for decoding for RS2 with erasures on IF, and the syndromes {tilde over (Δ)}S2({circumflex over (x)}i) are recovered for all rows. If RS detects an error, declare error.
In a practical decoder according to embodiments, if the RS decoder corrected an error at a certain row in IN, then that row is considered to be in IF. Then, for all i, i.e., for rows in IF, the last Li−δi entries of {tilde over (Δ)}S2({circumflex over (x)}i) are deleted to get ΔS2({circumflex over (x)}i), ΔS2(yi) is calculated, and ΔS2(êi)=ΔS2(yi)+ΔS2({circumflex over (x)}i) is calculated, after which there is Si2=H2êi for all rows.
Referring again to
In a practical decoder according to embodiments, if the RS decoder corrected an error at a certain row in IN, then that row is considered to be in IF. Then, for all i, the last Li−δi entries of {tilde over (Δ)}Sj+1({circumflex over (x)}i) are deleted to get ΔSj+1({circumflex over (x)}i), ΔSj+1(yi) is calculated, and {tilde over (Δ)}Sj+2(ei)={tilde over (Δ)}Si+1(yi)+ΔS2j+2({circumflex over (x)}i) is calculated. According to an embodiment, there are now Si,j+1=Hj+1êi for all rows. Steps 184 to 187 are repeated for all stages j=2, . . . , L.
Encoding and Decoding for BCH Components
According to embodiments, for some codes, the matrix Hi is not full rank. A decoding algorithm according to an embodiment of the disclosure includes decoding of BCH components with some modifications. Specifically, consider a t-error correcting primitive binary BCH code C of length n=2m−1 Assume α is a primitive of the field of size 2m) and that the parity check matrix is given by,
where each element from the field is considered as a binary column vector of length m. H may not be full rank. BM decoding requires a syndrome with respect to Has input. For an algorithm according to an embodiment to work, the matrix H should be full rank, otherwise it will not necessarily be possible in the encoding to find a codeword with a pre-determined syndrome.
According to embodiments, a fixed subset of rows of H that are a basis of the row space will be used, and denote the resulting parity check matrix by H′. The missing bits of the syndrome, which are rows in H that do not appear in H′, can be obtained as fixed linear combinations of existing syndrome bits. According to embodiments, there are only minor modifications in the encoding and decoding. For the parity check matrix, Hi=(1 αij αi2j . . . αi(n−1)j), the code is generated by Pα
According to an embodiment, consider the parity check matrix H:
where I={i1, i2 . . . ip}⊆{1, 2, . . . , 2t−1}. The generator polynomial is gl(x)=LCM(Pα
H′ can be obtained by taking for each element with distinct minimal polynomial, but not in the same set of conjugates: Hi, if the degree of the minimal polynomial is m, or H′i with rank(Hi)=deg(Pα
(1) Complete the missing entries for all i with minimal polynomial with degree smaller than m by multiplying the syndrome H′x with an appropriate matrix Ml; or
(2) For all i that is not the smallest in the set of conjugates, the syndrome can be calculated by repeatedly squaring the syndrome of the smallest element in the set, similar to the way even syndromes are calculated from odd syndromes in BM decoding.
Cyclic Codes Property
According to embodiments, for a vector x=(x1, . . . , xn)∈Fn, the value L(x)=max{1≤j≤n: x≠0}, for the zero vector define L(0)=0, the highest nonzero coordinate.
Lemma:
For a parity check matrix H with size r×n over field F=GF(q) of a cyclic code C, if s is the rank of H, then the first s columns of H are linearly independent.
An algorithm according to an embodiment of the disclosure is as follows. Fix m≥1 and n≤2m−1 and t a positive integer, field F=GF(2m) and let a be a primitive of the field. Consider the BCH check matrix:
Suppose, for the time being, that H is full ranked with rank t. Now, set r=t·m, the size of the BCH redundancy. Note that by the lemma, for every vector w∈Ft, there exists a unique binary vector v of length n such that H·v=w and L(v)≤r.
According to an embodiment, fix integer t′, t>t′≥1. The input of an algorithm according to an embodiment is a general vector w∈Ft, whose first t′ coordinates, each comprising m bits, are zero. An output of an algorithm according to an embodiment is the unique binary vector v of length n such that H·v=w and L(v)≤r.
Consider the m unit vectors of F viewed as in dimensional vector of the linear space GF(2)m:
which corresponds to αj. Similarly, consider the zero vector of F as an m dimensional zero vector
Take t″, where t′<t″≤t, and 1≤j≤m, and define a unit vector in Ft:
Similarly to before, for each j and t″, there exists a unique binary vector ut″j no of length n such that L(ut″j)≤r and H·ut″j=ωt″j. According to embodiments, the set {ut″j} is referred to as a unit-vectors-solution. For a general vector w, take a sum of unit-vector-solutions as shown in
Unit-Vectors-Solutions Expressed as Polynomial Products
According to embodiments, unit-vectors-solutions can be expressed as polynomial products. For every 1≤t″≤t, let gt″(x) be the polynomial of degree m with coefficients in GF(2) which is the minimal polynomial of αt″. Define for 1≤t″≤t:
Gt″(x)=Π1≤s≤t,s≠t″gs(x),
which corresponds to all indices except the one of the unit vector,
Gz(x)=Π1≤s≤t′gs(x),
which corresponds to all zero indices in the beginning of the vector, and
Gt″N(x)=Πt′<s≤t,s≠t″gs(x),
which corresponds to all indices after the first t′ zero indices, except the one of the unit vector. Then, Gt″(x)=Gz (x)Gt″N(x) and deg(Gt″(x))=m·(t−1), deg(Gz(z))=m·t′, deg(Gt″N(x))=m·(t−t′−1).
According to embodiments, for unit vector solution ut″j=(ut″,j, 1, . . . ut″,j,n), define a polynomial
Ut″,j(x)=Σ1≤k≤nut″,j,kxk−1.
Because L(ut″,j)≤r, it follows that this is a polynomial of degree ≤r−1. According to a definition of unit vector solution, Ut″,j(αs)=0 for all 1≤s≤t, s≠t″. It follows that Gt″(x)|Ut″,j(x). Thus, there exists a unique polynomial ht″,j(x) with coefficients in GF(2) such that
ht″,j(x)·Gt″(x)=Ut″,j(x),
where deg(ht″,j(x))<=r−1−m·(t−1)=mt−1−mt+m=m−1.
According to an embodiment, the memory needed for an algorithm according to an embodiment is as follows. Store in memory Gz(x), {Gt″N(x): t′<t″≤t} and {ht″,j(x): t′<t″≤t, 1≤j≤m} and recall that deg(Gt″N(x))=m·(t−t′−1). Thus the memory comprises B bits, where B=m·t′+(t−t′)·((t−t′−1)·m+m2).
General Vector Input
According to an embodiment, a general vector input is as follows. Take an arbitrary vector w=(w1, . . . , wt)∈Ft. w can be written as a sum of unit vectors:
w=Σt′≤t″≤t,1≤j≤mαt″,jωt″,j,
where at″,j are binary bits comprising the coordinates of w. The output of an algorithm according to an embodiment can be written as a sum of unit-vectors-solutions:
w=Σt′≤t″≤t,1≤j≤mat″,jωt″,j=Σt′≤t″≤t,1≤j≤mat″,jHut″,j=HΣt′≤t″≤t,1≤j≤mat″,jut″,j.
For t′<t″≤t, define
Then: vt″∈GF(2)n, L(vt″)≤r, and
w=HΣt′≤t″≤tvt″=Hv.
Write a polynomial V(x) as product and sum of polynomials: For t′<t″≤t, Vt″(x)=Σ1≤k≤nvt″,kxk−1 is the polynomial corresponding to vt′. The polynomial corresponding to v is:
V(x)=Σt′<t″≤tVt″(x).
Then, it holds for t′<t≤t* that
Recall that hi″j(x) are polynomials of degree≤m−1 that are stored in memory. Thus, with m2 XOR operations, the function ƒt″(x) can be computed:
ƒt″(x)=Σ1≤j≤mat″,jht″,j(x).
With an additional m2·(t−t′−1) XORS, Wt″(x) of degree m(t−t′) can be computed:
Wt″(x)=Gt″N(x)ƒt″(x)
It follows that S={Wt″(x)}t′<t″≤t can be computed with m2·(t−t′)2 XOR operations.
In addition
of degree m·t. After computing S, compute
with an additional m·(t−t′)2 XOR's and V(x) with a further m2·t′(t−t′) XORs operations. According to an embodiment, an upper bound to the number of XORs required for the computation of V(x) is C=m2·t·(t−t′+1).
According to embodiment, complexity can be reduced with added memory. When two polynomials in GF(2)[x]
are stored in memory, their product requires M×N XORs. Consider a third polynomial
The product h(x)·ƒ(x) is computable with 2(M+N) XORS. Once h(x),·ƒ(x) are given, compute ƒ(x)·g(x) if ham(g(x))≤N/2 with M×N/2 XORs, or ƒ(x)·g(x)=ƒ(x)·(g(x)+h(x))+h(x)·ƒ(x), if ham(g(x))≤N/2 using M×N/2+M+N XORs. h(x)·ƒ(x) can be stored in memory to further reduce the complexity.
System Implementations
It is to be understood that embodiments of the present disclosure can be implemented in various forms of hardware, software, firmware, special purpose processes, or a combination thereof. In one embodiment, the present disclosure can be implemented in hardware as an application-specific integrated circuit (ASIC), or as a field programmable gate array (FPGA). In another embodiment, the present disclosure can be implemented in software as an application program tangible embodied on a computer readable program storage device. The application program can be uploaded to, and executed by, a machine comprising any suitable architecture.
The computer system 191 also includes an operating system and micro instruction code. The various processes and functions described herein can either be part of the micro instruction code or part of the application program (or combination thereof) which is executed via the operating system. In addition, various other peripheral devices can be connected to the computer platform such as an additional data storage device and a printing device.
It is to be further understood that, because some of the constituent system components and method steps depicted in the accompanying figures can be implemented in software, the actual connections between the systems components (or the process steps) may differ depending upon the manner in which the present invention is programmed. Given the teachings of the present invention provided herein, one of ordinary skill in the related art will be able to contemplate these and similar implementations or configurations of the present invention.
While the present invention has been described in detail with reference to exemplary embodiments, those skilled in the art will appreciate that various modifications and substitutions can be made thereto without departing from the spirit and scope of the invention as set forth in the appended claims.
Number | Name | Date | Kind |
---|---|---|---|
7484165 | Griesser et al. | Jan 2009 | B2 |
7688908 | Niu | Mar 2010 | B2 |
7978100 | Yang et al. | Jul 2011 | B2 |
8111670 | Niu | Feb 2012 | B2 |
20060114936 | Paffen | Jun 2006 | A1 |
20090040081 | Yang | Feb 2009 | A1 |
20100306627 | Sakai | Dec 2010 | A1 |
20110310978 | Wu | Dec 2011 | A1 |
20140126345 | Ohana | May 2014 | A1 |
20160315733 | Murakami | Oct 2016 | A1 |
20180026661 | Ha | Jan 2018 | A1 |
Entry |
---|
Ryan Gabrys, et al., “Graded Bit-Error-Correcting Codes With Applications to Flash Memory,” IEEE Transactions on Information Theory, vol. 59, No. 4, Apr. 2013, pp. 2315-2327. |
Hideki Imai, et al. “Generalized Product Codes,” IEEE Transactions on Information Theory, vol. IT-27, No. 2, Mar. 1981, pp. 181-187. |
Johannes Maucher, et al., “On the Equivalence of Generalized Concatenated Codes and Generalized Error Location Codes,” IEEE Transactions on Information Theory, vol. 46, No. 2, Mar. 2000, pp. 642-649. |
Number | Date | Country | |
---|---|---|---|
20190114228 A1 | Apr 2019 | US |