Reed-Solomon error-correcting code decoder
nayuki.io
nayuki.io
Eventually I came across https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_f... which was really enlightening, and I wrote some code to essentially bruteforce combinations of generator polynomials and bit/byte ordering --- and luckily discovered the details of the implementation on the first try. (The first polynomial in my list was 0x211, and it was the right one.)
The final implementation turned out to be relatively straightforward, less than 250 lines of C for a correcting decoder including the unusual (but probably trivial/circuit-simplifying) bit permutation/expansion scheme the original hardware used. The core algorithm itself is mostly composed of XORs and table lookups. I believe I used BkM and Forney for the correction part. If anyone is curious, I'll see if I can find and release some of the code I used.
My current progress is summarised in https://math.stackexchange.com/questions/663643/discover-par... and https://github.com/moreati/chirppy/blob/master/trials.py
In fact, those parameters line up with 9 * 10-bit symbols in each block, 5 10-bit data and 4 10-bit ECC. I would try a shortened RS(1023,1019) in GF(1023), taking pairs of the 5-bit "symbols".
Here is the code I originally used. I was bruteforcing a non-shortened RS(511,503) in GF(511) which had a somewhat complex transformation between bytes and symbols, fortunately partly documented at the time:
http://pastebin.com/6nK2GSBh (partly anonymised. public domain.)
https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_f...
ETA: Scratch that, numbers is a module in the stdlib https://docs.python.org/3/library/numbers.html#module-number... sorry for the confusion
You really need to give a number of examples. Remember human brains are fast example based learners. We see patterns and make abstract concepts out of it. Here the abstract concepts is the crazy math.
I think the only part that most students have not seen is the finite field arithmetic, because that knowledge is pretty specialized for people who actually design math for computers to execute.
For the time being, try running the Python code and adding print statements to the places of interest.
This stuff is taught in intro discrete mathematics courses.
This is because they operate on multi-bit symbols. To the algorithm, one bad bit in a symbol is no worse than all bad bits.
There's a lot more info on that here:
https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_f...