Reference articles on history, science, culture and more
Encyclopedia

Forney algorithm

In coding theory, the Forney algorithm (or Forney's algorithm) calculates the error values at known error locations. It is used as one of the steps in decoding BCH codes and Reed, Solomon codes (a subclass of BCH codes). George David Forney Jr. developed the algorithm in 1965.

01Procedure

Need to introduce terminology and the setup...

Code words look like polynomials. By design, the generator polynomial has consecutive roots αc, αc+1, ..., αc+d2.

Syndromes

Error location polynomial

\Lambda (x)=\prod _{i=1}^{\nu }(1-x\,X_{i})=1+\sum _{i=1}^{\nu }\lambda _{i}\,x^{i}

The zeros of Λ(x) are X11, ..., Xν1. The zeros are the reciprocals of the error locations X_{j}=\alpha ^{i_{j}}.

Once the error locations are known, the next step is to determine the error values at those locations. The error values are then used to correct the received values at those locations to recover the original codeword.

In the more general case, the error weights ej can be determined by solving the linear system

s_{0}=e_{1}\alpha ^{(c+0)\,i_{1}}+e_{2}\alpha ^{(c+0)\,i_{2}}+\cdots \,
s_{1}=e_{1}\alpha ^{(c+1)\,i_{1}}+e_{2}\alpha ^{(c+1)\,i_{2}}+\cdots \,
\cdots \,

However, there is a more efficient method known as the Forney algorithm, which is based on Lagrange interpolation. First calculate the error evaluator polynomial

\Omega (x)=S(x)\,\Lambda (x){\pmod {x^{2t}}}\,

Where S(x) is the partial syndrome polynomial:

S(x)=s_{0}x^{0}+s_{1}x^{1}+s_{2}x^{2}+\cdots +s_{2t-1}x^{2t-1}.

Then evaluate the error values:

e_{j}=-{\frac {X_{j}^{1-c}\,\Omega (X_{j}^{-1})}{\Lambda '(X_{j}^{-1})}}\,

The value c is often called the "first consecutive root" or "fcr". Some codes select c = 1, so the expression simplifies to:

e_{j}=-{\frac {\Omega (X_{j}^{-1})}{\Lambda '(X_{j}^{-1})}}

02Formal derivative

Λ'(x) is the formal derivative of the error locator polynomial Λ(x):

\Lambda '(x)=\sum _{i=1}^{\nu }i\,\cdot \,\lambda _{i}\,x^{i-1}

In the above expression, note that i is an integer, and λi would be an element of the finite field. The operator represents ordinary multiplication (repeated addition in the finite field) which is the same as the finite field's multiplication operator, i.e.

i\lambda =(1+\ldots +1)\lambda =\lambda +\ldots +\lambda .

For instance, in characteristic 2, i\lambda =0,\lambda according as i is even or odd.

03Derivation

Lagrange interpolation

Gill (n.d., pp. 52-54) gives a derivation of the Forney algorithm.

04Erasures

Define the erasure locator polynomial

\Gamma (x)=\prod (1-x\,\alpha ^{j_{i}})

Where the erasure locations are given by ji. Apply the procedure described above, substituting Γ for Λ.

If both errors and erasures are present, use the error-and-erasure locator polynomial

\Psi (x)=\Lambda (x)\,\Gamma (x)
Watch videos about Forney algorithmExplainers and documentaries on YouTube (opens in a new tab)

Sources and credits

This article is adapted from the Wikipedia article Forney algorithm, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.

Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.