Hi, Two traditional ways to decode Reed-Solomon codes include the Massey-Berlekamp and Euclidean decoding algorithms. Can someone please explain the underlying theory on which the Euclidean algorithm is based, or perhaps give some pointers in literature where it is covered? Does it have anything to do with the Euclidean algorithm used in abstract algebra to compute the GCD? Your time, effort and suggestions will be greatly appreciated Jaco

# Euclidean algorithm used to decode Reed-Solomon codes?

Started by ●July 17, 2003

Reply by ●July 24, 20032003-07-24

jaco_versfeld@hotmail.com (Jaco Versfeld) writes:>Two traditional ways to decode Reed-Solomon codes include the >Massey-Berlekamp and Euclidean decoding algorithms.>Can someone please explain the underlying theory on which the >Euclidean algorithm is based, or perhaps give some pointers in >literature where it is covered?>Does it have anything to do with the Euclidean algorithm used in >abstract algebra to compute the GCD?Yes, it is the same algorithm or more precisely, the extended Euclidean algorithm for finding the GCD of two polynomials a(x) and b(x). The extended version of the Euclidean algorithm also finds two polynomials c(x) and d(x) such that c(x).a(x) + d(x).b(x) = g(x) where g(x) is the GCD of a(x) and b(x). The process is iterative in that 3 sequences of polynomials are constructed step by step. One sequence is the set of **remainder** polynomials that begins a0(x) = a(x), a1(x) = b(x), a2(x), a3(x), ... , and ends in an(x) = g(x). The degrees of these polynomials decrease at each step. The other two sequences are c0(x) = 1, c1(x) = 0, c2(x), ... , cn(x) and d0(x) = 0, d1(x) = 1, d2(x), .... , dn(x). These polynomials increase in degree. Then, the following result holds for i = 0, 1, 2, ... , n: ci(x).a(x) + di(x).b(x) = ai(x). In Reed-Solomon decoding, we wish to solve the congruence L(x).S(x) = W(x) mod x^{2t} where the syndrome polynomial S(x) is of degree < 2t, while L(x) has degree at most t, and deg(W(x)) < deg(L(x)). Note that S(x) is known while L(x) and W(x) are to be found. The congruence to be solved is equivalent to the equation M(x).x^{2t} + L(x).S(x) = W(x) and is solved by applying the extended Euclidean algorithm to a(x) = x^{2t} and b(x) = S(x). Let ai(x) be the first remainder on the remainder sequence whose degree is strictly less than t. This ai(x) is essentially the W(x) we seek, and the corresponding di(x) is esentially the L(x) we seek: they both happen to have have an extraneous scalar multiplicative factor. This factor is equal to di(0), the coefficient of x^0 in the polynomial di(x) found by the above process. In other words, W(x) = ai(x)/di(0) and L(x) = di(x)/di(0) is the solution. I also mention that it is unnecessary to carry out this "normalization" in almost all decoder implementations. What the decoder needs are the roots of L(x) and the values taken on by W(x)/L'(x) at the roots, and these quantities are unaffected if both W(x) and L(x) are multiplied by the same scalar factor. Hope this helps. -- .-. .-. .-. .-. .-. .-. .-. / D \ I / L \ I / P \ / S \ A / R \ W / A \ T / E \ `-' `-' `-' `-' `-' `-'

Reply by ●July 25, 20032003-07-25

Thank you very much Jaco Dilip V. Sarwate <sarwate@uiuc.edu> wrote in message news:<sLVTa.3798$o7.48855@vixen.cso.uiuc.edu>...> jaco_versfeld@hotmail.com (Jaco Versfeld) writes: > > >Two traditional ways to decode Reed-Solomon codes include the > >Massey-Berlekamp and Euclidean decoding algorithms. > > >Can someone please explain the underlying theory on which the > >Euclidean algorithm is based, or perhaps give some pointers in > >literature where it is covered? > > >Does it have anything to do with the Euclidean algorithm used in > >abstract algebra to compute the GCD? > > > > > Yes, it is the same algorithm or more precisely, the extended > Euclidean algorithm for finding the GCD of two polynomials > a(x) and b(x). The extended version of the Euclidean algorithm > also finds two polynomials c(x) and d(x) such that > > c(x).a(x) + d(x).b(x) = g(x) > > where g(x) is the GCD of a(x) and b(x). The process is iterative > in that 3 sequences of polynomials are constructed step by step. > One sequence is the set of **remainder** polynomials that begins > a0(x) = a(x), a1(x) = b(x), a2(x), a3(x), ... , and ends in > an(x) = g(x). The degrees of these polynomials decrease at > each step. The other two sequences are > c0(x) = 1, c1(x) = 0, c2(x), ... , cn(x) and > d0(x) = 0, d1(x) = 1, d2(x), .... , dn(x). These polynomials > increase in degree. Then, the following result holds for > i = 0, 1, 2, ... , n: > > ci(x).a(x) + di(x).b(x) = ai(x). > > > > In Reed-Solomon decoding, we wish to solve the congruence > > L(x).S(x) = W(x) mod x^{2t} > > where the syndrome polynomial S(x) is of degree < 2t, while L(x) > has degree at most t, and deg(W(x)) < deg(L(x)). Note that S(x) > is known while L(x) and W(x) are to be found. The congruence to > be solved is equivalent to the equation > > M(x).x^{2t} + L(x).S(x) = W(x) > > and is solved by applying the extended Euclidean algorithm to > a(x) = x^{2t} and b(x) = S(x). Let ai(x) be the first remainder > on the remainder sequence whose degree is strictly less than t. > This ai(x) is essentially the W(x) we seek, and the corresponding > di(x) is esentially the L(x) we seek: they both happen to have > have an extraneous scalar multiplicative factor. This factor is > equal to di(0), the coefficient of x^0 in the polynomial di(x) > found by the above process. In other words, W(x) = ai(x)/di(0) > and L(x) = di(x)/di(0) is the solution. I also mention that it > is unnecessary to carry out this "normalization" in almost all > decoder implementations. What the decoder needs are the roots > of L(x) and the values taken on by W(x)/L'(x) at the roots, and > these quantities are unaffected if both W(x) and L(x) are > multiplied by the same scalar factor. > > > Hope this helps.