Есть ли причина, по которой вы не можете использовать код python pyfinite для обработки тех случаев, которые вам нужны?
Если интересно, у меня есть старая интерактивная демонстрация RS e cc, написанная на C . Пользователь выбирает 1 из 30 возможных полей GF (2 ^ 8), некоторые параметры полинома генератора RS, количество байтов четности (определение ограничивает это значение до 20, но его можно изменить), количество байтов данных. Затем использование может вводить данные, кодировать данные, изменять данные, изменять данные и помечать их как стираемые, исправлять данные и т. Д. Код включает 3 общих декодера, обращение матрицы PGZ, расхождение Берлейкампа Месси, расширенный алгоритм Евклида Сугиямы. Декодер Евклида похож на аппаратную реализацию (имитирующую пару регистров сдвига), поскольку он использовался для помощи группе разработчиков оборудования, реализующей код RS еще в 1980-х годах. Я использовал Visual Studio для его компиляции, но с другими компиляторами особых проблем быть не должно. Он слишком велик для публикации непосредственно в этом ответе, поэтому вот ссылка на zip-файл, который включает исходный код и файл readme.txt:
http://rcgldr.net/misc/eccdemo8.zip
При 12 проверках четности код RS может исправить до 4 ошибок, при этом обнаруживая 8 ошибок. Предположим наихудший сценарий без сбоев из 8 ошибок. Код вычисляет 4 неверных местоположения ошибок, в результате чего получается 12 ошибок, 4 неправильно исправленных ошибок плюс 8 существующих ошибок. Это никогда не может потерпеть неудачу, потому что расстояние Хэмминга между любыми двумя допустимыми кодовыми словами составляет 13 байтов. В качестве примера сбоя может быть 9 ошибок, код вычисляет 4 неправильные ошибки, в результате получается 13 ошибок для возможного неправильного исправления (что приведет к созданию действительного кодового слова, но неправильного кодового слова).
Чтобы проверить до 8 ошибок после вычисления до 4 местоположений ошибок, сгенерированный полином локатора ошибок должен быть проверен с использованием всех 12 синдромов. Это делается в строке 871 в GenPErrorsE (), расширенном декодере Евклида Сугиямы. Эта проверка также может быть включена в другие 2 декодера, но поскольку демонстрационная программа вызывает все 3 декодера, в ней нет необходимости. Обратите внимание: если декодеры вычисляют 6 ошибок, они всегда будут выдавать правильное кодовое слово, но, возможно, неправильное кодовое слово, если на самом деле имеется 7 или более ошибок. Самый простой способ справиться с этим в eccdemo8. c - ограничить количество ошибок до <= 4, что требует вставки только 4 строк кода в строку 204: </p>
GenForneyErr(); /* generate forney err values */
/* insert this code to limit to 4 errors */
if(vOffsets.size > 4){ /* limit to 4 errors */
printf("uncorrectable, > 4 errors\n");
return;
}
printf("vLocators: ");
Существует также другой тип кода Рида-Соломона, называемый «исходным представлением» (по сравнению с более распространенным представлением «BCH»). Для кода RS (n, k) декодирование работает с n символами, в то время как декодеры «BCH view» работают с nk символами (синдромами), делая «BCH view» значительно быстрее, чем «исходный вид». Некоторые коды только для стирания основаны на «исходном представлении», но наиболее распространенным случаем является Raid 6, который генерирует синдромы «представления BCH» (еще один подход, синдромы не являются частью «кодового слова»). Статья Wiki объясняет это:
https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction