I am familiar with RS codes and the classic syndrome-based decoding algorithm. However, I now have the task of implementing an alternative decoder, the Welch-Berlekamp algorithm. Here, the underlying application requires that no syndrome computation is required (I am aware that the syndrome-based approach is simpler in complexity than the Welch-Berlekamp algorithm).
Basically, I know that there are two different variants for RS codes.
- Original encoding scheme for Reed Solomon code, where there is a fixed set of data points known to encoder and decoder, and a polynomial based on the message to be transmitted, unknown to the decoder.
- BCH type code where a fixed polynomial known to both encoder and decoder.
For the original variant of RS codes, the implementation of the Welch-Berlekamp algorithm initially seems relatively easy to me. Here the system of equations can be set up from the generator matrix and the received symbols.
However, it is now required to implement the Welch-Berlekamp algorithm for the second variant. I am currently having difficulties here and I'm also in doubt as to whether this is even possible for this variant.
I would be very grateful if someone could help me if the Welch-Berlekamp algorithm can also be used for the BCH variant.
Best regards,
RatbaldMeyer
CodePudding user response:
implement the Welch-Berlekamp algorithm for the second variant
The parameters are not the same.
Variant 1 - Fixed set of data points. For a RS(n, k) code, decoders operate on n symbols to reconstruct the polynomial used to encode a message.
Variant 2 - Fixed generator polynomial with roots that are successive powers of a primitive element, such as (x-2) (x-4) (x-8) ... . For a RS(n, k) code, decoders operate on n-k syndromes to determine error locations (error locator polynomial) and error values.
Welch-Berlekamp requires O(n^3) operations to invert a matrix. Gao's extended Euclid algorithm has time complexity O(n^2) if the initial and constant polynomial used by the decoder based on the fixed set of data points is pre-calculated (the Wiki article shows this polynomial as R[-1]).