1. Field of the Invention
The present invention generally relates to coding in information and data processing systems and, more particularly, to a method for correcting a bust of errors plus random errors in data. Such errors may, for example, originate from reading data from a disk drive storing the data.
2. Background Description
Many methods are known for correcting random errors in codes with check symbols. Reed-Solomon codes are designed to correct random errors. If the code has t syndromes then the minimum distance between two code words is t+1 so at most t/2 random errors can be corrected. If some of the errors are erasure errors (i.e., their location is known) then f erasure errors and e random errors can be corrected as long as 2e+f does not exceed t. Methods for correcting those errors are known, and are not a part of this invention.
In many cases it is known that errors may occur in bursts as well as at random locations. For some applications, such as in correcting errors while reading magnetic disks, it is known (or suspected) that a burst of b errors (some of which may have the value 0, i.e., no error occurred at those locations) have occurred (a burst of b errors is b errors whose locations are contiguous) in addition to e random errors. In this case 2e+b+1 cannot exceed t. The usual method for correcting a burst of b errors in addition to e random errors is to start with l=0 (l being the location of the start of the burst) and treat the locations l, l+1, . . . , as the location of b erasure errors, and employ one of the known methods for correcting b erasure errors (whose locations are l, l+1, . . . , l+b−1) and e random errors. The value of l is then changed to l+1, and the process repeated. It should be emphasized that there may be multiple solutions to a burst of b errors and e random errors, and some other criterion has to be used to resolve this ambiguity when it arises. The drawback of this method is that as many values of l as the length of the code must be checked (more precisely, the length of the code minus (b−1)). Typically, the value of l ranges from 170 to 500-600.
It is therefore an object of the present invention to provide an efficient method for finding all the possible corrections of a burst of length b and e random errors when b+e is greater than t/2.
According to the invention, the method consists of finding a polynomial whose roots are the candidate location for 1—the location of the beginning of the burst—thus avoiding the search over all possible values of 1 (it is assumed that the burst is non-trivial, i.e., at least one of its errors has a non-zero value). Since the method is most effective for a small e, the invention will be first described for the method in general, followed by a description of the method for e=0, 1, or 2. Also, in order to reduce the number of multiple solutions, it is assumed that t=2e+b+s, where s is at least 2. The larger the value of s, the less likely it is that the algorithm will generate multiple solutions.
Once the location of the burst is known, standard procedures are used to determine the magnitudes of the burst errors and the location and magnitude of the random errors. A method, similar to the disclosed method, for a pure burst (i.e., e=0) appeared in the paper “A burst-error-correcting Algorithm for Reed-Solomon Codes” by J. Chen and P. Owsley in IEEE Transactions on Information Theory, Vol. 38, No. 6, November 1992, pp. 1807-1812. This method also finds a polynomial whose roots indicate the location of the burst; however, the details of finding the polynomial of Chen and Owsley are different from the one disclosed here. Some of the differences between our method and the one of Chen and Owsley will be pointed out when we describe out method for e=0.
The foregoing and other objects, aspects and advantages will be better understood from the following detailed description of a preferred embodiment of the invention with reference to the drawings, in which:
Referring now to the drawings, and more particularly to
The digital output signal is input to an error correction circuit 14 which implements the method of correcting a burst of errors plus random errors according to the present invention. The output of the error correction circuit 14 is the corrected digital signal.
For a “received” code word (r0, r1, . . . , r(n-1)) we denote the t=2e+b+s syndromes by σi, i=0, 1, . . . , t−1, where σi=σjrjaij. The syndromes are the inputs to the algorithms implemented by the invention.
The first step in the method is to compute the syndrome polynomials from the syndromes of the received word. This is illustrated in
The method according to the invention will now be described for the general case of k random errors (e=k). The process is shown in
G(x)=R(x)/ged (R(x), R(ax)).
(Alternatively, G(x)=R(x)/ged (R(x), R(a−1x)) may be computed.) This is useful when the size of the actual burst was smaller than b—in which case several roots of R(x) identify the same burst—and has the effect of removing this redundancy.
If L=a−1 is a root of G(x), then the roots ΣjΔj(L)yj, where j ranges from 0 to k, indicate the locations of the k random errors. Thus, ΣjΔjyj has to have k roots, non of which is 0; that is, Δ0(L) and Δk(L) must not vanish. That is accomplished in function block 305, where we compute:
G′(x)=G(x)/ged (G(x), Δ0(x)), and
G″(x)=G′(x)/ged (G′(x), Δk(x)).
Of course, we are interested only in the roots of G″(x) which lie in the field, and remove all the roots which lie in a larger field. This is done in function block 306 where F(x)=ged(G″(x), x2′″−1+1) is computed. The roots of F(x) are then found in function block 307, and the method then enters the processing loop at decision block 308 where a determination is made as to whether all the roots of F(x) were considered. If so, the process exists; otherwise, in function block 309 (explained in greater detail in
For the case of no random errors (e=0), the general method simplifies as is illustrated in
c=Vb−1×L×σ,
where Vb−1 is as computed in block 23 (
For the case of one random error (e=1), the method is shown in
G(x)=R(x)/ged®(x),R(ax)),
and in function block 505, the following are computed:
G′(x)=G(x)/ged(G(x),S0(x)), and
G″(x)=G′(x)/ged(G′(x), S1(x)).
(Alternatively, G(x)=R(x)/ged (R(x), R(a−1x)) may be computed.) In function block 505, we remove all roots which are also roots of S0(x) or S1(x), thus ensuring that we will not have to consider those roots, L, of F(x) for which S1(L)/S0)L) is either zero or not defined. In function block 506, we compute F(x)=ged (G″(x), x2m−1+1). As in the general case, we find all the roots of F(x) in function block 507 before entering the processing loop 506 which, for each root of F(x) finds the location and magnitude of the random error as well as the magnitude of the burst corrections. In the processing loop 509, described in more detail in
For the case of two random errors (e=2), the method is known in
G′(x)=G(x)/ged(G(x), Δ0(x)),
G″(x)=G′(x)/ged(G′(x), Δ1(x)), and
G′″(x)=G″(x)/ged(G″(x), Δ2(x)).
The reason for computing G″(x)=G′(x)/ged(G′(x), Δ1(x)) is that the two roots of the polynomial Δ0(L)+Δ1(L)−y+(Δ2(L)y2 give the locations of the two random errors, and therefore these two roots have to be distinct; i.e., Δ1(L) has to be different from zero. Function block 606 and function block 607, decision block 608, and function blocks 609 and 610, as well as blocks 611, 612, 613, 614, 615 and 616 of
An important part of the invention is that we use more syndromes than absolutely necessary. The number of syndromes is t=b+2e=s where s is at least two. The larger s, the more likely are we to obtain only one (or no) correction.
In applications such as correcting the errors in reading data off the disk, we do not know the number of random errors a-priori. One way of applying the algorithm to first use if for e=0, then for e=1, etc., until e=E (the maximum number of random errors which we can correct, i.e., t=2E+b+s). The advantage of this algorithm is that we can use the determinants computed for e−k to compute the determinants for e−k+1. Also, when e is less than E, we get a larger protection against spurious errors, since t=2e+b+(s+2(E−e)). Another way of using this “excess” of syndromes when e is smaller than E is to search for corrections with bursts of length b+2(E−e). This enables us to obtain possible corrections which we would not have been able to discover otherwise.
Since the length of the burst will be variable, it would be useful, at times, to indicate the length of the burst. Thus, we will use P(b)(x) denote the polynomial whose roots are aj (j=0, 1, . . . , b−1), use V(b) and L(b) to indicate the dimension of these matrices, and similarly for σ and yi. The algorithm proceeds as follows. Use the algorithm described above for e=0 using P(b+2E)(x), V(b+2E), and L(b+2E). Denote the polynomial F(x) by F0(x). Having checked for corrections with e=0, . . . , k−1 random errors (and burst lengths b+2E, . . . , b+2(E−k+1)respectively) we use the algorithm for e=k (using P(b+2(E−k)(x)) up to the point where we computed ged (G″(x), Q(x)) where Q(x)=x2m−1+1 is the field polynomial. We denote this last polynomial by H0(x). We then compute Hi(x)=Hi−1(x)/ged(Hi−1(x), Fi−1(x)) for i=1, 2, . . . , k. We will denote Hk(x) by Fk(x). We then continue the previously described algorithm, replacing F(x) by Fk(x) (and, of course, σ(b+2(E−k)), yi(b+2(E−k)), V(b+2(E−k), and L(b+2(E−k))). This is done for k=1, 2, . . . , E.
While the invention has been described in terms of a single preferred embodiment, those skilled in the art will recognize that the invention can be practiced with modification within the spirit and scope of the appended claims.
| Number | Name | Date | Kind |
|---|---|---|---|
| 3701094 | Howell | Oct 1972 | A |
| 4916702 | Berlekamp | Apr 1990 | A |
| 5600662 | Zook | Feb 1997 | A |
| 5631909 | Weng et al. | May 1997 | A |
| 5771246 | Weng | Jun 1998 | A |
| 5781567 | Sako et al. | Jul 1998 | A |
| 5875199 | Luthi | Feb 1999 | A |
| 5917670 | Scaramuzzo et al. | Jun 1999 | A |
| 5926489 | Luthi et al. | Jul 1999 | A |
| 5942003 | Ivry | Aug 1999 | A |
| 6378100 | Van Dijk et al. | Apr 2002 | B1 |
| 6532565 | Roth et al. | Mar 2003 | B1 |
| 6604217 | Kahlman | Aug 2003 | B1 |
| Number | Date | Country | |
|---|---|---|---|
| 20040250196 A1 | Dec 2004 | US |