the principles and operation of joint cvd estimation and ecc according to the present invention may be better understood with reference to the drawings and the accompanying description . let us assume that we are using an error correction code c , such that each set of information bits is mapped into a valid codeword c εc . furthermore , assume that a set of valid codewords is stored in a set of m cells . this is done by mapping the codewords into a vector s =[ s 1 s 2 . . . s m ], such that s i εs and s ={ s 1 , s 2 , . . . , s l } and l is the number of levels that can be programmed to a flash memory cell ( i . e . in a one - bit - per - cell flash memory l = 2 , in a two - bit - per - cell flash memory l = 4 , in a four - bit - per - cell flash memory l = 16 ). then , s i is programmed to the i ′ th cell . furthermore , let us denote the read voltages of the set of m cells by the vector v =[ v 1 v 2 . . . v m ]. note that because cell reading is quantized in practical flash memory devices , v i can take only a finite set of k values { v 1 , v 2 , . . . , v k } where k is a function of the reading resolution and higher resolution corresponds to higher k . we define that a cell &# 39 ; s read voltage is v if the actual cell threshold voltage v th satisfies : lth ( v )≦ v th ≦ uth ( v ), where lth and uth are a functions that match lower and upper reading thresholds for each of the k possible reading voltages { v 1 , v 2 , . . . , v k }. this means that the cell &# 39 ; s transistor is open (‘ 1 ’) when threshold voltage uth ( v ) is loaded on the cell &# 39 ; s transistor control gate while the cell &# 39 ; s transistor is closed (‘ 0 ’) when lth ( v ) is loaded on the cell &# 39 ; s transistor control gate . denote the cvd of a cell as the probability density function ƒ ( v ) providing the probability of reading the cell at each possible voltage v . note that the cvd “ of a cell ” actually is the cvd of a population of cells to which the cell belong . the typical example of such a population is a population of cells whose threshold voltages are disturbed similarly by neighboring cells . usually , we have a statistical model for the cvd of the cell with parameters θ . for example we can model the cvd of a cell by a gaussian mixture model ( gmm ), such that the probability of a cell to be programmed to state s j ( jε { 1 , . . . , l }) is λ j and the voltage distribution of the cell given that it was programmed to state s j is normally distributed with expectation μ j and standard deviation σ j : preferably , a scrambling mechanism is used in order to randomize the stored bits prior to programming , as described in us patent application publications nos . 2008 / 0151618 and 2008 / 0215798 . in that case we can assume that all programmed states are equally probable , i . e . ∀ jε { 1 , . . . , l } λ j = 1 / l and the cvd parameters θ of the cell can be functions of the charge stored in the neighboring cells , which is manifested in the read voltages of the neighboring cells . so , in general the cvd of the i ′ th cell , is given by f ( v | θ i ) where are θ i are the cvd parameters of the i ′ th cell which are a function of the read voltages of the neighboring cells of the i ′ th cell . we estimate the cvd parameters θ =[ θ 1 θ 2 . . . θ m ] of each cell from the set of m read cells as a function of the vector of read voltages v =[ v 1 v 2 . . . v m ] and under the assumption that the underlying bit sequence stored in the m cells is composed of a set of valid codewords ( i . e . composed of bit sequences c εc ). based on these cvd parameters we can get optimal estimates for the stored bits through a process of fcc decoding . obtaining a closed form expression for the cvd parameters under the assumption that the stored bits belong to valid codewords is usually not feasible . therefore , we use an iterative method for jointly estimating the cvd parameters and the stored bits . the idea is to iterate between a block that computes the cvd parameters and a block that performs ecc decoding until convergence to a valid set of codewords is obtained . the incentive for this approach is that cvd parameters estimation is more accurate and less complex if we know the stored bits ( or programmed states ) and on the other hand ecc decoding of the stored bits is more likely to succeed and more likely to require less operations if accurate cvd parameters are available . by iteratively exchanging information between the cvd parameters estimation block and the ecc decoding block we increase the probability of overall success in recovering the stored bits and we can simplify each of the blocks and shorten the overall convergence time of the scheme to the correct solution . referring now to the drawings , fig1 is a schematic diagram of this iteration between cvd parameter computation and fcc decoding . 1 ) v =[ v 1 v 2 . . . v m ] is the vector of voltages read from the m cells . 2 ) { circumflex over ( θ )} =[ { circumflex over ( θ )} 1 { circumflex over ( θ )} . . . { circumflex over ( θ )} m ] is the estimate of θ ( the cvd parameters of each cell ). 3 ) l a =[ l a1 l a2 . . . l am ] is a vector of a - priori soft estimates of the states s =[ s 1 s 2 . . . s m ] programmed to the m cells . such soft estimates can be expressed in various ways . one common way is to provide the probabilities for each possible cell state s ={ s 1 , s 2 , . . . , s l } given that the cell &# 39 ; s read voltage is v , i . e . l ai =[ pr ( v i | s i = s 1 , { circumflex over ( θ )} i ) . . . pr ( v i | s i = s l , { circumflex over ( θ )} i )]. another common way is to use log - likelihood ratio &# 39 ; s ( llrs ). in this case l ai is given by : l _ ai = [ log ⁢ pr ⁢ ( v i ❘ s i = s 1 , θ ^ _ i ) pr ⁡ ( v i ❘ s i ≠ s 1 , θ _ ^ i ) ⁢ ⁢ … ⁢ ⁢ log ⁢ pr ⁢ ( v i ❘ s i = s l , θ _ ^ i ) pr ⁡ ( v i ❘ s i ≠ s l , θ _ ^ i ) ] ′ ( 3 ) without loss of generality we assume in the following that llr soft estimates are used . l d =[ l d1 l d2 . . . l dm ] is a vector of a - posteriori soft estimates ( after bcc decoding ) of the states s =[ s 1 s 2 . . . s m ] programmed to the m cells . assuming llr soft estimates , l di is given by : l _ di = [ log ⁢ pr ⁢ ( v _ , c _ ∈ c ❘ s i = s 1 , θ ^ _ ) pr ⁡ ( v _ , c _ ∈ c ❘ s i ≠ s 1 , θ _ ^ ) ⁢ ⁢ … ⁢ ⁢ log ⁢ pr ⁢ ( v _ , c _ ∈ c ❘ s i = s l , θ _ ^ ) pr ⁡ ( v _ , c _ ∈ c ❘ s i ≠ s l , θ _ ^ ) ] ′ ( 4 ⁢ a ) where c εc indicates that the bit sequences stored in the m cells correspond to valid codewords . 5 ) l e [ l e1 l e2 . . . l em ] is a vector of extrinsic soft estimates of the states s =[ s 1 s 2 . . . s m ] programmed to the m cells . an extrinsic estimate of a cell &# 39 ; s state is an estimate which is not based on the read cell voltage and its estimated cvd parameters . assuming llr soft estimates , l ei is given by l _ ei = [ log ⁢ pr ⁢ ( v _ [ i ] , c _ ∈ c ❘ s i = s 1 , θ _ ^ [ i ] ) pr ⁡ ( v _ [ i ] , c _ ∈ c ❘ s i ≠ s 1 , θ _ ^ [ i ] ) ⁢ ⁢ … ⁢ ⁢ log ⁢ pr ⁢ ( v _ [ i ] , c _ ∈ c ❘ s i = s l , θ _ ^ [ i ] ) pr ⁡ ( v _ [ i ] , c _ ∈ c ❘ s i ≠ s l , θ _ ^ [ i ] ) ] ′ ( 5 ) where v [ i ] is the vector v excluding v i and is the vector θ excluding θ i . using extrinsic soft estimates in iterative schemes is well known . using extrinsic soft estimates improves the performance of the scheme by preventing a situation of “ self conviction ”. in other words , we want to avoid a situation that the cvd parameters estimation block estimates the cvd parameters of the i ′ th cell θ i based on its own previous estimation . 6 ) is the ĉ 1 , ĉ 2 , . . . ecc decoder output , where ĉ j the estimate for the j ′ th codeword stored in the m cells . this block estimates the cvd parameters for each cell based on the read cell voltages and based on estimates of the cells &# 39 ; programmed states . in general , cvd parameters of a cell , given that it was programmed to state s and given that its neighbors read voltages are v n , can be computed by examining the statistics of all the cells that were programmed to state s whose neighbors &# 39 ; read voltages are v n . in simple cases the cell &# 39 ; s neighbors &# 39 ; read voltages do not affect the cvd of the cell — this is usually the case if cross coupling effects between a cell and its neighbors are mitigated by using a multi - step programming plan as taught e . g . in u . s . pat . no . 6 , 781 , 877 . in this case we need to estimate a single set of cvd parameters for all cells . in any case , one can see that computation of the cvd parameters can be simplified if an estimation of the programmed cells &# 39 ; states is available . according to one exemplary embodiment , hard decisions on the cells &# 39 ; states are used : for the i ′ th cell we estimate the programmed state ŝ i as the state which is most probable according to l ei , i . e . based on the programmed state estimates ŝ =[ ŝ 1 . . . ŝ m ], cvd parameters can be estimated more easily , because we can differentiate between the cell voltage distributions of different states . consider as an example the gmm model , described in ( 2 ). let θ i =[ μ i , 1 . . . μ i , l σ i , 1 . . . σ i , l ] denote the unknown cvd parameters of the i ′ th cell , where μ i , j and σ i , j are the expectation and standard deviation of the voltage distribution of j ′ th state of the i ′ th cell , respectively . furthermore , let v n ( i ) denote the read voltages of the neighbors of the i ′ th cell — for example the 3 physically closest neighboring cells which have the strongest cross coupling and / or the strongest program disturb with the i ′ th cell can be considered . in this case v n ( i ) =[ v n ( i ), 1 v n ( i ), 2 v n ( i ), 3 ]. finally , let m ( j )={ i ′| ŝ i ′ = s j }, ∀ jε { 1 , . . . , l } be the set of cells among the m cells for which we estimated the programmed state j and denote by | m ( j )| its cardinality ( i . e . ∑ j = 1 l ⁢  m ⁡ ( j )  = m ) . then we can estimate the cvd parameters of the i ′ th cell , using linear minimal mean square error ( lmmse ) estimation , as follows : in case cross coupling effects and program disturb effects between neighboring cells are mitigated during programming , the cvd parameters are the same for all cells and estimation is simplified as follows : note that other estimation algorithms can be applied in order to estimate the cvd parameters . for example , a more optimal map estimation can be used instead of the lmmse estimation . in this case , the state estimates ( derived from l e ) are used in order to divide the cells into subsets of cells characterized by having the same state and the same neighboring cell states . then the cvd parameters of each such cell population can be estimated very simply , for example by computing an empirical expectation value and variance of each population . in the examples above , the extrinsic estimates were used in order to produce “ hard ” decisions on the states . a more complex and accurate scheme can utilize the soft state estimates . for example , the cvvd parameters based on soft values of the l ei may be estimated based on only some of the cells , for example only on the more reliable cells . this results in simpler processing ( less information is processed ) and more accurate results . we can choose the cells that will be used for the cvd parameters estimation as the cells whose extrinsic state estimation is more reliable ( i . e . the cells for which max | l ei | is higher ). one optimal scheme uses the soft state estimation as part of the cvd parameters estimation ( without performing hard decisions ) based on bayesian estimation techniques ( s . m . kay , fundamentals of statistical signal processing : estimation theory , prentice - hall inc ., 1993 — chapters 10 - 12 ). baysean estimation techniques allow utilization of a - priori statistics of the estimated parameters ( in the present case , a - priori probabilities for the cell to be programmed to each state ). additional details on how to compute cvd parameters , given an estimate of the read cell voltages and the programmed cell states , can be found in u . s . ser . no . 11 / 941 , 945 and in u . s . ser . no . 11 / 860 , 553 . this block computes a - priori soft estimates of the programmed cells &# 39 ; states based on the read cell voltages and on the estimated cells &# 39 ; cvd parameters . for example in the gmm model described in ( 2 ), we can compute the soft state estimate pr ⁡ ( v i ❘ s i = s j , θ _ ^ i ) = ∫ lth ⁡ ( v i ) uth ⁡ ( v i ) ⁢ 1 2 ⁢ π ⁢ σ ^ i , j 2 ⁢ ⅇ - ( v ′ - μ ^ i , j ) 2 2 ⁢ σ ^ i , j 2 ⁢ ⅆ v ′ , ⁢ pr ⁡ ( v i ❘ s i ≠ s j , θ _ ^ i ) = 1 - pr ⁡ ( v i ❘ s i = s j , θ _ ^ i ) ( 9 ) the terms in ( 9 ) can then be substituted in ( 3 ) in order to compute the a - priori soft estimates l ai . this block computes the a - posteriori soft estimates l di based on the a - priori state estimates l ai and based on the assumption that the stored bits constitute valid codewords . in practice iterative ecc schemes can be used for this . in such a scheme an iterative decoder can approximately compute l d based on l a . such a code can operate directly on the cell states . however , due to complexity considerations it is more common to use a suboptimal decoder that operates on soft bit estimates ( as opposed to soft state estimates ). let b i , j denote the j ′ th bit stored in the i ′ th cell . then such a decoder can operate on a - priori soft bit llr estimates defined as l a i , j = log ⁢ pr ⁢ ( v i ❘ b i , j = 0 , θ _ ^ i ) pr ⁡ ( v i ❘ b i , j ≠ 1 , θ _ ^ i ) l d i , j = log ⁢ pr ⁢ ( v i ❘ b i , j = 0 , θ _ ^ i , c _ ∈ c ) pr ⁡ ( v i ❘ b i , j = 1 , θ _ ^ i , c _ ∈ c ) . the a - posteriori soft bit estimates can be translated into approximate a - posteriori state estimates by ignoring the statistical dependencies between these bit estimates ( originating from the fact that the bits belong to the same cell and were subjected to the same noises ). this can be done simply by estimating the state ŝ i of cell ‘ i ’ by taking the hard decisions of the extrinsic bit estimates , for the bits stored in the i ′ th cell , and mapping the hard decisions to a state based on the mapping used during programming . alternatively , approximate soft state estimates can be computed . for example , in the four - bits - per - cell case , the a - posteriori soft state estimate of the i ′ th cell can be approximated as follows : note that using an ecc decoder that operates on the bits stored in the cells instead of the states programmed to the cells is sub - optimal , because information regarding the statistical dependencies between bits stored in the same cell is lost . an optimal scheme would use a decoder that operates directly on the programmed states . such a decoder is described in y . nana , e . sharon and s . litsyn , “ improved decoding of ldpc codes for multilevel modulations ,” ieee communication letters , vol . 10 , pp . 375 - 377 , may , 2006 . an alternative exemplary scheme is shown in fig2 . according to this scheme , we first generate corrected estimates of the cells read voltages { circumflex over ( v )} by canceling the cross coupling effects and the pd effects of neighboring cells and then estimate each cell &# 39 ; s state based on cvd parameters which are fixed for all cells . the scheme shown in fig2 , includes the following three blocks that replace the cvd parameters estimation block and the soft states estimation block shown in fig1 : this block estimates fixed cvd parameters for all cells ( instead of different parameters for each cell as in fig1 ). hence , this block has lower complexity compared to the equivalent block in fig1 . for example , under the gmm cvd model described by ( 2 ) and assuming an lmmse cross coupling and program disturb canceller , the estimated parameters are : { circumflex over ( θ )} =[ { circumflex over ( θ )} 1 . . . { circumflex over ( θ )} l ], where { circumflex over ( θ )} j =[{ circumflex over ( μ )} j { tilde over ( σ )} j α j ] and { tilde over ( σ )} j ={ circumflex over ( σ )} j − α j · ĉ * j , n , α j = ĉ j , n · ĉ n − 1 and { circumflex over ( μ )} j ,{ circumflex over ( σ )} j , ĉ j , n , ĉ n are defined in ( 7 ) hence , the number of estimated parameters in this example is proportional to the number of states l instead of the number of cells m . this block computes a corrected value of the i ′ th cell &# 39 ; s voltage by cancelling the cross coupling effects and the pd effects of its neighboring cells . under the gmm cvd model described by ( 2 ) and assuming an lmmse cross coupling and program disturb canceller , this is performed as follows : based on the estimated state of the i ′ th cell ŝ i = s j the cross coupling and program disturb canceller block chooses the correct coefficients α j and performs the following computation : { circumflex over ( v )} i = v i − α j ·( v n ( i ) −{ circumflex over ( μ )}) ( 10 ) note that various variants of the cross coupling and program disturb canceller block can be implemented . in some cases cancelling the effect of neighboring cells on the target cell can be improved by knowing the programmed state of the neighboring cells and not only the read voltages of the neighboring cells . two examples of this are : a . mitigation of pd noises by identifying cells that are more prone to pd and adapting the computation of their corrected voltage { circumflex over ( v )} accordingly ( for example applying stronger correction to their read voltage ). pd noise of a cell is usually a function of the programmed states of its neighboring cells , where certain patterns result in higher probability for strong pd . hence , identifying cells which are more prone to pd requires knowing the programmed state of their neighboring cells . thus , to by utilizing the extrinsic estimates of the cells &# 39 ; states we can identify cells that are more prone to pd and improve the estimation of { circumflex over ( v )} . b . cancellation of cross coupling effects in all - bit - line ( abl )- type flash devices . in this type of device all bit lines in a word line are programmed simultaneously ( as opposed to conventional flash devices in which odd and even bit lines are programmed separately ). as a result the cross coupling effect of a cell on its neighboring cell in the same word line is less predictable based on its read voltage . the cross coupling effect is a function of the amount of change in the charge of the “ disturbing ” cell that occurred after the target cell was inhibited ( finished its programming ). hence in an abl device in which all the cells in a word line are programmed simultaneously we need to predict the amount of charge change of a neighboring cell after the target cell was inhibited in order to provide better cross coupling cancellation . such prediction can be improved if we know the programmed state of the neighbor and target cells . for example if we know that the neighbor cell was programmed to a lower state and the target cell was programmed to a higher state then the probability that the neighbor cell affected the target cell is low because most likely the neighbor cell was inhibited before the target cell . on the other hand , if we know that the neighbor cell was programmed to a higher state and the target cell was programmed to a lower state then the probability that the neighbor cell affected the target cell is high since most likely the neighbor cell was inhibited after the target cell . this knowledge can be employed in order to improve the cross coupling cancellation ( i . e . the estimation of { circumflex over ( v )} ), by taking into account also the relation between the programmed states of a target cell and its neighbors . in this case ( 10 ) looks like : v ^ i = v i - α _ j · [ ( v _ n ⁡ ( i ) - v i ) - μ ^ δ ⁢ ⁢ n ⁡ ( i ) j ] , μ ^ δ ⁢ ⁢ n ⁡ ( i ) j = e v _ n ⁡ ( i ) ≥ μ ^ j ⁢ { ( v _ n ⁡ ( i ) - u ^ j ) } ( 11 ) note that in ( 11 ) the term { circumflex over ( μ )} δn ( i ) j is a function of the state s 1 that cell i was programmed to , meaning that { circumflex over ( μ )} δn ( i ) j is the average charge ( voltage ) that neighboring cells , in the same word - line , accumulate after the target cell i ( for which voltage v i was read from ) was inhibited . as j increases so the cross coupling effect decreases . when j = l , i . e . the highest state , is considered as the target cell , no other states are likely to be programmed after it , and hence cells in s l suffer the least from the cross coupling effect from neighboring cells in the same word line . the target cells can still suffer from neighboring cells in adjacent word - lines that are entirely programmed after the word line which cell i belongs to has finalized it &# 39 ; s programming sequence . more details on digital cross coupling cancellation can be found in u . s . ser . no . 11 / 860 , 553 . this block is similar to the corresponding block in fig1 , except that cvd parameters are fixed for all cells while the corrected cell &# 39 ; s voltages { circumflex over ( v )} are employed for the computation of the a - priori soft states estimation . hence , in the gmm model described in ( 2 ), we can compute the a - priori soft state estimate for each cell as follows : pr ⁡ ( v ^ i ❘ s i = s j , θ _ ^ ) = ∫ lth ⁡ ( v ^ i ) uth ⁡ ( v ^ i ) ⁢ 1 2 ⁢ π ⁢ σ ~ j 2 ⁢ ⅇ - ( v ′ - μ ^ j ) 2 2 ⁢ σ ~ j 2 ⁢ ⅆ v ′ , ⁢ pr ⁡ ( v ^ i ❘ s i ≠ s j , θ _ ^ ) = 1 - pr ⁡ ( v ^ i ❘ s i = s j , θ ^ _ ) ( 12 ) the terms in ( 12 ) can then be substituted in ( 3 ) in order to compute the a - priori soft state estimates l ai . the iterative schemes described above can also be described in the context of factor graphs and message passing decoding ( kschischang , f . r . ; frey , b . j . ; loeliger , h . a ., factor graphs and the sum - product algorithm , ieee transactions on information theory , vol . 47 , pp . 498 - 519 , february 2001 ). this is an equivalent description that is commonly used for iterative schemes . in this setting , the various unknown parameters which require estimation ( such as cvd parameters , programmed cell states and stored bits ) and the various constraints on the parameters ( such as the constraints posed by the physics of the cell and the constraints posed by the ecc code ) appear as nodes in a factor graph while edges are connected between parameters and their constraints . an iterative message passing algorithm is used in order to find the unknown parameters by exchanging information between the parameters and their constraints along the graph edges . these messages carry estimates of the parameters that are updated iteratively . the algorithm is iterated until convergence of the parameters to values that satisfy all constraints , or until some maximal number of iterations is reached . fig3 shows a factor graph that is equivalent to the scheme illustrated in fig1 . fig4 is a high - level schematic block diagram of a flash memory device . a large number of individually addressable memory cells are arranged in a regular array 11 of rows and columns . individual memory cells can be controlled by bit lines , select gates arranged in word lines , and steering gates . bit lines are designated herein to extend along columns of array 11 , and word lines are designated to extend along the rows of array 11 . bit line unit 13 may include a bit line decoder , storage elements , driver circuits and sense amplifiers . bit line unit 13 can be coupled to cell array 11 by line 15 , and to controller 27 by bit - control line 29 and by read line 41 . word line unit 19 may include a select gate decoder and driver circuits . word line unit 19 can be coupled to cell array 11 by line 17 , and to controller 27 by word - control line 31 . steering line unit 43 may include a steering gate decoder and driver circuits . steering unit 43 can be coupled to cell array 11 by line 23 , to controller 27 by steering - control line 33 , and to bit line unit 13 by line 44 . bit line unit 13 , word line unit 19 and steering unit 43 can be coupled to bus 25 , which in turn is coupled to controller 27 . controller 27 can be coupled to the host by line 35 . when a preselected memory cell is to be programmed , voltages can be applied to the bit lines , word line and steering gates , corresponding to the preselected memory cell , at predetermined levels sufficient for the programming of the preselected cell . controller 27 sends the address of the preselected memory cell through bus 25 to the respective decoders in bit line unit 13 , word line unit 19 , and steering gate unit 43 through lines 26 a , 26 b , and 26 c , respectively . status and control commands between bit line unit 13 , word line unit 19 , steering gate unit 43 and controller 27 are communicated through bit - control line 29 , word - control line 31 and steering control line 33 . when a preselected memory cell is to be read , voltages can be applied to the corresponding bit lines , word line and steering gates , corresponding to the preselected memory cell , at predetermined levels , sufficient to enable the reading of the preselected memory cell . controller 27 is capable of applying the voltages of the bit lines through bit - control line 29 , applying the voltages of the word lines through word - control line 31 and applying the voltages of steering gates through steering control line 33 . a current can be generated through the preselected memory cell by these voltages . the current is indicative of whether the preselected memory cell was programmed or not ( in the case of the cells of array 11 having been programmed one bit per cell ) or of the bit pattern that has been stored in the preselected memory cell ( in the case of the cells of array 11 having been programmed with more than one bit per cell ). the value of the current can be amplified and compared against references by sense amplifiers in bit line unit 13 , the result of which can be temporarily stored in latches or registers . the resultant data , read out from the preselected memory cell , can be sent to controller 27 through read line 41 . in reading the cells of array 11 , controller 27 performs joint cvd estimation and error correction as described above . the functional blocks of controller 27 that perform the joint cvd estimation and error correction , as illustrated in fig1 or alternatively as illustrated in fig2 , may be implemented in hardware , in firmware , in software , or as a combination of hardware and / or firmware and / or software . fig5 shows one embodiment of controller 27 . this embodiment of controller 27 includes five functional blocks : a measurement functional block 1 , an assignment functional block 2 , an a - priori metric functional block 3 , a decoder 4 and a cvd model estimation block 5 . measurement functional block 1 applies the relevant voltages through bit - control line 29 , word - control line 31 and steering control line 33 to obtain , via read line 41 , threshold voltage values of the cells of array 11 . assignment functional block 2 assigns each cell to its cvd model population . a - priori metric functional block 3 corresponds to the soft states estimation block of fig1 . decoder 4 corresponds to the ecc decoding block of fig1 . cvd model estimation block 5 corresponds to the cvd parameters estimation block of fig1 . in an alternative embodiment , all the cells are deemed to belong to the same cvd model population , and assignment functional block 2 either is inactivated or is absent . fig6 shows another embodiment of controller 27 . this embodiment of controller 27 includes three functional blocks : a measurement functional block 6 , an assignment functional block 7 , and a constrained cvd model estimation block 8 . measurement functional block 6 applies the relevant voltages through bit - control line 29 , word - control line 31 and steering control line 33 to obtain , via read line 41 , threshold voltage values of the cells of array 11 . these threshold voltages are indicative of the bit patterns stored in the cells . assignment functional block 7 assigns each cell to its cvd model population . constrained cvd model estimation block 8 , that corresponds to the functional blocks illustrated in fig1 , estimates the cvd models under the constraint that the bit patterns collectively must be a valid error correction codeword . in an alternative embodiment , all the cells are deemed to belong to the same cvd model population , and assignment functional block 7 either is inactivated or is absent . fig7 is a high - level block diagram of a system 50 of the present invention . system 50 includes a processor 52 and four memory devices : a ram 54 , a boot rom 56 , a mass storage device ( hard disk ) 58 and a flash memory device of fig4 as a flash memory device 62 , all communicating via a common bus 64 . in system 50 , controller 27 of flash memory device 62 functions only as an interface to bus 64 ; the rest of the functionality of flash controller 27 of fig2 b as described above is emulated by flash memory driver code 60 that is stored in mass storage device 58 and that is executed by processor 52 to interface between user applications executed by processor 52 and flash memory device 62 , and to manage the flash memory of flash memory device 62 . in addition to the conventional functionality of such flash management driver code , driver code 60 emulates the functionality of controller 27 of fig4 with respect to joint cvd estimation and error correction as described above . driver code 60 typically is included in operating system code for system 50 but also could be freestanding code . the components of system 50 other than flash memory device 62 constitute a host 70 of flash memory device 62 . mass storage device 58 is an example of a computer - readable storage medium bearing computer - readable driver code for joint cvd estimation and error correction . other examples of such computer - readable to storage media include read - only memories such as cds bearing such code . a limited number of embodiments of methods for joint cvd estimation and error correction , and of a device and system that use the methods , have been described . it will be appreciated that many variations , modifications and other applications of the methods , device and system may be made .