Код Рида-Соломона
Код Рида-Соломона — это один из типов линейных блоковых кодов, исправляющих ошибки, построенный на основе многочленов над конечными полями (полями Галуа). Коды Рида-Соломона относятся к классу недвоичных циклических кодов БЧХ (Боуза — Чоудхури — Хоквингема) и позволяют эффективно обнаруживать и исправлять пакеты ошибок, возникающие при передаче или хранении цифровых данных. Широко применяются в системах связи, цифровом телевидении, спутниковой связи, хранении данных (CD, DVD, RAID-массивы), а также в кодах QR и азбуке Морзе.
История
Коды Рида-Соломона были разработаны в 1960 году двумя сотрудниками Лаборатории Линкольна Массачусетского технологического института — Ирвингом Ридом (Irving S. Reed) и Густавом Соломоном (Gustave Solomon). Их работа «Polynomial Codes over Certain Finite Fields» была опубликована в Journal of the Society for Industrial and Applied Mathematics. Изначально коды не получили широкого практического применения из-за сложности реализации декодирования. Ситуация изменилась в 1968 году, когда Элвин Берлекэмп (Elwyn Berlekamp) предложил эффективный алгоритм декодирования, а затем в 1971 году Роберт Уэлч (Robert Welch) разработал более эффективный алгоритм Берлекэмпа — Уэлча. В 1970–1980-х годах, с развитием цифровой электроники и появлением недорогих интегральных схем, коды Рида-Соломона стали активно внедряться в системы записи и передачи данных.
Математические основы
Конечные поля Галуа
Коды Рида-Соломона оперируют над полем Галуа \(GF(2^m)\), где \(m\) — целое положительное число. Каждый символ кодового слова представляется \(m\)-битным двоичным числом. Размер алфавита — \(2^m\) символов. Наиболее часто используется \(m=8\), что даёт поле \(GF(256)\), соответствующее одному байту.
Принцип кодирования
Исходное сообщение представляется в виде многочлена степени не выше \(k-1\) над \(GF(2^m)\):
\[ M(x) = c_{k-1}x^{k-1} + c_{k-2}x^{k-2} + \dots + c_0 \]
Кодовое слово длины \(n = 2^m - 1\) получается путём умножения информационного многочлена на порождающий многочлен \(g(x)\) степени \(n-k\):
\[ C(x) = M(x) \cdot g(x) \]
Порождающий многочлен строится как произведение \((x - \alpha^i)\) для \(i\) от 0 до \(n-k-1\), где \(\alpha\) — примитивный элемент поля Галуа. Альтернативный эквивалентный подход — систематическое кодирование, при котором информационные символы остаются неизменными, а к ним добавляются проверочные символы.
Параметры
Код Рида-Соломона обозначается как RS\((n, k)\), где:
- \(n\) — длина кодового слова в символах (чаще всего \(n = 2^m - 1\));
- \(k\) — длина информационной части (число информационных символов);
- \(n - k\) — число проверочных символов (избыточность).
Кодовое расстояние (минимальное расстояние Хэмминга) для кода RS\((n, k)\) равно \(d_{\min} = n - k + 1\). Это свойство делает коды Рида-Соломона оптимальными в смысле границы Синглтона: для кодов с исправлением ошибок максимально возможное количество исправляемых ошибок не превосходит \(\lfloor (d_{\min} - 1)/2 \rfloor\).
Корректирующая способность
Код RS\((n, k)\) способен исправлять до \(t = \lfloor (n - k)/2 \rfloor\) ошибок в символах (пакетов ошибок) или обнаруживать до \(d_{\min} - 1 = n - k\) ошибок. Каждая ошибка в символе означает искажение всех \(m\) битов этого символа, поэтому код эффективен против пакетных ошибок.
Виды и модификации
Укороченные и расширенные коды
В практических системах часто используются укороченные коды: исходный код длины \(n\) урезается до меньшей длины \(n' < n\) путём исключения части нулевых информационных символов. Расширенные коды имеют длину \(n = 2^m\) (добавляется один символ общей проверки на чётность). Например, в стандарте цифрового телевидения DVB-S используется код RS(204, 188), который является укороченным от RS(255, 239).
Свёрточные коды и каскадные схемы
Коды Рида-Соломона часто комбинируются с другими кодами (например, свёрточными) для построения каскадных кодов. Во внешнем кольце используется код Рида-Соломона, исправляющий пакетные ошибки, во внутреннем — код, исправляющий случайные ошибки. Примером служит стандарт спутникового телевидения DVB-S2, где внешний код — BCH, а внутренний — LDPC, но в более ранних версиях (DVB-S) применялся код Рида-Соломона как внешний.
Алгоритмы декодирования
Классический алгоритм Берлекэмпа — Уэлча
Декодирование кодов Рида-Соломона включает этапы:
- Вычисление синдрома ошибок.
- Нахождение многочлена локаторов ошибок (например, алгоритм Берлекэмпа — Мэсси или алгоритм Берлекэмпа — Уэлча).
- Нахождение корней многочлена локаторов (поиск Ченя).
- Вычисление значений ошибок (алгоритм Форни).
- Исправление ошибочных символов.
Современные алгоритмы
В настоящее время широко применяются алгоритмы декодирования с использованием быстрого преобразования Фурье над конечными полями (FFT-based decoding). Существуют также декодеры с фиксированной задержкой и декодеры с мягким решением (soft-decision decoding), повышающие эффективность в каналах с недвоичными модуляциями.
Применение
Хранение данных
- CD и DVD: в стандарте «Красная книга» (Audio CD) используется код Рида-Соломона (CIRC — Cross-Interleaved Reed–Solomon Code), обеспечивающий исправление ошибок до 4000 бит подряд.
- DVD использует код RS(208, 192) + RS(182, 172) в схеме Пика-Чена (product code).
- RAID-массивы: в файловых системах ZFS и ReFS применяются систематические коды Рида-Соломона для защиты от потери диска (RAID 6 и его аналоги).
- Flash-память (NAND): в современных SSD и картах памяти используется код RS с малым числом проверочных символов для защиты от битовых ошибок.
Цифровая связь
- Спутниковое телевидение: DVB-S (RS 204,188), DVB-S2 (во внешнем кольце BCH, но в предшественниках — RS).
- Цифровое видео по кабелю: DVB-C.
- Стандарт беспроводной связи IEEE 802.16 (WiMAX) использует коды Рида-Соломона как часть исправления ошибок.
- Стандарт мобильной связи 2G (GSM): в канале управления используется свёрточный код, но в некоторых версиях — RS.
Коды QR и двухмерные штрихкоды
QR-коды используют коды Рида-Соломона для восстановления данных при повреждении или загрязнении изображения. Уровень коррекции (L, M, Q, H) определяет количество проверочных символов (от 7% до 30%).
Спутниковая навигация
В системе глобального позиционирования GPS используется код Рида-Соломона в навигационных сообщениях для исправления ошибок в канале L2C.
Космическая связь
В стандартах CCSDS (Consultative Committee for Space Data Systems) для телеуправления и телеизмерений применяются коды Рида-Соломона с параметрами RS(255, 223) и RS(63, 47).
Достоинства и недостатки
Достоинства
- Высокая корректирующая способность против пакетных ошибок.
- Отсутствие размножения ошибок (в отличие от свёрточных кодов).
- Простота анализа: минимальное расстояние равно \(n - k + 1\), что является максимальным для заданных \(n\) и \(k\) (согласно границе Синглтона).
- Возможность сочетания с другими кодами в каскадных схемах.
Недостатки
- Сложность реализации декодирования (требуется выполнение операций умножения/деления в поле Галуа).
- Фиксированная длина кодового слова: при заданных \(m\) и \(n\) трудно адаптироваться к различным требованиям без укорочения.
- Низкая эффективность при исправлении случайных единичных ошибок (по сравнению с двоичными кодами БЧХ).
Пример кода
Параметры: RS(15, 9) над полем \(GF(2^4)\) (m=4). Информационная часть: 9 символов (9 × 4 = 36 бит). Проверочных символов: 6. Код может исправлять до 3 ошибок в символах (t = (15-9)/2 = 3). Порождающий многочлен степени 6 строится на основе примитивного элемента \(\alpha\) поля \(GF(16)\). На практике такие малые длины используются только в учебных целях; реальное применение — RS(255, 223) или их укороченные версии.
Интересные факты
- Коды Рида-Соломона нашли применение в аппаратуре «Вояджеров» (программа НАСА) для передачи снимков Юпитера и Сатурна в 1979–1981 годах.
- Они используются в системе хранения данных для квантовых компьютеров (коды стабилизации) и в архитектуре RAID 6 (часто в реализации Linux MD RAID6).
- В стандарте MPEG Audio Layer III (MP3) применяется код Рида-Соломона только в некоторых субблоках, но не в основном кодеке.
См. также
- Код Боуза — Чоудхури — Хоквингема (БЧХ)
- Код Хэмминга
- Код Голея
- Свёрточный код
- Поле Галуа
Источники
- Reed, I. S.; Solomon, G. «Polynomial Codes over Certain Finite Fields». — Journal of the Society for Industrial and Applied Mathematics, 1960.
- Berlekamp, E. R. «Algebraic Coding Theory». — McGraw-Hill, 1968.
- Власов, А. В.; Леонтьев, М. Н. «Помехоустойчивое кодирование: коды Рида-Соломона». — М.: Горячая линия — Телеком, 2005.
- Кларк, Дж. мл.; Кейн, Дж. «Кодирование с исправлением ошибок в системах цифровой связи». — Радио и связь, 1987.
- «Теория информации и кодирования» / под ред. А. М. Александрова. — М.: Наука, 2002.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →