A system for enhancing the error correction capability of an error
correction code ("ECC") during error recovery operations accumulates, for
respective bits, counts of the number of times the bits are detected as
1s in multiple re-reads of a data signal. The system then determines,
based on the associated count, if a reconstructed bit should be
considered a 1 or 0, or neither, that is, if the reconstructed bit should
be considered erroneous, by comparing the count to a majority detection
threshold and then to either an upper or a lower predetermined threshold
that corresponds to the confidence with which the bit is reconstructed as
a either a 1 or a 0. If the confidence is sufficiently low, that is, if
the count falls below the upper threshold or above the lower threshold,
the reconstructed bit is flagged as erroneous. After all of the bits are
reconstructed, the system groups the bits into symbols to reproduce the
ECC codeword, and sets erasure pointers that identify the locations of a
predetermined number, s, of the symbols that are associated with the
highest degree of uncertainty, that is, the largest numbers of flagged
bits or, as appropriate, the largest numbers of flagged bits with the
lowest confidence levels. The error correction operation then decodes the
symbols in the identified locations as erasures. The system, using an (n,
k) distance d Reed-Solomon ECC uses 2t=n-k redundancy symbols to correct
the s erasures and up to.times. ##EQU00001## errors.