Открыть сервис

Коррекция ошибок Рида — Соломона

Коды Рида — Соломона (англ. Reed–Solomon codes) — это класс недвоичных циклических кодов, исправляющих ошибки, основанных на арифметике конечных полей (полей Галуа). Они позволяют обнаруживать и исправлять множественные пакетные ошибки в цифровых данных, что делает их одними из наиболее широко применяемых помехоустойчивых кодов в системах хранения и передачи информации. Коды были разработаны в 1960 году сотрудниками Массачусетского технологического института Ирвингом Ридом и Густавом Соломоном.

История

Идея создания кодов, способных исправлять ошибки в символах, а не в отдельных битах, возникла в конце 1950-х годов. В 1960 году Ирвинг Рид и Густав Соломон опубликовали статью «Polynomial Codes over Certain Finite Fields» в журнале Journal of the Society for Industrial and Applied Mathematics. В ней они предложили схему кодирования, основанную на интерполяции многочленов над конечным полем. Первоначально коды Рида — Соломона считались слишком сложными для практической реализации из-за необходимости выполнения арифметических операций в полях Галуа, однако с развитием микроэлектроники в 1970-х годах они нашли применение в космической связи (например, в программе «Вояджер»). В 1980-х годах коды стали использоваться в компакт-дисках, а затем — в спутниковом телевидении, беспроводных сетях и системах хранения данных.

Математические основы

Коды Рида — Соломона являются подклассом кодов Боуза — Чоудхури — Хоквингема (БЧХ-кодов). Их работа основана на свойствах конечных полей Галуа, обозначаемых как GF(q), где q — степень простого числа. Наиболее распространены коды над полями GF(2^m), где m — целое число (обычно m = 8). В таких полях каждый символ кода представляет собой m-битное слово.

Параметры кода

Код Рида — Соломона обозначается как RS(n, k), где:

Например, популярный код RS(255, 223) имеет длину 255 байт, из которых 223 байта — полезные данные, а 32 байта — проверочные. Он способен исправить до 16 ошибочных байт в любом месте кодового слова.

Принцип кодирования

Кодирование заключается в представлении информационного сообщения в виде коэффициентов многочлена степени k − 1 над GF(q). Затем этот многочлен умножается на порождающий многочлен g(x) степени n − k, который строится на основе корней поля Галуа. Результатом является кодовое слово, которое делится на g(x) без остатка.

Принцип декодирования

Декодирование кодов Рида — Соломона включает несколько этапов:

  1. Вычисление синдрома — нахождение остатка от деления принятого многочлена на порождающий многочлен.
  2. Поиск мест ошибок — решение ключевого уравнения с использованием алгоритма Берлекэмпа — Месси (или алгоритма Евклида).
  3. Определение значений ошибок — вычисление величин искажений в найденных позициях (алгоритм Форни).
  4. Исправление — вычитание найденных значений из принятых символов.

Существуют также мягкие алгоритмы декодирования (например, алгоритм Кётера — Варди), которые повышают исправляющую способность за счёт использования информации о надёжности принятых символов.

Классификация

Коды Рида — Соломона делятся на два основных типа в зависимости от способа обработки данных:

По области применения выделяют:

Применение

Коды Рида — Соломона нашли широкое применение в различных областях цифровой техники и связи.

Хранение данных

Передача данных

Криптография

Коды Рида — Соломона используются в некоторых криптосистемах, основанных на теории кодирования, например, в схеме Мак-Элиса, которая устойчива к атакам квантовых компьютеров.

Достоинства и недостатки

Достоинства

Недостатки

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →