Техническая реализация циклических кодов
Для умножения и деления многочленов, при реализации кодеров и декодеров циклических кодов, используются регистры сдвига. Для умножения применяются обычные регистры, а для деления на Р(х) – регистры сдвига с обратными связями. При реализации кодеков циклических кодов для построения регистров сдвига с обратными связями используют три правила:
1. Число ячеек регистра сдвига с обратными связями равно степени образующего полинома.
2. Число сумматоров по модулю 2 равно весу образующего полинома минус 1
3. Сумматоры по модулю 2 ставятся перед не нулевыми членами образующего полинома (сумма по модулю 2 старших разрядов делимого и делителя всегда равна нулю – смотри любой пример)
Построение кодера и декодера рассмотрим на примере.
Пример. Циклический код (7,4),d0=3. Р(х)→ х3+х+1. Построить кодер и декодер
Решение. Структурная схема кодера представлена на рисунке 4.11
Вход Р3 Выход
1 2 3
Кл.1
РС
1 х х2 х3
1 2 3
Кл.2
Рис. 4.11
|
|
Схема кодера состоит из регистра задержки и регистра сдвига с обратными связями.
В регистре задержки производится умножение комбинации исходного кода на хr. Число ячеек в РЗ равно степени образующего полинома. У нас r=3 и 3 ячейки в РЗ
В регистре сдвига (РС) обеспечивается деление на образующий полином. Число ячеек РС=3, т.к. r=3; число =2, т.к. r=3 и -1=2; стоят перед х0(1) и х; перед х3 ставить не надо.
Работа схемы происходит следующим образом.
Члены исходного полинома Q(х) простого кода вводятся одновременно в РС и РЗ. При этом Кл.1 замкнут, а Кл.2 разомкнут. Из РС выводится остаток от предыдущего деления. Через r тактов (у нас 3) и РЗ, и РС заполнятся и старший член Q(x) окажется в 3 ячейке и РЗ, и РС.
Далее Кл.1 размыкается, а Кл.2 замыкается, создавая цепь обратной связи. С этого момента (с 4 такта) начинается деление Q(x)* хr на Р(х); и вывод информационной части из РЗ. Через k-тактов (у нас k=4) процесс деления в РС закончится, а из РЗ выйдут все информационные разряды.
После этого Кл.1 замыкается, а Кл.2 размыкается. Из РС остаток за r тактов (r=3)передается так в канал. В то же время и РС и РЗ заполняются новой КК простого кода.
Структурная схема декодера представлена на рис. 4.12
Вход РН Выход
1 2 3 4 5 6 7
1 х х2 х3 DC
1 2 3
PC
Рис.4.12
Декодер состоит из регистра накопителя (РН), регистра сдвига (РС), дешифратора и сумматора по модулю 2, исправляющего ошибки.
В РН число ячеек определяется длиной КК циклического кода.
РС строится аналогично РС в кодере.
ДС настроен на синдром, указывающий на ошибки в 7 разряде (старшем).
Алгоритм исправления ошибок в данном случае (при исправлении однократной ошибки) будет проще, чем рассмотренный ранее.
|
|
Действительно, можно записать:
F(x)= F(x)+E(x), где
F(x)- принятая КК
F(x)- переданная КК
E(x)- полином, вектор ошибок
Если F(x), то Е(х)=0,т.е. ошибок нет. Единица в Е(х) указывает на номер разряда, где произошла ошибка.
Исправление ошибки происходит следующим образом. Пусть после деления принятой КК получился остаток 101 (смотри образующую матрицу в примере- последняя строка), он соответствует ошибке в старшем разряде (7). В этот момент все 7 разрядов КК будут зафиксированы в РН. Со следующим тактом старший разряд КК поступает в сумматор по модулю 2. дешифратор настроен на эту комбинацию (101). Т.е. на его выходе появится 1. Она складывается со старшим разрядом КК и ошибка исправляется.
Если ошибка произошла во втором от старшего разряде, то на первом такте остаток будет 111 и дешифратор не сработает. Однако на втором такте вектор ошибки опять будет таким же, как и на первом такте. Поэтому и остаток будет 101. Сработает дешифратор и ошибка во втором разряде исправляется.
Также происходит и исправление ошибок в других разрядах.
При реализации дешифраторов для исправления многократных ошибок используется алгоритм в 4.13.
Итеративные или матричные коды характеризуются наличием двух или более систем проверок внутри каждой КК.
Принцип построения итеративного кода рассмотрим на примере
Пример запишем КК простого кода, предназначенные для передачи, в виде матрицы:
четность
1 0 1 1 1 0
0 0 1 0 0 1
1 1 1 0 0 1
нечет. 0 1 0 0 1 0
1 1 1 1 0 0
0 0 1 1 1 0
Закодируем каждую строку этой таблицы каким - либо кодом, а затем закодируем (не обязательно этим же кодом) каждый столбец таблицы. Например, строки закодируем кодом с четным числом единиц, а столбцы – с нечетным числом единиц.
Полученная комбинация (вся таблица) есть КК простейшего двухмерного итеративного кода, проверочные разряды которого сосредоточены в правом столбце и нижней строке. Каждый информационный разряд этого кода входит в комбинацию двух кодов – кода с четным числом единиц и кода с нечетным числом единиц.
Передача КК итеративного кода обычно происходит по строкам последовательно от первой строки к последней.
Могут быть образованы и многомерные итеративные коды, систематические и несистематические итеративные коды.
Параметры итеративных кодов определяются:
где ni, ki, d0i,- параметры итеративных кодов
S – кратность итерирования
Поэтому итеративный код из нашего примера имеет d0 =4 и обнаруживает ошибки кратности до 3. Кроме того, этот код обнаруживает все ошибки нечетной кратности.
Метод исправления ошибок следующий. Если не выполняются проверки для i-ой строки и j-го столбца, то элемент, стоящий на пересечении этих строки и столбца, заменяется на обратный.
Итеративные коды исправляют пачки ошибок длиной l+1, где l – длина строки матрицы.
Недостатком является высокая избыточность – 15-20%. Значительно превышает избыточность циклических кодов.
Используются при программной реализации кодирования и декодирования, т.е. в системах ПДС между ЭВМ, если эти ЭВМ обеспечивают повышение верности.