Декодирование циклических кодов

Для обнаружения и исправления ошибок принятая комбинация делится на образующий многочлен g(х). Если остаток R(х) = 0, значит, комбинация принята без ошибок. Наличие остатка свидетельствует о том, что комбинация принята искаженной. Значение остатка совпадет с одним из опознавателей матрицы Н, который и укажет на местоположение ошибки по вектору ошибок.

1011

1011

1011

011 - ошибка в четвертом разряде

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

1011

1011

1011

1011

010 - ошибка во 2-м контрольном разряде

Существует более общий алгоритм обнаружения и исправления ошибок:

1. Принятая комбинация делится на образующий многочлен g(x). Если остаток R(x)<>0 то определяется вес остатка w. Если вес остатка равен или меньше числа исправляемых ошибок t (w<=t), то принятую комбинацию складывают по модулю 2 с остатком и получают исправленную комбинацию.

2. Если w>t, то производится циклический сдвиг на один символ влево и полученная после такого сдвига комбинация снова делится на образующий многочлен. Если вес полученного остатка w<=t, то циклически сдвинутую комбинацию складывают с остатком и затем после сложения циклически сдвигают в обратную сторону вправо на один символ (возвращают на прежнее место). В результате получаем исправленную комбинацию.

3. Если после циклического сдвига на один символ по прежнему w>t, то производят дополнительные циклические сдвиги влево. При этом после каждого сдвига осуществляется деление сдвинутой комбинации на g(x) и проверяется вес остатка. При w<=t сдвинутую комбинацию складывают с остатком и производят обратных циклических сдвигов вправо столько, сколько было сделано влево.

Пример 5.7. Необходимо проверить принятый код 1101110, для g(x)=1011 и t=1.

1. Принятый код 1101110 делим на g(x), находим остаток R(x)=111, w=3

2. Код 1101110 сдвигаем влево на один разряд, получаем 1011101. Делим на образующий многочлен g(x). Находим остаток R(x)=101, вес w=2

3. Снова производим сдвиг влево, получаем 0111011. Делим на g(x). Остаток R(x)=001. w=1

4. Складываем сдвинутую комбинацию с остатком 0111011+001=0111010

5. Производим два циклических сдвига вправо

0111010 -> 0011101 ->1001110

В результате получили исправленную комбинацию.

Аппаратурная реализация циклических кодов

Циклические коды реализуются с помощью сдвиговых регистров. Схема кодирования (образуется с помощью деления на образующий многочлен):

Рис. 5.7. Схема кодирования

Ключи к1 и к2 первоначально замкнуты, а ключ к3 – разомкнут. Исходная комбинация через ключ к1 поступает на выход и через входной сумматор на сдвиговый регистр, где и образуется контрольные символы. Затем ключ к2 замыкается, а к1 и к3 размыкаются. Контрольные символы подаются на выход в след, за информационными символами.

Рис.5.8. Схема кодирования методом деления на образующий многочлен g(x)=x3+x+1

Вх 1 2 3

1 1 1 0

1 1 0 1

0 1 0 0

1 1 0 0

Пример 5.8. Пусть на вход подается комбинация 1101. Последовательность деления представлена в таблице. В результате на выходе будет получена комбинация 1101001

Пример 5.9. Пусть на вход подается комбинация 1001. В результате деления будет получена комбинация 1001011

Вх 1 2 3

1 1 1 0

1 1 0 1

0 1 0 0

1 1 0 0

Схема декодирования (образуется с помощью деления на образующий многочлен):

Рис.5.9. Схема декодирования циклического кода. АО - анализатор ошибок.

Исходная комбинация подается в буферный регистр и одновременно через ключ в декодирующий регистр. Если с приходом последнего символа, зафиксирован нулевой остаток, то ошибок нет, и, если не нулевой, то есть ошибка. Принятая комбинация подается через выходной сумматор, и искаженный сигнал исправляется анализатором ошибок (АО).

Рис.5.10. Пример схемы декодирования методом деления на полином

Пример 5.10. Пусть декодирующий регистр построен методом деления на образующий полином.

Пусть на вход подается комбинация 1101001

Вх 1 2 3

1 1 0 0

1 1 1 0

0 0 1 1

1 0 1 1

0 1 1 1

0 1 0 1

1 0 0 0

В результате деления получился нулевой остаток, следовательно, ошибок нет.

Теперь пусть на вход подается комбинация с ошибкой 1100001

Вх 1 2 3

1 1 0 0

1 1 1 0

0 0 1 1

0 1 1 1

0 1 0 1

0 1 0 0

1 1 1 0

В результате получился не нулевой остаток 110. Отключим ключ и начнем выводить комбинацию из буферного регистра. На четвертом такте

№ 1 2 3

--- 1 1 0

1 0 1 1

2 1 1 1

3 1 0 1

4 1 0 0

анализатор ошибок подаст на выходной сумматор сигнал исправления. Ошибка будет исправлена.

Для исправления многократных ошибок используется произведение образующих многочленов:

Таблица 5.3. Неприводимые полиномы

   
g(x) полином g(x) полином
g(x) x+1 g1(x6) x6+x+1
g(x2) x2+x+1 g2(x6) x6+x3+1
g1(x3) x3+x1+1 g3(x6) x6+x5+1
g2(x3) x3+x2+1 …………… ……………
g1(x4) x4+x+1 g1(x7) x7+x+1
g2(x4) x4+x3+1 g2(x7) x7+x3+1
g3(x4) x4+x3+x2+x+1 g3(x7) x7+x3+x2+x+1
g1(x5) x5+x2+1 …………… ……………
g2(x5) x5+x3+1 g1(x8) x8+x4+x3+x+1
g3(x5) x5+x3+x4+x+1 g2(x8) x8+x4+x3+x2+1
g4(x5) x5+x4+x2+x+1 …………… ……………
g5(x5) x5+x4+x3+x+1 g1(x9) x9+ x+1
g6(x5) x5+x4+x3+x2+1 g2(x9) x9+x4+ 1

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: