Bose-chaudhuri-hocquenchem (BCH) encoding and decoding tailored for redundant array of inexpensive disks (RAID)

Information

  • Patent Grant
  • 10387254
  • Patent Number
    10,387,254
  • Date Filed
    Thursday, October 12, 2017
    7 years ago
  • Date Issued
    Tuesday, August 20, 2019
    5 years ago
Abstract
A method of encoding generalized concatenated error-correcting codes includes providing a parity matrix {tilde over (H)}j of a j-th layer code and predefined syndrome {tilde over (s)} of length n−{tilde over (k)}j, where the first n-kl coordinates are zero, n is a length of a codeword c of a first layer BCH code Cl of dimension {tilde over (k)}j, codeword c satisfies {tilde over (H)}jc={tilde over (s)}, 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 R, 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, Rj=(Qj|Tj), where Q has n−kl columns Tj and has k1−{tilde over (k)}j columns; finding a vector c−(a b) where a is a vector of length {tilde over (k)}j and b is a vector of length n−{tilde over (k)}j; and solving
Description
TECHNICAL FIELD

Embodiments of the present disclosure are directed to methods of forming error correcting codes.


DISCUSSION OF THE RELATED ART

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 FIG. 1, in which a weak BCH code is given by CwFqn, the kw information bits are x∈Fqkw, and the parity check matrix of the weak BCH is Hw∈Fq(n−kw)×n. A stronger BCH CsFqn has parity check matrix Hs∈Fq(n−ks)×n given by:











H
s

=


(




H
w






H
d




)



F
q


(

n
-

k
s


)

×
n




,




(
1
)








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∈Fqkw can be encoded and decoded with the weak code and also with the strong code. Trivially, the information data can be encoded and decoded with the weak code CwFqn, and can be encoded and decoded with the strong code CsFqn, as described herein below.


Information data x∈Fqkw can be encoded using a BCH code Cw to obtain the codeword c{dot over (v)}, as illustrated in FIG. 2. The overhead of the strong code is given by Hdcw as shown in FIG. 2. This additional overhead may reside on a different page. Note that the overhead stored for a strong code according to an embodiment is not a conventional BCH overhead but Hdcw instead. However, the overall code is equivalent to a BCH code, as will be shown herein below. This overhead is protected by additional ECC, so that Hdcw is clean from errors.


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):











H
s


e

=


(




H
w






H
d




)


e





(
5
)








Thus, decoding can be performed using the stronger BCH Cs with parity check matrix Hs.


Example

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.


SUMMARY

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








H
~

j

=

(




H
1







Δ
~

21







Δ
~

32












Δ
~



j
-
1

,
j





)






wherein matrix H1 is the parity check matrix of code C1, matrix









Δ
~



j
-
1

,
j


=

(




Δ


j
-
1

,
j







ext
j




)


,





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






(


S
12

,





,

S


k
2
RS

,
2



)





is information encoded by Reed Solomon code RS2, wherein a resulting RS2 codeword is given by







(


S
12

,





,

S


k
2
RS

,
2


,

S



k
2
RS

+
1

,
2


,





,

S


n
r

,
2



)

;





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







b
=


T
j



(




S

i





2












S

i





j





)



,





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









x
i




x
i

+

(



0









0




b



)



=


(




x
1











x


k
~

j







x



k
~

j

+
1












x
n




)

+

(



0









0





b
1











b

n
-


k
~

j






)



;





and computing syndromes Sij, ={tilde over (Δ)}Sj,(xi) for j′=j+1, . . . , L, wherein a resulting RSj+1 codeword is given by








(


S

1
,

j
+
1



,





,


S


k

j
+
1

RS

,

j
+
1





S



k

j
+
1

RS

+
1

,

j
+
1




,





,

S


n
r

,

j
+
1




)






for





j

<=

L
-

I
.







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αi) rows if the degree of the minimal polynomial is less than m, wherein Pαi(x) is the minimal polynomial of α1 over the binary field and a generator polynomial of {tilde over (H)}j is g1(x)=LCM(Pαi(x)|i∈I).


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







s
~

=

(



0




s



)






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









(

A
|
I

)



(



a




b



)


=



(


Q
j

|

T
j


)



s
~


=



T
j


s





wherein





a

=


0





and





b

=


T
j


s





,





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.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 depicts an exemplary encoding/decoding of a weak BCH code, according to an embodiment of the disclosure.



FIG. 2 illustrates how information data can be encoded using a BCH code to obtain a codeword c{dot over (w)}, according to an embodiment of the disclosure.



FIG. 3 illustrates how N bits of information to code can be distributed among nr blocks, according to an embodiment of the disclosure.



FIG. 4 illustrates syndromes, according to an embodiment of the disclosure.



FIG. 5 illustrates how an encoder computes and stores codewords, according to an embodiment of the disclosure.



FIG. 6 illustrates decodings that failed, according to an embodiment of the disclosure.



FIG. 7 illustrates the computing of syndromes for successfully decoded codewords, according to an embodiment of the disclosure.



FIG. 8 illustrates the computation of the syndrome for a successfully decoded codeword, according to an embodiment of the disclosure.



FIG. 9 illustrates how a codeword can be found from the syndrome, according to an embodiment of the disclosure.



FIG. 10 illustrates the partitioning of bits of information into non-equal blocks, according to an embodiment of the disclosure.



FIG. 11 illustrates the pre-computation of the first blocks of matrices Tj with code Cl, according to an embodiment of the disclosure.



FIG. 12 illustrates the computation of syndromes for j=2, . . . , L, according to an embodiment of the disclosure.



FIG. 13 illustrates the resulting RS2 codeword, according to an embodiment of the disclosure.



FIG. 14 illustrates the transformation of information blocks of size {tilde over (k)}j into blocks of size kj using zero padding, according to an embodiment of the disclosure.



FIG. 15 illustrates the computation of codeword xi using code Ci, according to an embodiment of the disclosure.



FIG. 16 illustrates the updating of the codeword x according to an embodiment of the disclosure.



FIG. 17 is a flowchart of an encoding method according to an embodiment of the disclosure.



FIG. 18 is a flowchart of a decoding method according to an embodiment of the disclosure.



FIG. 19 is a block diagram of a machine for encoding and decoding BCH codes tailored for a RAID, according to an embodiment of the disclosure.





DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS

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 FIG. 3. In FIG. 3, x11-x14 are codewords of length n of a weak BCH code C1 and x21-x23 are codewords of length n of strong code C2. For code C1(n, kl, dl) and C2(n, k2, d2), k1>k2 and d1<=d2. In these codes, n is the length of the code, ki is the dimension of the code, and di is the minimal distance. The parity checks matrices of C1 and C2 are H1 and H2, respectively. The parity check matrix H2 of the stronger code can be written as a concatenation of H1 and another matrix HΔ:







H
2

=


(




H
1






H
Δ




)

.





According to embodiments, continuing with the example of FIG. 3, since x11-x14 are codewords of C1, an encoder can compute their syndromes based on Ha. As shown in FIG. 4, the syndromes are given by

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 FIG. 3, use RS (n=7, k=4, d=4). The RS redundancy symbols are denoted in the figure by RS1, RS2, RS3. The symbols of the RS code are not explicitly stored by the encoder. Instead, the encoder finds a codeword wi of the code C1, that has RSi, i=1, 2, 3 as its syndrome according to HΔ:

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 FIG. 5:

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 FIG. 6, after first decoding all codewords with code C1, assume that the decoding of x21, z1, z3, fail. These are crossed out in the figure. For the successfully decoded codewords x11, x31 and x41, the syndrome Si=HΔxi1, i=1, 3, 4 can be computed, as shown in FIG. 7. For the successfully decoded z2, the syndrome HΔw2=RS2 can be computed, as shown in FIG. 8. From the syndrome HΔw2=RS2, w2 can be found and subtracted from z2 to get x22, as shown in FIG. 9. The RS code can be used to obtain all the missing syndromes. Decoding x12 can be attempted using syndrome decoding with code C2. w1 and w3 can be found from RS1 and RS3, respectively: wi can be subtracted from zi+ei2, i=1, 3, and xi2x2i can be decoded using a decoder for C2.


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;







t
j

=





d
j

-
1

2








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








H
j

=

(




H
1






Δ
21






Δ
32











Δ

j
,

j
-
1






)


,





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 2Lj. Lj≥nr, because the length of the RS code is nr, since for an RS of length N, the field size has to be at least N. According to embodiments, a minimal possible field size can be chosen, that is Ljj. According to embodiments, Ljj when n, is too large for field size 2δj. For example, suppose nr=34 and δj=5. There cannot be Lj=5, because the maximal length of RS code for field size 32 is 32, which is less than 34. Note that when δj is large, several RS codes may be implemented for the same layer j for practical reasons to reduce field size. RSj is a (possibly shortened) RS code for layer j with dimension kjRS and length nr. A minimum distance of code RSj is djRS. Because RS is a maximum distance separable (MDS) code, djRS=nr−kjRS+1. According to embodiments, it is assumed that k2RS≤ . . . ≤kLRS. Note that although different RS codes may be defined over different fields, they have the same length nr.


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









Δ
~



j
-
1

,
j


=

(




Δ


j
-
1

,
j







ext
j




)


,





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








H
~

j

=


(




H
1







Δ
~

21







Δ
~

32












Δ
~



j
-
1

,
j





)

.






The condition is that the matrix below is full rank








H
~

L

=


(




H
L






ext
2






ext
3











ext
L




)

.






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








k
~

j

=


k
j

-




r
=
2

j




(


L
r

-

δ
r


)

.








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:






x
=


(




x
1






x
2











x

n
r





)

.






The blocks of length n are denoted by x1, x2, . . . , xnr. The blocks satisfy the following conditions: (1) All blocks are codewords of C1: x1, x2, . . . , xnr∈Cl; and (2) For each layer j, the set of the syndromes of the blocks is a codeword of the RSj code: j=2, . . . , L:({tilde over (Δ)}Sj(xi), . . . , {tilde over (Δ)}Sj(xnr))∈RSj.


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:






e
=


(




e
1






e
2











e

n
r





)

.






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:







s
~

=

(



0




s



)






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:








(

A
|
I

)



(



a




b



)


=



(


Q
j

|

T
j


)



s
~


=


T
j



s
.








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−








k
~

j

=

n
-

k
j

+




r
=
2

j



(


L
r

-

δ
r


)








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








n
-


k
~

j


=

n
-

k
j

+




r
=
2

j




(


L
r

-

δ
r


)






bits




,





to generate c+{tilde over (c)} from {tilde over (c)}, at most the last







n
-


k
~

j


=

n
-

k
j

+




r
=
2

j



(


L
r

-

δ
r


)








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:









H
~

L

=

(




H
L






ext
2






ext
3











ext
L




)


,





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:

    • (1) Take the information vector of code {tilde over (C)}j and length {tilde over (k)}j and append zeros in the coordinates specified by the unit vectors; and
    • (2) Encode the resulting vector of length kj with the encoder for Cj.


Recall that a codeword c for a predetermined syndrome may be nonzero only on the last







n
-


k
~

j


=

n
-

k
j

+




r
=
2

j



(


L
r

-

δ
r


)








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







{



k
j

-




r
=
2

j



(


L
r

-

δ
r


)


+
1

,





,

k
j


}

,





then the information coordinates







{

1
,





,


k
~

j


}

=

{

1
,





,


k
j

-




r
=
2

j



(


L
r

-

δ
r


)




}






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 FIG. 10. Referring to the figure, there are kj+1RS−kjRS blocks of {tilde over (k)}j bits each. The encoder also pre-computes the matrices Tj, j=2, . . . , L of dimension (n−{tilde over (k)}j)×(k1−{tilde over (k)}j). An encoding algorithm according to an embodiment of the disclosure is illustrated in FIG. 17. Referring to the figure, an encoding algorithm beings by receiving Receive a codeword {tilde over (C)}j of kM information bits, at step 171. At step 172, for the first K2RS blocks, encode xi=ENC1(ui) with code C1, as illustrated in FIG. 11. Then, for j=2, . . . , L compute the syndromes Sij={tilde over (Δ)}Sj(xi), as illustrated in FIG. 12. The vector of the syndromes






(


S
12

,





,

S


k
2
RS

,
2



)





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 2L2). The resulting RS2 codeword is given by







(


S
12

,





,

S


k
2
RS

,
2


,

S



k
2
RS

+
1

,
2


,





,

S


n
r

,
2



)

,





as illustrated in FIG. 13. Next, at step 173, for j=2, . . . , L, for i∈{kjRS+1, . . . , kj+1RS}, the information blocks of size {tilde over (k)}j are transformed into blocks ui+ of size kj using zero padding and as shown in FIG. 14. Then, at step 174, xi=ENCi(ui+) is computed using code Ci, as illustrated in FIG. 15. A vector b of length n−{tilde over (k)}j is calculated at step 175:







b
=


T
j



(




S

i





2













S

i





j










)



,





and the codeword xi is updated at step 176 according to:









x
i



x
i


=


(



0









0




b



)

=


(




x
1











x


k
~

j







x



k
~

j

+
1












x
n




)

+

(



0









0





b
1












b

n
-


k
~

f











)




,





as illustrated in FIG. 16. For j′=j+1, . . . , L the syndromes can be computed from Sij′={tilde over (Δ)}Sj′(xi). If j<=L−1, a systematic encoder RSj+1 according to an embodiment can be used to encode the information vector of the syndromes






(


S

1
,

j
+
1



,





,

S


k

j
+
1

RS

,

j
+
1




)





into a resulting RSj+1 codeword at step 177 given by:







(


S

1
,

j
+
1



,





,

S


k

j
+
1

RS

,

j
+
1



,

S



k

j
+
1

RS

+
1

,

j
+
1



,





,

S


n
r

,

j
+
1




)

.





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.



FIG. 18 is a flow chart of a decoding algorithm according to an embodiment of the disclosure. A decoding algorithm according to an embodiment begins at step 180 by receiving the binary matrix with nr rows and nc columns, and continues at step 181 by calculating the syndromes Si1=H1yi for all rows i=1, . . . , nr and set the output error patterns êi=Dec1(Si1). If the number of decoder failures is larger than dRS2, then the output of the decoder is failure. The outputs of the decoders of stage 1 are partitioned at step 182 into two sets: failures and non-failures:

IF={i|êi=failure},
IN={i|êi≠failure}.

For all rows with non-failures, the decoded codeword {circumflex over (x)}i=yii 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 ΔS2i)=ΔS2(yi)+ΔS2({circumflex over (x)}i) is calculated, after which there is Si2=H2êi for all rows.


Referring again to FIG. 18, a decoding algorithm continues, for stages j=2, . . . , L, at step 184 by, for each row i, calculating the estimated error with the new syndrome êi=Decj(Sij). If, at step 185, the number of decoder failures is larger than dRSj+1, the output of the decoder is declared to be failure (in the last stage no failures are allowed), and sets IN and IF are updated. At step 186, for all rows with non-failures, the decoded codeword is {circumflex over (x)}i=yii, and if j<L, the syndrome {tilde over (Δ)}Sj+1({circumflex over (x)}i) is calculated, otherwise if j=L, the estimated error is added to the received row to get an estimated 2i and the estimated information u is output. If, at step 187, there are still rows with failures, output failure.


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,







H
=

(



1


α






α

n
-
1






1



α
3







α

3


(

n
-
1

)







1













1



α


2

t

-
1








α


(


2

t

-
1

)



(

n
-
1

)






)


,





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αi(x), which is the minimal polynomial of αi over the binary field. The dimension of the code is n−deg (Pαi), and the rank of Hi is rank(Hl)=deg (Pαi).


According to an embodiment, consider the parity check matrix H:






H
=

(



1



α

i
1









α

i
1



n
-
1






1



α

i
2








α


i
2



(

n
-
1

)







1













1



α

i
p








α


i
p



(

n
-
1

)






)






where I={i1, i2 . . . ip}⊆{1, 2, . . . , 2t−1}. The generator polynomial is gl(x)=LCM(Pαi(x)|i∈I), and the code dimension is n−deg (gl(x)). If αi and αj have the same generator polynomial (i.e., are conjugate), then the rows of Hi, when regarded as binary matrix, and Hj span the same space. If there is a set of elements I such that each element has a different minimal polynomial, then











i

I




deg


(

P

α
i


)



=




i

I




rank


(

H
i

)













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αi) rows, if the degree of the minimal polynomial is smaller than m, which may occur only if m is not prime. According to an embodiment, to find the syndrome Hx for some binary vector x of length n, given the shortest syndrome H′x, one of the following methods can be used:


