- •Глава3 4
- •Часть 1 введение 4
- •Часть 2 коды хемминга, голея и рида-маллера 39
- •Часть 3 двоичные циклические коды и коды бчх 54
- •Часть 4 недвоичные бчх коды -коды рида-соломона 105
- •Глава3 часть 1 введение
- •1.1. Кодирование для исправления ошибок: Основные положения
- •1.1.1. Блоковые и сверточные коды
- •1.1.2. Хеммингово расстояние, Хемминговы сферы и корректирующая способность
- •1.2. Линейные блоковые коды
- •1.2.1. Порождающая и проверочная матрицы
- •1.2.2. Вес как расстояние
- •1.3. Кодирование и декодирование линейных блоковых кодов
- •1.3.1. Кодирование с помощью матриц g и н
- •1.3.2. Декодирование по стандартной таблице
- •1.3.3. Хемминговы сферы, области декодирования и стандартная таблица
- •1.4. Распределение весов и вероятность ошибки
- •1.4.1. Распределение весов и вероятность необнаруженной ошибки в дск.
- •1.4.2. Границы вероятности ошибки в дск, каналах с абгш и с замираниями
- •1.5 Общая структура жесткого декодера для линейных кодов
- •Часть 2 коды хемминга, голея и рида-маллера
- •2.1. Коды Хемминга
- •2.1.1. Процедуры кодирования и декодирования
- •2.2. Двоичный код Голея
- •2.2.1 Кодирование
- •2.2.2. Декодирование
- •2.2.3. Арифметическое декодирование расширенного (24,12,8) кода Голея.
- •2.3. Двоичные коды Рида-Маллера
- •2.3.1. Булевы полиномы и рм коды
- •2.3.2. Конечные геометрии и мажоритарное декодирование.
- •Часть 3 двоичные циклические коды и коды бчх
- •3.1. Двоичные циклические коды.
- •3.1.1. Порождающий и проверочный полиномы.
- •3.1.2. Порождающий многочлен
- •3.1.3. Кодирование и декодирование двоичных циклических кодов.
- •3.1.4. Проверочный полином.
- •3.1.5. Укороченные циклические коды и crc коды
- •3.2. Общий алгоритм декодирования циклических кодов
- •3.1.5 Пакеты ошибок
- •3.2.1. Арифметика gf(q)
- •3.3. Двоичные коды бчх
- •3.4. Полиномиальные коды
- •3.5. Декодирование двоичных бчх кодов
- •2. Евклидов алгоритм (еа)
- •3.5.1. Общий метод декодирования для бчх кодов
- •3.5.2. Алгоритм Берлекемпа-Мэсси (вма)
- •3.5.3. Декодер pgz
- •3.5.4. Евклидов алгоритм (еа)
- •3.5.5. Метод Ченя и исправление ошибок
- •3.5.6. Исправление стираний и ошибок
- •3.6. Распределение весов и границы вероятности ошибки
- •3.6.1. Оценка вероятности ошибки
- •Часть 4 недвоичные бчх коды -коды рида-соломона
- •4.1. Коды pc как полиномиальные коды
- •4.2. От двоичных кодов бчх к pc кодам
- •4.3. Декодирование кодов pc
- •4.3.1. Комментарий к алгоритмам декодирования
- •4.3.2. Исправление ошибок и стираний
- •4.4. Распределение весов
- •Глоссарий
- •Литература
3.1.3. Кодирование и декодирование двоичных циклических кодов.
Размерность двоичного циклического (n, k) кода равна
где deg[.] есть степень аргумента. Так как циклический код С является линейным кодом, то любое множество k линейно независимых векторов (кодовых слов) может быть выбрано в качестве порождающей матрицы кода. В частности, двоичные векторы, ассоциированные с многочленами g(x), xg(x), ..., хk-1g(x), линейно независимы. Эти векторы могут быть использованы в качестве строк порождающей матрицы кода С. В этом случае реализуется несистематическое кодирование. Другими словами, сообщение не появляется в неизмененном виде на каких-либо позициях кодового слова.
Пример 21. Рассмотрим циклический (7,4,3) код Хемминга с порождающим полиномом g(x) = х3 + х+1 (1101). Порождающая матрица этого кода имеет вид:
где первый столбец соответствует x0 степени, а последний x6 степени.
В другом варианте проверочная часть порождающей матрицы циклического кода может быть построена с помощью следующих полиномов:
С их помощью реализуется систематическое кодирование, показанное в примере ниже.
Пример 22. Пусть С циклический (7,4,3) код Хемминга с порождающим многочленом g(x) = х3 + х + 1. Тогда имеем (делим x6 на (x3+x+1) получаем (x3-x-1) и остаток x2+1 с учётом того, что сложение идёт по модулю 2 ):
Следовательно, систематическая порождающая матрица кода С имеет вид:
(первый столбец соответствует степени х6, а последний x0)
Пусть и(х) представляет кодируемое сообщение. Кодирование циклического кода может быть систематическим или несистематическим в зависимости от того, что именно делается с сообщением:
• Несистематическое кодирование
(3.3)
Для кода С(7, 4, 3) с порождающим полиномом g(x) = х3 + х + 1 найдём кодовое слово v(x), соответствующее информационной посылке u(1,0,1,0), т.е.u(x) = 1 + x2. Найдём v(x) используя выражение(3.3) v(x)=u(x)g(x)=1+x+x2+x5 , что соответствует кодовому слову v(1,1,1,0,0,1,0). Этот же результат можно получить, воспользовавшись матрицей G из примера 21.
• Систематическое кодирование
(3.4)
Для кода С(7, 4, 3) с порождающим полиномом g(x) = х3 + х + 1 найдём с помощью выражения (3.4) кодовое слово v(x) соответствующее информационной посылкой u(0,1,0,1), т.е. u(x) = x2 +1, тогда v(x)=x3u(x) + x3u(x)mod(g(x))= x5+x3+x2, что соответствует кодовому слову v(0,1,0,1,1,0,0). Этот же результат можно получить, воспользовавшись матрицей G из примера 22.
3.1.4. Проверочный полином.
Полином h(x), который может быть ассоциирован с проверочной матрицей циклического кода, называется проверочным полиномом. Порождающий и проверочный полиномы связаны следующим соотношением
g(x)h(x)=xn+1 (3.5)
Если известен порождающий полином, то проверочный полином легко вычисляется как h(х)= (хn + 1) /g(x) = h0 + h1x + ... +hk xk. Проверочную матрицу кода С легко построить, используя в качестве строк п-k-1 циклических сдвигов проверочного полинома,
(3.6)
Теперь рассмотрим схемную реализацию деления двоичных многочленов в общем случае. Пусть заданы: делимое степени m
f(X) = f0 + f1X + f2X2 + … + fmXm (3.57)
и делитель степени r, причем, r < m
. (3.58)
В результате деления мы должны получить разложение
f(X) = а(Х)(Х) + b(Х) (3.59)
с сомножителем а(Х) степени т — r и остатком b(Х) со степенью, на превышающей r — 1.
Схема деления многочленов общего вида представлена на рис. 3.6.
Сначала регистр сдвига полностью загружается старшими разрядами делимого. Ключ S1 включен, а переключатель S2 находится в верхнем положении. Далее начинается сам процесс деления. В первом такте производится сдвиг содержимого регистра на один разряд вправо. Так как fт = 1, эта единица, в соответствии с коэффициентом двигателя (Х), суммируется с аналогичными разрядами делимого. В результате, мы получаем укороченный многочлен
(3.60)
со степенью
. (3.61)
Эта же единица заносится в регистр формирования а(Х) при замкнутом переключателе S2 и в дальнейшем не меняется.
На последующих l = т - r тактах алгоритм деления остается таким же. Так, если степень укороченного многочлена (X) в (3.60), равная k1 (3.61), остается большей и равной r, то с помощью цепи обратной связи производится укорочение теперь уже многочлена из (3.60).
(3.62)
со степенью
. (3.63)
Таким образом, после l = т — r тактов мы получаем разложение (3.59), причем, в регистре делимого находится остаток от деления b(Х). После этого, ключ S1 размыкается, переключатель S2 переводится в нижнее положение и на следующих r тактах остаток b(Х) заносится в регистр формирователя остатка.
Пример 23. Циклический (7,4,3) код Хемминга с порождающим многочленом g(x)=x3+x+1 имеет проверочный многочлен h(x) = (х7 + 1)/(х3+x+1) = x4 +x2+x + 1. Проверочная матрица этого кода имеет, например, следующий вид:
Так же как и для линейных кодов, систематическое кодирование циклического кода можно реализовать как решение уравнения
Рассмотрим следующее правило систематического кодирования. Предположим, что код имеет скорость k/п ≤ 0,5. Пусть сообщение представлено многочленом и(х) = u0 + u1x +… + иk-1хk-1, степень которого меньше k. Пусть v(x) кодовое слово кода С, соответствующее информационному многочлену и(х). На первом шаге vl = иl l = 0, 1, ..., k - 1.
Из циклической природы этого кода следует, что проверочные символы кода vl, l = к, к+1,..., п - 1, могут быть вычислены рекурсивно с помощью проверочного уравнения
(3.7)
Рис. 17. Устройство систематического кодирования делением на g(х).
где h(l-k),j есть j-ый элемент (l - к)-ой строки матрицы (3.6).
В случае высокой скорости кода, к/п > 0,5, кодирование с помощью деления хn-kки(х) на порождающий полином эффективнее. В любом случае, кодовое слово получается в систематической форме, k первых символов которого совпадают с символами сообщения, а последние п-к являются проверочными символами.
На Рисунке 17 показана структурная схема кодера двоичного кода с порождающим полиномом g(x). Первые k тактов переключатель (правая нижняя часть схемы) находится в положении 1, а информационные символы передаются в канал связи и одновременно вводятся в схему умножения на хn-k и деления на порождающий многочлен g(x). За эти k тактов в регистре сдвига вычисляется остаток от деления, после чего переключатель переводится в положение 2 и содержимое регистра передается в канал.
Дуальные циклические коды и последовательности максимальной длины
По аналогии с линейными кодами, дуальным кодом циклического кода С, порождаемого полиномом g(x), является циклический код С┴, порождаемый полиномом h(х). Важный класс циклических кодов, словами которого являются все сдвиги последовательности максимальной длины (MLS), дуален циклическому коду Хемминга. Множество сдвигов MLS является (2т – 1, m, 2m-1) циклическим кодом, который порождается полиномом g(x)=(xn - 1 )/p(x), где р(х) примитивный полином. В дальнейшем этот код будем называть MLS-код.