Content deleted Content added
Citation bot (talk | contribs) m Alter: isbn. Add: doi, citeseerx. | You can use this bot yourself. Report bugs here. | User-activated. |
→Description of algorithm: Improve formatting. I still don't understand the explanation, but at least it uses minus signs and italic variable names consistently |
||
Line 42:
==Description of algorithm==
The Berlekamp–Massey algorithm is an alternative to the [[Reed–Solomon error correction#Peterson–Gorenstein–Zierler decoder|Reed–Solomon Peterson decoder]] for solving the set of linear equations. It can be summarized as finding the coefficients Λ<sub>''j''</sub> of a polynomial Λ(''x'') so that for all positions ''i'' in an input stream ''S'':
:<math> S_{i + \nu} + \Lambda_1 S_{i+\nu-1} + \cdots + \Lambda_{\nu-1} S_{i+1} + \Lambda_
In the code examples below, ''C''(''x'') is a potential instance of ''Λ''(''x''). The error locator polynomial ''C''(''x'') for ''L'' errors is defined as:
:<math> C(x) =
or reversed:
:<math> C(x) = 1 + C_1 \ x + C_2 \ x^2 + \cdots + C_{L-1} \ x^{L-1} +
The goal of the algorithm is to determine the minimal degree ''L'' and ''C''(''x'') which results in all [[Decoding methods#Syndrome decoding|syndromes]]
:<math>
being equal to 0:
:<math>
Algorithm:
''C''(''x'') is initialized to 1, ''L'' is the current number of assumed errors, and initialized to zero. ''N'' is the total number of syndromes. ''n'' is used as the main iterator and to index the syndromes from 0 to
Each iteration of the algorithm calculates a discrepancy ''d''. At iteration ''k'' this would be:
:<math> d \gets
If ''d'' is zero, the algorithm assumes that ''C''(''x'') and ''L'' are correct for the moment, increments ''m'', and continues.
If ''d'' is not zero, the algorithm adjusts ''C''(''x'') so that a recalculation of ''d'' would be zero:
:<math>C(x) \gets C(x) \ - \ (d / b) \ x^m \ B(x).</math>
The ''x<sup>m</sup>'' term ''shifts'' B(x) so it follows the syndromes corresponding to ''b''. If the previous update of ''L'' occurred on iteration ''j'', then ''m'' = ''k''
:<math> d \gets
This would change a recalculated discrepancy to:
:<math> d = d - (d/b)b = d - d = 0.
The algorithm also needs to increase ''L'' (number of errors) as needed. If ''L'' equals the actual number of errors, then during the iteration process, the discrepancies will become zero before ''n'' becomes greater than or equal to
==Code sample==
|