Lecture

Created: 10.04.2007 | Level: specialist | Access: paid
Lecture 11:

Понятие о кодах Боуза-Чоудхури-Хоккенгема

< Lecture 10 || Lecture 11 || Lecture 12 >
Annotation: Рассказывается методика построения кодов, минимальное расстояние между кодовыми словами которых равно заданному числу. Математическое обосновании кодов Боуза-Чоудхури-Хоккенгема, упражнения для самопроверки. Рассматриваются циклические избыточные коды(CRC) и их применение на практике

Остался открытым вопрос о методике построения кодов, минимальное расстояние между кодовыми словами которых равно заданному числу. В 1960 году независимо Боуз (Bose), Чоудхури (Chaudhuri) и Хоккенгем (Hocquengem) открыли способ построения полиномиальных кодов, удовлетворяющих таким требованиям. Эти коды получили названия кодов Боуза-Чоудхури-Хоккенгема или БЧХ-кодов (BCH codes). БЧХ-коды могут быть не только двоичными, например, на практике достаточно широко используются недвоичные коды Рида-Соломона (Reed, Solomon), но далее будут рассматриваться только двоичные.

Многочлен \[ g(x) \] степени \[ k \] называется примитивным, если \[ x^j+1 \] делится на \[ g(x) \] без остатка для \[ j=2^k-1 \] и не делится ни для какого меньшего значения \[ j \] .

Например, многочлен \[ 1+x^2+x^3 \] примитивен: он делит \[ x^7+1 \] , но не делит \[ x^j+1 \] при \[ j<7 \] . Примитивен также многочлен \[ 1+x^3+x^4 \] - он делит \[ x^{15}+1 \] , но не делит \[ x^j+1 \] при \[ j<15 \] .

Кодирующий многочлен \[ g(x) \] для БЧХ-кода, длина кодовых слов которого \[ n \] , строится так. Находится примитивный многочлен минимальной степени \[ q \] такой, что \[ n\le2^q-1 \] или \[ q\ge\log_2(n+1) \] . Пусть \[ \alpha \] - корень этого многочлена, тогда рассмотрим кодирующий многочлен \[ g(x)=\hbox{НОК}(m_1(x), \ldots, m_{d-1}(x)) \] , где \[ m_1(x),\ldots,m_{d-1}(x) \] - многочлены минимальной степени, имеющие корнями соответственно \[ \alpha, \alpha^2, \ldots, \alpha^{d-1} \] .

Построенный кодирующий многочлен производит код с минимальным расстоянием между кодовыми словами, не меньшим \[ d \] , и длиной кодовых слов n [1].

Пример. Нужно построить БЧХ-код с длиной кодовых слов \[ n=15 \] и минимальным расстоянием между кодовыми словами \[ d=5 \] . Степень примитивного многочлена равна \[ q=\log_2(n+1)=4 \] и сам он равен \[ x^4+x^3+1 \] . Пусть \[ \alpha \] - его корень, тогда \[ \alpha^2 \] и \[ \alpha^4 \] - также его корни. Минимальным многочленом для \[ \alpha^3 \] будет \[ x^4+x^3+x^2+x+1 \] . Следовательно, \[ g(x)=\hbox{НОК}(x^4+x^3+1, x^4+x^3+x^2+x+1)= \] \[ =(x^4+x^3+1)(x^4+x^3+x^2+x+1)= x^8+x^4+x^2+x+1. \] Степень полученного многочлена равна 8, следовательно, построенный БЧХ-код будет \[ (7,15) \] -кодом. Слово 1000100 или \[ a(x)=x^4+1 \] будет закодировано кодовым словом \[ a(x)g(x)=x^{12}+x^6+x^5+x^2+x+1 \] или 111001100000100.

Можно построить11 двоичный БЧХ-код с кодовыми словами длины \[ n=2^q-1 \] и нечетным минимальным расстоянием \[ d \] , у которого число контрольных символов не больше \[ \displaystyle{q(d-1)\over2} \] .

Первый БЧХ-код, примененный на практике, был \[ (92,127) \] -кодом, исправляющим ошибки кратности до 5, но наиболее широкое распространение получил \[ (231,255) \] -код, обнаруживающий ошибки кратности до 6.

БЧХ-коды умеренной длины не слишком далеки от совершенных или квазисовершенных кодов. Коды Хэмминга, например, являются БЧХ-кодами, а БЧХ-коды с минимальным весом кодового слова 5 - квазисовершенны. Но с ростом длины кодовых слов качество БЧХ-кодов падает. Код Голея, например, - это не код БЧХ.

Упражнение 45 Найти кодирующий многочлен БЧХ-кода \[ g(x) \] с длиной кодовых слов 15 и минимальным расстоянием между кодовыми словами 7. Использовать примитивный многочлен \[ m_1(x)=1+x+x^4 \] с корнем \[ \alpha \] . Проверить, будут ли \[ \alpha^3 \] и \[ \alpha^5 \] корнями соответственно многочленов \[ m_3(x)=1+x+x^2+x^3+x^4 \] и \[ m_5(x)=1+x+x^2 \] .

Циклические избыточные коды

Циклический избыточный код (Cyclical Redundancy Check - CRC) имеет фиксированную длину и используется для обнаружения ошибок. Наибольшее распространения получили коды CRC-16 и CRC-32, имеющие длину 16 и 32 бита соответственно. Код CRC строится по исходному сообщению произвольной длины, т.е. этот код не является блочным в строгом смысле этого слова. Но при каждом конкретном применении этот код - блочный, \[ (m,m+16) \] -код для CRC-16 или \[ (m,m+32) \] -код для CRC-32.

Вычисление значения кода CRC происходит посредством деления многочлена, соответствующего исходному сообщению (полином-сообщение), на фиксированный многочлен (полином-генератор). Остаток от такого деления и есть код CRC, соответствующий исходному сообщению. Для кода CRC-16 полином-генератор имеет степень 16, а для CRC-32 - 32. Полиномы-генераторы подбираются специальным образом и для кодов CRC-16/32 стандартизированы Международным консультативным комитетом по телеграфной и телефонной связи (CCITT). Для CRC-16, например, стандартным является полином-генератор \[ x^{16}+x^{12}+x^5+1 \] .

Пример построения CRC-4 кода для сообщения 11010111, используя полином-генератор \[ x^4+x^3+x^2+1 \] . Исходному сообщению соответствует полином \[ x^7+x^6+x^4+x^2+x+1 \] , т.е. нумерация битов здесь начинается справа.

\[ \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 \]

Полиному \[ x^2+1 \] соответствуют биты 0101 - это и есть CRC-4 код.

Существуют быстрые алгоритмы для расчета CRC-кодов, использующие специальные таблицы, а не деление многочленов с остатком.

CRC-коды способны обнаруживать одиночную ошибку в любой позиции и, кроме того, многочисленные комбинации кратных ошибок, расположенных близко друг от друга. При реальной передаче или хранении информации ошибки обычно группируются на некотором участке, а не распределяются равномерно по всей длине данных. Таким образом, хотя для идеального случая двоичного симметричного канала CRC-коды не имеют никаких теоретических преимуществ по сравнению, например, с простыми контрольными суммами, для реальных систем эти коды являются очень полезными.

Коды CRC используются очень широко: модемами, телекоммуникационными программами, программами архивации и проверки целостности данных и многими другими программными и аппаратными компонентами вычислительных систем.

Упражнение 46 Построить CRC-4 код для сообщений 10000000 и 101111001, используя полином-генератор \[ x^4+1 \] .

< Lecture 10 || Lecture 11 || Lecture 12 >