Понятие о кодах Боуза-Чоудхури-Хоккенгема
Остался открытым вопрос о методике построения кодов, минимальное расстояние между кодовыми словами которых равно заданному числу. В 1960 году независимо Боуз (Bose), Чоудхури (Chaudhuri) и Хоккенгем (Hocquengem) открыли способ построения полиномиальных кодов, удовлетворяющих таким требованиям. Эти коды получили названия кодов Боуза-Чоудхури-Хоккенгема или БЧХ-кодов (BCH codes). БЧХ-коды могут быть не только двоичными, например, на практике достаточно широко используются недвоичные коды Рида-Соломона (Reed, Solomon), но далее будут рассматриваться только двоичные.
Многочлен степени
называется примитивным,
если
делится на
без остатка
для
и не делится ни для какого меньшего значения
.
Например, многочлен примитивен: он делит
, но не делит
при
. Примитивен также многочлен
- он
делит
,
но не делит
при
.
Кодирующий многочлен для БЧХ-кода, длина кодовых слов
которого
,
строится так. Находится примитивный многочлен минимальной степени
такой, что
или
. Пусть
- корень этого многочлена, тогда рассмотрим кодирующий многочлен
, где
- многочлены минимальной степени, имеющие корнями соответственно
.
Построенный кодирующий многочлен производит код с минимальным расстоянием
между кодовыми словами, не меньшим , и длиной кодовых слов n [1].
Пример. Нужно построить БЧХ-код с длиной кодовых слов и
минимальным расстоянием между кодовыми словами
. Степень примитивного
многочлена равна
и сам он равен
.
Пусть
- его корень, тогда
и
- также его
корни. Минимальным многочленом для
будет
.
Следовательно,
![g(x)=\hbox{НОК}(x^4+x^3+1, x^4+x^3+x^2+x+1)=](/sites/default/files/tex_cache/c19300a628f7a3510cf2b486a0e028f0.png)
![=(x^4+x^3+1)(x^4+x^3+x^2+x+1)=
x^8+x^4+x^2+x+1.](/sites/default/files/tex_cache/0421bde851571ca441b81f2131897153.png)
![(7,15)](/sites/default/files/tex_cache/f5537c1371655a5076bf7952c6bc4d4b.png)
![a(x)=x^4+1](/sites/default/files/tex_cache/579e156461ab4c9f203b9034da972ea4.png)
![a(x)g(x)=x^{12}+x^6+x^5+x^2+x+1](/sites/default/files/tex_cache/9ac0593595948f0f5cdadad195fa387b.png)
Можно построить11
двоичный БЧХ-код с кодовыми словами длины
и нечетным минимальным расстоянием
, у которого число
контрольных символов не больше
.
Первый БЧХ-код, примененный на практике, был -кодом,
исправляющим ошибки кратности до 5, но наиболее широкое распространение получил
-код, обнаруживающий ошибки кратности до 6.
БЧХ-коды умеренной длины не слишком далеки от совершенных или квазисовершенных кодов. Коды Хэмминга, например, являются БЧХ-кодами, а БЧХ-коды с минимальным весом кодового слова 5 - квазисовершенны. Но с ростом длины кодовых слов качество БЧХ-кодов падает. Код Голея, например, - это не код БЧХ.
Упражнение 45
Найти кодирующий многочлен БЧХ-кода с длиной кодовых слов 15
и минимальным расстоянием между кодовыми словами 7. Использовать примитивный
многочлен
с корнем
.
Проверить, будут ли
и
корнями соответственно
многочленов
и
.
Циклические избыточные коды
Циклический избыточный код (Cyclical Redundancy Check - CRC)
имеет фиксированную длину и используется для обнаружения ошибок.
Наибольшее распространения получили коды CRC-16 и CRC-32, имеющие длину 16
и 32 бита соответственно. Код CRC строится по исходному сообщению
произвольной длины, т.е. этот код не является блочным в строгом смысле этого
слова. Но при каждом конкретном применении этот код - блочный, -код для CRC-16 или
-код для
CRC-32.
Вычисление значения кода CRC происходит посредством деления многочлена,
соответствующего исходному сообщению (полином-сообщение), на фиксированный
многочлен (полином-генератор). Остаток от такого деления и есть код CRC,
соответствующий исходному сообщению. Для кода CRC-16 полином-генератор имеет
степень 16, а для CRC-32 - 32. Полиномы-генераторы подбираются специальным
образом и для кодов CRC-16/32 стандартизированы Международным консультативным
комитетом по телеграфной и телефонной связи (CCITT). Для CRC-16, например, стандартным
является полином-генератор .
Пример построения CRC-4 кода для сообщения 11010111, используя
полином-генератор . Исходному сообщению
соответствует полином
, т.е. нумерация битов здесь начинается
справа.
![\smallskip
\setbox\bzero=\vbox{\hsize=200pt\parindent0pt\obeylines
$x^7+x^6+x^4+x^2+x+1 \ \ \ \vrule \underline{\;x^4+x^3+x^2+1}$
$\underline{x^7+x^6+x^5+x^3}\hskip45.2pt%
\smash{\vrule height 12pt depth 2pt} \;x^3+x$
$\ x^5+x^4+x^3+x^2+x+1$
$\ \underline{x^5+x^4+x^3+x}$
$\ \ x^2+1$}
\centerline{\box\bzero}
\smallskip](/sites/default/files/tex_cache/420d4e9ad39e5534be175ad177ffaa87.png)
Полиному соответствуют биты 0101 - это и
есть CRC-4 код.
Существуют быстрые алгоритмы для расчета CRC-кодов, использующие специальные таблицы, а не деление многочленов с остатком.
CRC-коды способны обнаруживать одиночную ошибку в любой позиции и, кроме того, многочисленные комбинации кратных ошибок, расположенных близко друг от друга. При реальной передаче или хранении информации ошибки обычно группируются на некотором участке, а не распределяются равномерно по всей длине данных. Таким образом, хотя для идеального случая двоичного симметричного канала CRC-коды не имеют никаких теоретических преимуществ по сравнению, например, с простыми контрольными суммами, для реальных систем эти коды являются очень полезными.
Коды CRC используются очень широко: модемами, телекоммуникационными программами, программами архивации и проверки целостности данных и многими другими программными и аппаратными компонентами вычислительных систем.
Упражнение 46
Построить CRC-4 код для сообщений 10000000 и 101111001, используя
полином-генератор .