Построение Рида Соломона - обнаружение и исправление - PullRequest
1 голос
/ 10 июля 2020

Как я могу построить код RS, который может обнаруживать и исправлять ошибки.

Например, я хотел бы построить RS (76,64,8), где

  • 8 : поле GF (2 8 ), размер символа
  • 64 : информационные символы
  • 76 : информация (64) + контрольные символы (12)

Я мог бы легко создать исправляющий код из 6 символов, используя библиотеку pyfinite python (https://pypi.org/project/pyfinite/).

Меня также интересует конструкция - другой вариант - которая может обеспечить обнаружение 8 символов ИЛИ исправление 4 символов с использованием 12 контрольных символов.

1 Ответ

0 голосов
/ 11 июля 2020

Есть ли причина, по которой вы не можете использовать код 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...