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

Рид — Соломон

Рид — Соломон (англ. Reed–Solomon) — это алгоритм помехоустойчивого кодирования, основанный на алгебре конечных полей (полей Галуа). Он позволяет обнаруживать и исправлять множественные ошибки в цифровых данных, возникающие при передаче или хранении. Коды Рида — Соломона относятся к классу линейных циклических блочных кодов и являются частным случаем кодов Боуза — Чоудхури — Хоквингема (БЧХ). Алгоритм широко применяется в системах хранения данных (CD, DVD, RAID), цифровых коммуникациях (спутниковая связь, DSL), а также в кодах QR и Data Matrix.

История

Алгоритм был разработан в 1960 году двумя американскими математиками Ирвингом Ридом (Irving S. Reed) и Густавом Соломоном (Gustave Solomon), работавшими в Лаборатории Линкольна Массачусетского технологического института. Первоначальная публикация вышла в журнале Journal of the Society for Industrial and Applied Mathematics под названием «Polynomial Codes over Certain Finite Fields». В ней авторы предложили метод кодирования, основанный на представлении сообщений в виде коэффициентов многочлена над конечным полем.

В 1960-е и 1970-е годы коды Рида — Соломона оставались преимущественно теоретической разработкой из-за высокой вычислительной сложности декодирования. Практическое применение стало возможным после открытия эффективного алгоритма декодирования, предложенного Элвином Берлекэмпом (Elwyn Berlekamp) в 1968 году и усовершенствованного Джеймсом Мэсси (James Massey) в 1969 году (алгоритм Берлекэмпа — Мэсси). В 1975 году Дэвид Форни (David Forney) разработал метод обобщённого декодирования с минимальным расстоянием, что дополнительно упростило реализацию.

Массовое внедрение кодов Рида — Соломона началось в 1980-х годах с появлением компакт-дисков (CD), где они использовались для коррекции ошибок, вызванных царапинами и загрязнениями поверхности. Впоследствии алгоритм стал стандартом для цифровых видеодисков (DVD), спутникового телевидения (DVB), цифрового аудиовещания (DAB) и систем хранения данных (RAID 6).

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

Поля Галуа

Коды Рида — Соломона работают над конечным полем (полем Галуа) GF(q), где q — степень простого числа. Наиболее распространённым является поле GF(2^m), где m — целое число (обычно 8, 16 или 32). В поле GF(2^m) каждый элемент представляется m-битным двоичным словом, а арифметические операции (сложение, умножение) выполняются по модулю неприводимого многочлена степени m.

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

Исходное сообщение длиной k символов (каждый символ — элемент поля GF(q)) представляется в виде многочлена M(x) степени k-1:

M(x) = m_0 + m_1·x + m_2·x^2 + ... + m_{k-1}·x^{k-1}

Кодовое слово C(x) длины n (n > k) получается путём вычисления значений этого многочлена в n различных точках поля α^0, α^1, ..., α^{n-1}, где α — примитивный элемент поля:

C_i = M(α^i) для i = 0, 1, ..., n-1

Таким образом, кодовое слово представляет собой последовательность из n символов, каждый из которых является результатом подстановки в многочлен M(x) соответствующего элемента поля. Параметры кода удовлетворяют соотношению n ≤ q-1, а минимальное расстояние d = n - k + 1 (код является кодом с максимальным достижимым расстоянием, или MDS-кодом).

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

Основные параметры кода Рида — Соломона:

  • n — длина кодового слова (количество символов в кодовом слове);
  • k — длина исходного сообщения (количество информационных символов);
  • d — минимальное расстояние (d = n - k + 1);
  • t — максимальное количество исправляемых ошибок (t = floor((n - k)/2)).

Код может исправлять до t ошибок в любых позициях кодового слова, а также обнаруживать до 2t ошибок.

Декодирование

Декодирование кодов Рида — Соломона является более сложной задачей, чем кодирование, и включает несколько этапов:

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

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

Применение

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

  • Оптические носители: CD (Cross-Interleaved Reed–Solomon Code, CIRC), DVD, Blu-ray. Коды Рида — Соломона используются для коррекции ошибок, вызванных царапинами, пылью и дефектами поверхности.
  • Массивы RAID: В RAID 6 применяются коды Рида — Соломона для обеспечения отказоустойчивости при выходе из строя до двух дисков.
  • Твердотельные накопители (SSD): Используются для коррекции ошибок в NAND-флэш-памяти, особенно при высоких плотностях записи.

Цифровые коммуникации

  • Спутниковая связь: Стандарты DVB-S и DVB-S2 включают коды Рида — Соломона как внешний код в каскадных схемах.
  • Цифровое телевидение: DVB-T, DVB-C, ATSC.
  • Цифровое аудиовещание: DAB (Digital Audio Broadcasting).
  • DSL (Digital Subscriber Line): Используется в модемах ADSL и VDSL для коррекции ошибок в медных линиях.

Коды QR и Data Matrix

Двумерные штрихкоды QR и Data Matrix используют коды Рида — Соломона для коррекции ошибок. В QR-кодах применяются четыре уровня коррекции (L, M, Q, H), позволяющие восстанавливать от 7% до 30% повреждённых данных.

Космическая техника

Коды Рида — Соломона применялись в программах NASA (например, в миссиях «Вояджер», «Галилео», «Кассини») и в системах связи с Международной космической станцией.

Преимущества и недостатки

Преимущества

  • Высокая корректирующая способность: Коды Рида — Соломона могут исправлять пакеты ошибок (последовательные искажения) и комбинации случайных ошибок.
  • Оптимальность: Являются MDS-кодами, то есть достигают границы Синглтона — минимальное расстояние максимально для заданных n и k.
  • Гибкость: Параметры n и k могут быть выбраны в широких пределах в зависимости от требований приложения.

Недостатки

  • Вычислительная сложность: Декодирование требует значительных вычислительных ресурсов, особенно при больших длинах кодовых слов.
  • Чувствительность к синхронизации: Для корректной работы необходимо точное определение границ кодовых слов.
  • Ограниченная длина: Максимальная длина кодового слова ограничена размером поля Галуа (n ≤ 2^m - 1).

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

  • Коды Рида — Соломона используются в системе спутниковой навигации GPS для коррекции ошибок в навигационных сообщениях.
  • В 2010 году алгоритм был реализован в аппаратном обеспечении для передачи данных с зонда «Новые горизонты» (New Horizons) во время пролёта Плутона.
  • Коды Рида — Соломона являются частью стандарта JPEG 2000 для защиты изображений от ошибок при передаче.

Источники

  • Reed, I. S.; Solomon, G. (1960). «Polynomial Codes over Certain Finite Fields». Journal of the Society for Industrial and Applied Mathematics.
  • Berlekamp, E. R. (1968). Algebraic Coding Theory. McGraw-Hill.
  • Forney, G. D. (1965). «Concatenated Codes». MIT Research Laboratory of Electronics.
  • Wicker, S. B.; Bhargava, V. K. (1994). Reed–Solomon Codes and Their Applications. IEEE Press.
  • MacWilliams, F. J.; Sloane, N. J. A. (1977). The Theory of Error-Correcting Codes. North-Holland.

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

На главную BFOmetr →