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.