(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:






H
=


(



1


α






α

n
-
1






1



α
3







α

3


(

n
-
1

)







1













1



α


2

t

-
1








α


(


2

t

-
1

)



(

n
-
1

)






)

.






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:








e
j

=


(



0









1









0



)



index





j



,





which corresponds to αj. Similarly, consider the zero vector of F as an m dimensional zero vector







0
F

=


(



0









0









0



)



index






m
.








Take t″, where t′<t″≤t, and 1≤j≤m, and define a unit vector in Ft:








ω



t







,


j

=


(




0
F











e
j











0
F




)



index







t


.








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″jt″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 FIG. 20.


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″,js)=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(xGt″(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″,jt′≤t″≤t,1≤j≤mat″,jHut″,j=HΣt′≤t″≤t,1≤j≤mat″,jut″,j.

For t′<t″≤t, define







v

t



=




1

j

m





a


t


,
j




u


t


,
j









and





v
=




1

j

m




v

t









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








V

t





(
x
)


=





1

j

m





a


t


,
j





U


t


,
j




(
x
)




=





1

j

m





a


t


,
j






h


t


,
j




(
x
)


·


G

t





(
x
)





=




G

t





(
x
)







1

j

m





a


t


,
j





h


t


,
j




(
x
)





=




G
Z



(
x
)





G

t


N



(
x
)







1

j

m





a


t


,
j





h


t


,
j




(
x
)





=



G
Z



(
x
)





W

t





(
x
)

















where













W

t





(
x
)


=



G

t


N



(
x
)







1

j

m





a


t


,
j






h


t


,
j




(
x
)


.










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(xt″(x)

It follows that S={Wt″(x)}t′<t″≤t can be computed with m2·(t−t′)2 XOR operations.


In addition







V


(
x
)


=






t


<

t



t





V

t





(
X
)



=






t


<

t



t






G
Z



(
x
)





W

t





(
x
)




=



G
Z



(
x
)








t


<

t



t





W

t





(
x
)











of degree m·t. After computing S, compute







W


(
x
)


=





t


<

t



t





W

t





(
x
)








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]







f


(
x
)


=




i
=
0

M




a
i



x
i










g


(
x
)


=




i
=
0

N




b
i



x
i








are stored in memory, their product requires M×N XORs. Consider a third polynomial







h


(
x
)


=




i
=
0

N




x
i

.







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.



FIG. 19 is a block diagram of a of a machine for encoding and decoding BCH codes tailored for a RAID, according to an embodiment of the disclosure. Referring now to FIG. 19, a computer system 191 for implementing the present invention can comprise, inter alia, a central processing unit (CPU) 192, a memory 193 and an input/output (I/O) interface 194. The computer system 191 is generally coupled through the I/O interface 194 to a display 195 and various input devices 196 such as a mouse and a keyboard. The support circuits can include circuits such as cache, power supplies, clock circuits, and a communication bus. The memory 193 can include random access memory (RAM), read only memory (ROM), disk drive, tape drive, etc., or a combinations thereof. The present disclosure can be implemented as a routine 197 that is stored in memory 193 and executed by the CPU 192 to process the signal from the signal source 198. As such, the computer system 191 is a general purpose computer system that becomes a specific purpose computer system when executing the routine 197 of the present invention. Alternatively, as described above, embodiments of the present disclosure can be implemented as an ASIC or FPGA 197 that is in signal communication with the CPU 192 to process the signal from the signal source 198.


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.

Claims
  • 1. A computer implemented method of encoding generalized concatenated error-correcting codes, comprising the steps of: 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
  • 2. The method of claim 1, further comprising, 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(Hi)=deg(Pαi) rows if the degree of the minimal polynomial is less than m, wherein Pαi(x) is the minimal polynomial of αi over the binary field and a generator polynomial of {tilde over (H)}j is gl(x)=LCM(Pαi(x)|i∈l).
  • 3. A computer implemented method of encoding generalized concatenated error-correcting codes, comprising the steps of: providing a parity matrix {tilde over (H)}j of a j-th layer code and predefined syndrome {tilde over (s)}, wherein syndrome {tilde over (s)} is a vector
  • 4. A computer processor configured to execute a program of instructions to perform the method steps for encoding generalized concatenated error-correcting codes, the method comprising the steps of: 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
  • 5. The computer processor of claim 4, the method further comprising, 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(Hi)=deg(Pαi) rows if the degree of the minimal polynomial is less than m, wherein Pαi(x) is the minimal polynomial of αi over the binary field and a generator polynomial of {tilde over (H)}j is g1(x)=LCM(Pαi(x)|t∈I).
  • 6. The computer processor of claim 4, wherein the computer processor is one or more of an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), or firmware.
US Referenced Citations (11)
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
Non-Patent Literature Citations (3)
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.
Related Publications (1)
Number Date Country
20190114228 A1 Apr 2019 US