(x+1)*( x5+x2+1)=
Число информационных символов k=25, а число проверочных символов n=6. И емкость кода С=2к=3.355*107
Итак, мы получили генераторный полином g(x)= x6+x5+x3+x2+x+1, который полностью определяет БЧХ-код, его кодер и декодер (в режиме обнаружения ошибок).
6. Алгоритм работы кодера БЧХ-кода
Выбранный БЧХ-код задается своей разрядностью n и генераторным полиномом g(x), степень которого равна n-k, где k-число информационных символов. Емкость БЧХ-кода C=2k.
Пусть a(X)=a0+a1X+...+ak-1Xk-1 – k-разрядный вектор информационных символов, V(X)=b0+b1X+b2X2+...+bn-1Xn-1 - n-разрядный вектор кода. Кодер преобразует вектор a(X) в вектор V(X), реализует процедуру получения систематического кода т.е.:
V(X)=ak-1Xn-k+ak-2Xn-2+...+a0Xn-k+bn-k-1Xn-k-1+b1X+b0;
Таким образом, в векторе V(X) коэффициенты при старших степенях X-информационные символы, при младших степенях проверочные.
Вектор V(X) для выбранного циклического кода при заданном a(X) получаем следующим образом:
1 шаг: - a(X)*Xn-k
2 шаг: a(X)*Xn-k/ g(x) – получим остаток от деления R(X) (результат деления нас не интересует). Отметим, что степень многочлена R(X) меньше степени многочлена g(x).
3 шаг: - получаем вектор систематического кода как сумму a(X)*Xn-k и R(X), т.е.
V(X)= a(X)*Xn-k + R(X); отметим, что степень многочлена a(X)*Xn-k не меньше n-k, поэтому их сложение это по существу «приписывание» R(X) за a(X)*Xn-k.
x30+x29+x28+ x27+x26+x25+ x24+x23+x22+ x21+x20+x19+ x18+x17+x16+x15+x14+ x13+x12+x11+ x10+x9+x8+ x7+x6 | x6+x5+x3+ x2+x+1 |
x30+x29+x27+ x26+x25+x24 | x24+x22+x21+x19+x18+x14+x7+x5+x4+x3 |
x28+x26+x23+x22+ x21+x20+x19+ x18+x17+x16+x15+x14+ x13+x12+x11+ x10+x9+x8+ x7+x6 x28+x27+x25+ x24+x23+x22 | |
x27+x26+x25+x24+ x21+x20+x19+ x18+x17+x16+x15+x14+ x13+x12+x11+ x10+x9+x8+ x7+x6 x27+x26+x24+ x23+x22+x21 | |
x25+ x23+x22+x20+x19+ x18+x17+x16+x15+x14+ x13+x12+x11+ x10+x9+x8+ x7+x6 x25+x24+x22+x21+x20+x19 | |
x24+x23+x21+x18+x17+x16+x15+x14+ x13+x12+x11+ x10+x9+x8+ x7+x6 | |
x24+x23+x21+x20+x19+x18 | |
x20+x19+ x17+x16+x15+x14+ x13+x12+x11+ x10+x9+x8+ x7+x6 x20+x19+ x17+x16+x15+x14 | |
x13+x12+x11+ x10+x9+x8+ x7+x6 x13+x12+ x10+x9+x8+ x7 | |
x11+x6 x11+x10+x8+ x7+x6+x5 | |
x10+x8+ x7+x5 x10+x9+ x7+x6+x5+x4 | |
x9+x8+x6+x4 x9+x8+x6+x5+x4+x3 | |
x5+x3 |
Получаем остаток от деления равный R(X)= x5+x3 .Таким образом
V(X)=a(X)Xn-k+R(X)= x30+x29+x28+ x27+x26+x25+ x24+x23+x22+ x21+x20+x19+ x18+x17+x16+x15+x14+ x13+x12+x11+ x10+x9+x8+ x7+x6+ x5+x3
При n равном 31 получим n-разрядный вектор кода.
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
xn................................................................................................................................................x0
7 .Кодер систематического циклического кода
Кодер систематического циклического кода реализует следующий алгоритм:
И строится на линейной переключательной схеме одновременного умножения (на Xn-k) и деления (на g(X)) многочленов.
Построим схему кодера для кода, у которого:
n=31, g(x)=x6+x5+x3+x2+x+1
Линейная переключательная схема одновременного умножения a(X) на многочлен b(X)=b6X6+ b5X5+ b4X4+ b3X3+ b2X2+ b1X+b0
и деления на многочлен g(X)= g6X6+ g5X5+ g4X4+ g3X3+ g2X2+ g1 X+g0 приведена ниже. Прямоугольниками на схеме обозначены элементы памяти, кружочками – устройства умножения на константу, записанную в кружочке, кружочками со знаком «+» обозначены сумматоры. Число элементов памяти равно степени равно степени многочленов b(X) и g(X). Цепи сдвига на схеме не показаны.
Все математические операции выполняются в поле GF(2), где –gi=gi,
. А gi=0 или bi=0 соответствует разрыву в схеме, gi=1 или bi=1 соответствует наличию соединения.На вход схемы поступают последовательно во времени все коэффициенты (включая и нулевые) многочлена a(X), начиная со старшей степени.
Общая схема одновременного умножения и деления
Рис. 3
Схема одновременного умножения на b(X)=Xn-k=X31-25=X6 и деления на многочлен g(x)= x6+x5+x3+x2+x+1 имеет вид:
Рис. 3
В этой схеме –g0=-g1=-g2=-g3=1; -g4=0; -g5=1; -g6=1.
Суммирование осуществляется по модулю два.
Блок-схема кодера
Рис. 5
В начале ключ К1 замкнут, а К2 разомкнут.На вход схемы поступают коэффициенты многочлена a(X), начиная со старше степени. Эти символы поступают на выход схемы и в цепь обратной связи (деление). После поступления символа a0 ключ К1 размыкается(обрывается обратная связь схемы деления), ключ К2 замыкается и содержимое регистра(проверочные символы) последовательно во времени передаются на выход. Таким образом на выходе получаем вектор кода V(X).
Функциональная схема, соответствующая блок-схеме (рис. 5), приведена на рис. 6.
На вход схемы подаются сигналы: с прямого (ГИ) и инверсного (
) выхода генератора импульсов, управления (У), информационные символы a(x) последовательно во времени, начиная с a24. Информационные символы синхронизированы с ГИ. Каждая ячейка состоит из двух Д-триггеров и сумматора по модулю 2. На «нижний» Д-триггер информация записывается по переднему фронту ГИ, на «верхний» Д-триггер информация переписывается с «нижнего» Д-триггера по переднему фронту , то есть по заднему фронту ГИ. Схемы «И1» и «Ин1» выполняют функцию ключа К1 (смотрите блок-схему кодера 31,25 БЧХ кода на рис. 3). При поступлении информационных символов с a24 по a0 (первые 25 тактов) Y=1 и обратная связь включена. При этом на выходе инвертора «Ин2» сигнал равен 0, следовательно, на выходе схемы «&2» B=0. Сигналы a24…a0 через схему «ИЛИ» поступают на вход линейного триггера (ЛТ), выход которого – выход кодера. После поступления всех информационных символов (25 тактов), на входе a(x) сигнал, соответствующий логическому «0», на входе «Y» сигнал также соответствует логическому «0». При этом А=0, то есть обратная связь отключена. С выхода шестой ячейки коэффициенты R(x) - остатка от деления a(x)xn-k на g(x), которые к этому времени уже получены, поступают через схему &2 при Ин2=1 на вход ЛТ. С выхода ЛТ получаем проверочные символы – коэффициенты R(x), вслед за информационными. Таким образом, формируем кодовый вектор V(x).Функциональная схема кодера 31,25
Рис. 6
8. Схема обнаружения ошибки
При передаче информации по каналу связи к вектору кода V(x) прибавляется вектор ошибки e(x). Если e(x)=0, ошибки в канале связи не было. При e(x)≠0 в канале связи была ошибка.
Кодовое слово принадлежит коду, если оно делится на g(x). Поэтому принятый кодовый вектор V1(x)=V(x)+e(x) в приемнике делим на g(x). Если V1(x) делится на g(x) без остатка, то V1(x) – вектор кода. В противном случае обнаруживается ошибка.
В нашем случае линейная переключательная схема деления многочлена V(x) на g(x)= x6+x5+x3+x2+x+1 имеет вид: