  A primary source of increased read time on NAND flash comes from the fact
that in the presence of noise, the flash medium must be read several times
using different read threshold voltages for the decoder to succeed. This paper
proposes an algorithm that uses a limited number of re-reads to characterize
the noise distribution and recover the stored information. Both hard and soft
decoding are considered. For hard decoding, the paper attempts to find a read
threshold minimizing bit-error-rate (BER) and derives an expression for the
resulting codeword-error-rate. For soft decoding, it shows that minimizing BER
and minimizing codeword-error-rate are competing objectives in the presence of
a limited number of allowed re-reads, and proposes a trade-off between the two.
  The proposed method does not require any prior knowledge about the noise
distribution, but can take advantage of such information when it is available.
Each read threshold is chosen based on the results of previous reads, following
an optimal policy derived through a dynamic programming backward recursion. The
method and results are studied from the perspective of an SLC Flash memory with
Gaussian noise for each level but the paper explains how the method could be
extended to other scenarios.
