Кодовая комбинация циклического кода содержит ошибку если

Схема
циклического кода

Кратко
рассмотрим построение структурной
схемы циклического кодера. В дальнейшем
это будет необходимо для понимания
декодирования ЦК. Определим принципы
построения кодирующего устройства.

  1. Кодирующее
    устройство строится в соответствии с
    видом образующего полинома и в основе
    своей представляет собой регистр сдвига
    с обратными связями через сумматоры
    по модулю два.

  2. Количество ячеек
    памяти в регистре равно степени
    образующего полинома.

  3. Количество
    сумматоров по модулю два равно весу
    образующего полинома минус единица.

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

Структурная схема
кодирующего устройства для кода (9,5) и
образующего полинома P(x)=
x4
+ x
+ 1, построенная в соответствии с
вышесказанным, приведена на рисунке.

В представленной
схеме кодера имеется 4 триггера: m1,
m2,
m3
и m4,
в качестве ячеек памяти, 2 сумматора по
модулю два: C1 и C2, два ключа, представленных
в виде схем И1 и И2, и элемент ИЛИ. Схема
тактируемая.

Схема кодера
работает следующим образом.

Безизбыточный код
поступает на сумматор C2, после чего
происходит деление на образующий
полином, что реализуется с помощью
обратных связей через схему И1. Пока
поступает информационная кодовая
комбинация G(x), то есть в нашем примере
— с 1го по 5й такты, схема И1 открыта, а
схема И2 закрыта вследствие чего
информационные элементы поступают на
выход кодера. После k тактов, где k —
количество информационных разрядов,
ключ И1 размыкается, а ключ И2 замыкается
и с регистра сдвига на выход кодера
считывается остаток от деления R(x). В
последующие такты с 6го по 9й через схему
И2 остаток от деления выводится в линию
связи. Состояние триггеров на каждом
такте работы схемы представлено в
таблице.

Подробнее описание
работы устройства кодирования приведено
в приложении.

Циклические коды
с
d=4.

Циклические коды
с
d
5.
Эти коды, разработанные Боузом, Чоудхури
и
Хоквинхемом (сокращенно код БЧХ),
позволяют обнаруживать и исправлять
любое число
ошибок. Заданными при кодировании
является число исправляе­мых ошибок
s
и длина слова
n. Число
информационных символов k
и кон­трольных
символов r,
а также состав контрольных символов
подлежат опреде­лению.

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

Идея
обна­ружения ошибок в принятом
циклическом коде заключается в том, что
при от­сутствии ошибок закодированная
комбинация
F(X)
делится на образующий многочлен
P(X)
без остатка. При этом контрольные разряды
m
отбрасывают­ся, а информационные
разряды
k
принимаются. Если происходит искажение
принятой комбинации, то на входе декодера
образуется комбинация:

F
*(X) =
F(X)
+
E(X),

где
E
(X)
— многочлен ошибок.

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

Если же в результате
деления полинома F*(X)
на порождающий многочлен Р(х) остаток
R(х)
отличен от нуля, то это означает что
принятая кодовая комбинация содержит
ошибки.

Вид ненулевого
остатка R(x),
называемого синдромом ошибки S(х), имеет
однозначное соответствие с ошибочным
разрядом и видом полинома однократной
ошибки Е(х) для всех кодовых комбинаций
циклического кода. Например, для
циклического кода (9,5) при заданном
образующем полиноме P(x)=
x4
+ x
+ 1 остаток R(x)
всегда будет иметь вид S(х)=0011, если
ошибка происходит в пятом разряде
входной кодовой комбинации, независимо
от вида переданной кодовой комбинации
F(х).

Принята
комбинация кода (7,4)
F
(X)
= 1101001, закодированная с помощью
циклического кода представленного в
виде двоичной комбинации 1011. Если она
принята правильно, то де­ление на P(X)
дает остаток, равный нулю. Если же
комбинация принята как F*(X)
= 1101011, то при делении на P(X)
образуется остаток
R(X)
= 010, что свидетельствует об ошибке, и
принятая комбинация бракуется.

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

Для исправления
однократной ошибки в принятой кодовой
комбинации F*(X)
необходимо определить место ошибки. С
этой целью производится деление принятого
полинома на порождающий многочлен Р(х).
Для примера рассмотрим код (9,5). Если на
9-ом такте в декодере будет зафиксирована
хотя бы одна единица, то деление происходит
до тех пор, пока в делителе не будет
зафиксирована так называемая “особая”
кодовая комбинация Т. Вид этой комбинации
зависит только от вида порождающего
многочлена Р(х) и длины n комбинации
циклического кода F(х), причем находится
Т как остаток от деления хn
на P(x).
В нашем примере, для кода (9,5) и порождающего
многочлена Р(х)=х4+х+1
“особая” кодовая комбинация, всегда
имеет вид 1010.


Номер такта, на
котором в делителе возникает “особая”
кодовая комбинация, указывает место
ошибочного разряда в принятой кодовой
комбинации. При считывании этой комбинации
из буферного регистра ошибочный разряд
исправляется (инвертируется).

Циклический код
(9,5) гарантированно исправляет только
однократные ошибки. Ошибки более высокой
кратности код (9,5) не исправляет.

Рассмотрим
пример декодирования циклического кода
P(x)=x3+x+1.

Вначале
строится структурная схема декодера.
Для кода P(x)=x3+x+1
она выглядит следующим образом:

Структурная
схема декодера строится по тем же
принципам, что и схема кодера. В состав
декодера циклического кода (7,4) входят:
буферный регистр на 7 разрядов, декодирующий
регистр (регистр-делитель), схема ИЛИ–НЕ,
схема И, а также – управляющее устройство,
замыкающее ключ К1 после 7-го такта (на
схеме устройство не показано). На вход
декодирующего регистра поступает
кодовая комбинация, которая делится на
порождающий полином в декодирующем
регистре. По окончании деления, после
7 тактов, в триггерах m1m3
декодирующего регистра записывается
остаток от деления. Если при этом хотя
бы один из триггеров m1m3
находится в единичном состоянии, то это
означает, что в принятой кодовой
комбинации имеется ошибка. Для обнаружения
места ошибки деление происходит далее
и на каждом такте разряды с выходов
триггеров m1m3
поступают на вход схемы ИЛИ–НЕ. На
выходе этой схемы формируется нулевой
разряд, который при замкнутом ключе К1
поступает на второй вход схемы И. На
первый вход схемы И поступает кодовая
комбинация из буферного регистра. Под
действием нулевого разряда с выхода
схемы ИЛИ-НЕ схема И запирается и кодовая
комбинация не поступает из буферного
регистра на выход схемы декодера.

Если
все триггеры m1m3
декодирующего регистра имеют значение
«0» после 7-го такта, то дальнейшее деление
не происходит. Тогда схема И пропускает
на выход декодера безошибочно принятую
кодовую комбинацию из буферного
регистра, причем потребителю направляются
первые четыре разряда, составляющих
информационную кодовую комбинацию
G(х).

На
основании построенной схемы декодера
строится таблица состояния триггеров
или как ее еще называют таблица
декодирования. Слева записывается
комбинация, которую требуется проверить
F*(X),
она может быть как верной, так и ошибочной,
поэтому записываю ее со звездочкой. При
этом, С=m3пр,
m1=C+a,
m2=C+m1пр,
m3=m2пр
(определяется из схемы декодера) Если
при декодировании m3=0,
m2=0,
m1=0
(старшим считается разряд m3),
то ошибок в принятой комбинации нет.
Если при декодировании обнаружен
синдром, то происходит дальнейшее
декодирование для определения разряда,
в котором есть ошибка, путем поиска
особой комбинации (посчитать особую
комбинацию 001). Номер такта, при котором
обнаружена такая комбинация будет
разрядом, в котором есть ошибка.

Пример
1.

Дано:
P(x)=x3+x+1.
На приемник приходит комбинация 1101001.

Задача:
проверить, верна ли комбинация, если
нет, исправить.

a

m1

m2

m3

c

0

0

0

1

1

0

0

0

1

1

1

0

0

0

0

1

1

0

1

0

1

1

1

0

1

1

1

1

0

1

0

1

1

1

0

0

0

1

Ответ:
Кодовая комбинация передана без ошибок.

Пример
2.

Дано:
P(x)=x3+x+1.
На приемник приходит комбинация 1110011.

Задача:
проверить, верна ли комбинация, если
нет, исправить.

a

m1

m2

m3

c

0

0

0

1

1

0

0

0

1

1

1

0

0

1

1

1

1

0

0

1

0

1

1

0

1

0

0

1

1

1

1

0

0

1

1

1

1

0

0

1

0

1

1

0

1

0

0

1

Ответ:
Ошибка во втором разряде. Верная кодовая
комбинация 1010011

Рассмотрим
еще один пример декодирования циклических
кодов. Он
заключается в следующем. Принятую
кодовую комбинацию делят на P(X),
и если остаток R(X)=0,
то комбинация принята без искажений.
Наличие ос­татка свидетельствует о
том, что комбинация принята искаженной.
Рассмотрим дальнейшую процедуру
исправления.

  1. Если
    вес остатка равен или меньше количества
    исправляемых ошибок, т.е.
    w<s,
    то принятую комбинацию суммируют по
    модулю 2 с остатком, в результате чего
    образуется исправленная комбинация;

  2. Если
    вес остатка больше количества исправляемых
    ошибок, т.е.
    w
    >
    s,
    то производят циклический сдвиг
    комбинации на один разряд влево и
    образованную в результате сдвига
    комбинацию снова де­лят на P(X).
    Если вес остатка, образованного при
    делении меньше ли равен количеству
    исправляемых ошибок, то циклически
    сдвинутую комбинацию суммируют по
    модулю два с остатком и затем циклически
    сдвигают ее в обрат­ную сторону, т.е.
    вправо на один разряд. В результате
    чего имеем исправленную комбинацию;

3)
Если
после циклического сдвига на один разряд
вес остатка по-прежнему
больше
количества исправляемых ошибок,
производят дальнейшие цик­лические
сдвиги влево. При этом после каждого
сдвига образованную комбина­цию делят
на P(X)
и проверяют вес остатка. При
w
<
s
реализуют действия, указанные в пункте
2, с той лишь разницей, что обратных
циклических сдви­гов вправо производят
столько, сколько сдвигов производили
влево.

Пример
2.14.

Пусть исходная комбинация
G(X)
= 1001, закодированная с помощью P(X)
= 1011 и
s=1,
имеет вид
F(X)
= 1001110. При передаче происходит ошибка
и в приемник комбинация поступает в
виде
F
*(X)
= 1101110. Проверить наличие ошибки и, если
она существует, исправить ее.

Задача.
В приемник поступает комбинация 1101110.
Образующий полином задан в виде двоичной
комбинации 1011. Количество исправляемых
ошибок
S=1.
Проверить наличие ошибки и, если она
существует, исправить ее. Для проверки
использовать оба метода.

Делим
комбинацию 1101110 на 1011 и находим, что
остаток
R(
X
)
= 111. Так как
w
= 3 >
s
= 1, то сдвигаем комбинацию 1101110 циклически
на один разряд влево — 1011101. В результате
деления этой комбинации на P(X)
находим остаток R(X)
= 101. Вес этого остатка
w
= 2 >
s
= 1. Осуществляем новый циклический сдвиг
влево — 0111011. Деление на P(X)
дает остаток R(X)=001,
вес которого равен
s.
Суммируем: 0111011+001 =0111010. Теперь производим
два циклических сдвига по­следней
комбинации вправо: после первого она
принимает вид 0011101, после второго 1001110,
т.е. в результате есть исправленная
комбинация. Проверка по­казывает, что
эта комбинация делится на P(X)
без остатка.

1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

От
СПДС обычно требуется не только передавать сообщения с заданной скоростью
передачи информации, но и обеспечивать при этом требуемую достоверность.

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

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

В
общей структурной схеме СПДС задачу защиты от ошибок выполняет кодер и
декодер канала, который иногда называют УЗО.

5.1
Понятие о корректирующих кодах

Пусть
имеется источник сообщений с объемом алфавита К.

Поставим
в соответствие каждому сообщению n — элементную двоичную последовательность.
Всего последовательностей из n — элементов может быть .

Если
,
то все последовательности (или кодовые комбинации) будут использоваться
для кодирования сообщений, т.е. будут разрешенными.

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

Для
того, что бы код мог обнаруживать и исправлять ошибки необходимо выполнение
условия ,
при этом неиспользуемые для передачи комбинации (N0-K) называют
запрещенными.

Появление
ошибки в кодовой комбинации будет обнаружено, если передаваемая разрешенная
комбинация перейдет в одну из запрещенных.

Расстояние
Хемминга
– характеризует степень различия кодовых комбинаций и определяется
числом несовпадающих в них разрядов.

Перебрав
все возможные пары разрешенных комбинаций рассматриваемого кода можно
найти минимальное расстояние Хемминга d0.

Минимальное
расстояние d0 — называется кодовым расстоянием

Кодовое
расстояние определяет способность кода обнаруживать и исправлять ошибки.

У
простого кода d0=1 – он не обнаруживает и не исправляет ошибки.
Так как любая ошибка переводит одну разрешенную комбинацию в другую.

В
общем случае справедливы следующие соотношения


– для обнаруживающей способности


– для исправляющей способности

Линейные
коды.

Двоичный
блочный код является линейным если сумма по модулю 2 двух кодовых слов
является также кодовым словом.

Линейные
коды также называют групповыми.

Введем
понятия группы.

Множество
элементов с определенной на нем групповой операцией называется группой,
если выполняется следующие условия:

1.
Замкнутость gig
j= gk G
в результате операции с двумя элементами группы получается третий, так
же принадлежащий этой группе.
2. Ассоциативность
(сочетательность) (gigj)

gk = gi
(gj gk)
3. Наличие нейтрального
элемента gj
e = gj
4. Наличие
обратного элемента. gi
(gi)-1= e

Если
выполняется условие gi
gj = gj
gi, то группа называется коммутативной.

Множество
кодовых комбинаций n-элементного кода является замкнутой группой с заданной
групповой операцией сложение по модулю 2.

Поэтому
используя свойство замкнутости относительно операции 2,
множество всех элементов можно задать не перечислением всех элементов,
а производящей матрицей.

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

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

5.2
ЦИКЛИЧЕСКИЕ КОДЫ

Широкое
распространение на практике получил класс линейных кодов, которые называются
циклическими. Данное название происходит от основного свойства этих кодов:

если
некоторая кодовая комбинация принадлежит циклическому коду, то комбинация
полученная циклической перестановкой исходной комбинации (циклическим
сдвигом), также принадлежит данному коду.

.

Вторым
свойством всех разрешенных комбинаций циклических кодов является их делимость
без остатка на некоторый выбранный полином, называемый производящим.

Синдромом
ошибки в этих кодах является наличие остатка от деления принятой кодовой
комбинации на производящий полином.

Эти
свойства используются при построении кодов, кодирующих и декодирующих
устройств, а также при обнаружении и исправлении ошибок.

Представление
кодовой комбинации в виде многочлена.

Описание
циклических кодов и их построение удобно проводить с помощью многочленов
(или полиномов).

В
теории циклических кодов кодовые комбинации обычно представляются в виде
полинома. Так, n-элементную кодовую комбинацию можно описать полиномом
(n-1) степени, в виде

.

где
={0,1},
причем =
0 соответствуют нулевым элементам комбинации, а =
1 — ненулевым.

Запишем
полиномы для конкретных 4-элементных комбинаций

Действия
над многочленами.

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

,

поскольку
.

Следует
отметить, что действия над коэффициентами полинома (сложение и умножение)
производятся по модулю 2.

Рассмотрим
операцию деления на следующем примере:

Деление
выполняется, как обычно, только вычитание заменяется суммированием по
модулю два.

Отметим,
что запись кодовой комбинации в виде многочлена, не всегда определяет
длину кодовой комбинации. Например, при n = 5, многочлену
соответствует кодовая комбинация 00011.

Алгоритм
получения разрешенной кодовой комбинации циклического кода из комбинации
простого кода

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

Требуется
определить разрешенную кодовую комбинацию циклического кода (n, k).

  1. Умножаем многочлен
    исходной кодовой комбинации на
  2. Определяем проверочные
    разряды, дополняющие исходную информационную комбинацию до разрешенной,
    как остаток от деления полученного в предыдущем пункте произведения
    на образующий полином
  3. Окончательно разрешенная
    кодовая комбинация циклического кода определится так

Для
обнаружения ошибок в принятой кодовой комбинации достаточно поделить ее
на производящий полином. Если принятая комбинация — разрешенная, то остаток
от деления будет нулевым. Ненулевой остаток свидетельствует о том, что
принятая комбинация содержит ошибки. По виду остатка (синдрома) можно
в некоторых случаях также сделать вывод о характере ошибки, ее местоположении
и исправить ошибку.

Формирование
базиса (производящей матрицы) циклического кода

Формирование базиса
циклического кода возможно как минимум двумя путями.

Вариант первый.

  1. Составить единичную
    матрицу для простого исходного кода.
  2. Определить для
    каждой кодовой комбинации исходного кода группу проверочных элементов
    и дописать их в соответствующие строки матрицы.

Полученная
матрица и будет базисом циклического кода. Причем, в данном случае, разрешенные
комбинации заведомо разделимы (т.е. информационные и проверочные элементы
однозначно определены).

Вариант второй.

  1. Дописать слева
    от КК, соответствующей образующему полиному циклического кода нули так,
    чтобы длина разрешенной кодовой комбинации равнялась n.
  2. Получить остальные
    разрешенные кодовые КК базиса, используя циклический сдвиг исходной.
    (В базисе должно быть k – строк)

В
данном случае код будет неразделимым.

Получив
базис ЦК, можно получить все разрешенные комбинации, проводя сложение
по модулю 2 кодовых комбинаций базиса в различных сочетаниях и плюс НУЛЕВАЯ.

Циклические
коды достаточно просты в реализации, обладают высокой корректирующей способностью
(способностью исправлять и обнаруживать ошибки) и поэтому рекомендованы
МСЭ-Т для применения в аппаратуре ПД. Согласно рекомендации V.41 в системах
ПД с ОС рекомендуется применять код с производящим полиномом

Построение
кодера циклического кода

Рассмотрим
код (9,5) образованный полиномом

.

Разрешенная
комбинация циклического кода
образуется из комбинации простого (исходного) кода путем умножения ее
на
и прибавления остатка R(x) от деления на
образующий полином.

  1. Умножение полинома
    на одночлен

эквивалентно добавлению
к двоичной последовательности соответствующей G(x) , r — нулей справа.

Пусть

тогда

Для
реализации операции добавления нулей используется r-разрядный регистр
задержки.

  1. Рассмотрим более
    подробно операцию деления:

Как
видим из примера, процедура деления одного двоичного числа на другое сводится
к последовательному сложению по mod2 делителя [10011] с
соответствующими членами делимого [10101], затем с двоичным числом, полученным
в результате первого сложения, далее с результатом второго сложения и
т.д., пока число членов результирующего двоичного числа не станет меньше
числа членов делителя.

Это
двоичное число и будет остатком .

Построение
формирователя остатка циклического кода

Структура
устройства осуществляющего деление на полином полностью определяется видом
этого полинома. Существуют правила позволяющие провести построение однозначно.

Сформулируем
правила построения ФПГ.

  1. Число ячеек памяти
    равно степени образующего полинома r.
  2. Число сумматоров
    на единицу меньше веса кодирующей комбинации образующего полинома.
  3. Место установки
    сумматоров определяется видом образующего полинома.

Сумматоры
ставят после каждой ячейки памяти, (начиная с нулевой) для которой существует
НЕнулевой член полинома. Не ставят после ячейки для которой в полиноме
нет соответствующего члена и после ячейки старшего разряда.

4.
В цепь обратной связи необходимо поставить ключ, обеспечивающий правильный
ввод исходных элементов и вывод результатов деления.

Структурная
схема кодера циклического кода (9,5)

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

Рассмотрим
работу этой схемы

1.
На первом этапе К1– замкнут К2 – разомкнут. Идет
одновременное заполнение регистров задержки и сдвига информ. элементами
(старший вперед!) и через 4 такта старший разряд в ячейке №4

2.
Во время пятого такта К2 – замыкается а К1 – размыкается
с этого момента в ФПГ формируется остаток. Одновременно из РЗ на выход
выталкивается задержание информационные разряды.

За
5 тактов (с 5 по 9 включительно) в линию уйдут все 5-информационных элемента.
К этому времени в ФПГ сформируется остаток

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

4.
Одновременно идет заполнение регистров новой комбинацией.

Второй
вариант построения кодера ЦК.

Рассмотренный
выше кодер очень наглядно отражает процесс деления двоичных чисел. Однако
можно построить кодер содержащий меньшее число элементов т.е. более экономичный.

Устройство
деления на производящий полином
можно реализовать в следующем виде:

За
пять тактов в ячейках будет сформирован такой же остаток от деления, что
и в рассмотренном выше Формирователе проверочной группы. (ФПГ).

За
эти же 5 тактов информационные разряды, выданные сразу на модулятор.

Далее
в след за информационными уходят проверочные из ячеек устройств деления.

Но
важно отключить обратную связь на момент вывода проверенных элементов,
иначе они исказятся.

Окончательно
структурная схема экономичного кодера выглядит так.


На первом такте Кл.1 и Кл.3 замкнуты, информационные элементы проходят
на выход кодера и одновременно формируются проверочные элементы.


После того, как в линию уйдет пятый информационный элемент, в устройстве
деления сформируются проверочные;


на шестом такте ключи 1 и 3 размыкаются (разрываются обратная связь),
а ключ 2 замыкается и в линию уходят проверочные разряды.

Ячейки
при этом заполняются нулями и схема возвращается в исходное состояние.

Определение
ошибочного разряда в ЦК.

Пусть
А(х)-многочлен соответствующий переданной кодовой комбинации.

Н(х)-
многочлен соответствующей принятой кодовой комбинацией.

Тогда
сложение данных многочленов по модулю два даст многочлен ошибки.

E(x)=A(x)

H(x)

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

Остаток
– полученный от деления принятого многочлена H(x) на производящей Pr(x)
равен остатку полученному при делении соответствующего многочлена ошибок
E(x) на Pr(x)

При
этом ошибке в каждом разряде будет соответствовать свой остаток R(x) (он
же синдром), а значит, получив синдром можно однозначно определить место
ошибочного разряда.

Алгоритм
определения ошибки.

Пусть
имеем n-элементные комбинации (n = k + r) тогда:

1.
Получаем остаток от деления Е(х) соответствующего ошибке в старшем разряде
[1000000000], на образующей поленом Pr(x)

2.
Делим полученный полином Н(х) на Pr(x) и получаем текущий остаток
R(x).

3.
Сравниваем R0(x) и R(x).


Если они равны, то ошибка произошла в старшем разряде.


Если «нет», то увеличиваем степень принятого полинома на Х и снова проводим
деления

в)
Опять сравниваем полученный остаток с R0(x)


Если они равны, то ошибки во втором разряде.


Если нет, то умножаем Н(х)х2 и повторяем эти операции до тех
пор, пока R(X) не будет равен R0(x).

Ошибка
будет в разряде соответствующем числу на которое повышена степень Н(х)
плюс один.

Например:

то номер ошибочного разряда 3+1=4

Пример
декодирования комбинации ЦК.

Положим,
получена комбинация H(х)=111011010

Проанализируем
её в соответствии с вышеприведенным алгоритмом.

Реализуя
алгоритм определения ошибок, определим остаток от деления вектора соответствующего
ошибке в старшем разряде Х8 на производяший полином P(x)=X4+X+1

X8
X2+X+1

X8+X5+X4
x4+x+1

X5+X4

X5+X2+X

X4+X2+X

X4+X+1

X2+1=R0(X)=0101

Разделим
принятую комбинацию на образующий полином

Полученный
на 9-м такте остаток, как видим, не равен R0(X). Значит необходимо
умножить принятую комбинацию на Х и повторить деление. Однако результаты
деления с 5 по 9 такты включительно будут такими же, значит необходимо
продолжить деление после девятого такта до тех пор, пока в остатке не
будет R0(Х). В нашем случае это произойдет на 10 такте, при
повышении степени на 1. Значит ошибки во втором разряде.

Декодер
циклического кода с исправлением ошибки

Если ошибка в первом
разряде, то остаток R0(X)=10101 появления после девятого такта
в ячейках ФПГ.

Если
во втором по старшинству то после 10го;
в третьем по
старшинству то после 11го;
в четвертом
по старшинству то после 12го

в пятом по старшинству
то после 13го

в шестом по старшинству
то после 14го

в седьмом по старшинству
то после 15го

в восьмом по старшинству
то после 16го

в девятом по старшинству
то после 17го.

На
10 такте старший разряд покидает регистр задержки и проходит через сумматор
по модулю 2.

Если
и этому моменту остаток в ФПГ=R0(X), то логическая 1 с выхода
дешифратора поступит на второй вход сумматора и старший разряд инвертируется.

В
нашем случае инвертируется второй разряд на 11 такте.

5.3
Выбор образующего полинома

Рассмотрим
вопрос выбора образующего полинома, который определяет корректирующие
свойства циклического кода. В теории циклических кодов показано, что образующий
полином представляет собой произведение так называемых минимальных многочленов
mi(x), являющихся простыми сомножителями (то есть делящимся
без остатка лишь на себя и на 1) бинома xn+ 1:

P(x)=m1(x)*
m3(x)…mj(x)
, (*)

где
j = d02 =( 2tu.ош+1)
– 2 = 2 tи.ош – 1.

Существуют
специальные таблицы минимальных многочленов, одна из которых приведена
ниже. Кроме образующего полинома необходимо найти и количество проверочных
разрядов r. Оно определяется из следующего свойства циклических
кодов:

для
любых значений l и tи.ош существует циклический
код длины n =2l – 1, исправляющий все ошибки
кратности tи.ош и менее, и содержащий не более
проверочных элементов.

Так
как ,
то
откуда . (**)

Очевидно,
что для уменьшения времени передачи кодовых комбинаций, r следует
выбирать как можно меньше. Пусть, например, длина кодовых комбинаций n
=
7, кратность исправляемых ошибок tи.ош =1. Из
(**) получим r = 1 . log2 ( 7+1 )=3.

После
определения количества проверочных разрядов r, вычисления образующего
полинома удобно осуществить, пользуясь таблицей минимальных многочленов,
представленной в следующем виде:

Таблица
минимальных многочленов

J=2tи.ош
-1

Вид минимальных многочленов
для

1

2

3

4

5

6

7

1

x2+x+1

x3+x+1

x4+x+1

x5+x+1

x6+x+1

x7+x+1

3

x4+x3+

+x2+x+1

x5+x4+

+x3+x2+1

x6+x4+

+x2+x+1

x7+x3+

+x2+x+1

5

x5+x4+

+x2+x+1

x6+x5+

+x2+x+1

x7+x4+

+x3+x2+1

7

x6+x3+1

X7+x6+x5+

+x4+x2+x+1

Определяя
образующий полином, нужно из столбца для соответствующего соотношения

выписать все многочлены, начиная с верхней строки до нижней с номером
j=2tи.ош1 включительно. После этого следует
перемножить выбранные минимальные многочлены в соответствии с (*). В частности,
если r=3, tи.ош=1, j=2*1-1=1, образующий
полином будет представлять собой единственный минимальный многочлен P(x)=
m1(x) = x3+x+1
(первая строка, второй столбец
таблицы ). Соответственно образующее число равно 1011.

Контрольные
вопросы по теме:

  1. Что такое разрешенные
    и запрещенные кодовые комбинации.
  2. Что называется
    расстоянием Хемминга.
  3. Дайте понятие кодового
    расстояния и как его определить.
  4. Как связано кодовое
    расстояние с исправляющей и обнаруживающей способностью кода.
  5. Какой код называется
    линейным.
  6. Какое множество
    называется группой.
  7. Назовите основные
    свойства циклических кодов.
  8. Запишите полином

    в двоичном виде.
  9. Запишите полином,
    соответствующий двоичной записи 100111.
  10. Получите остаток
    от деления полинома
    на .
  11. Как получают разрешенные
    комбинации при циклическом кодировании.
  12. Нарисуйте кодер
    для циклического кода, порождаемого полиномом .
    Поясните принцип работы кодера.
  13. По какому признаку
    обнаруживают ошибку в принятой кодовой комбинации.
  14. Каков алгоритм
    определения ошибочного разряда в комбинации циклического кода.
  15. Нарисуйте структурную
    схему декодера, обеспечивающего обнаружение ошибок для кода (7,4) при
    производящем полиноме .
    Поясните принцип его работы.
  16. Нарисуйте структурную
    схему декодера, обеспечивающего исправление однократной ошибки для кода
    (7,4) при производящем полиноме .
    Поясните принцип его работы.
  17. Как выбирается
    образующий (производящий) полином?

Принципы помехоустойчивого кодирования

Помехоустойчивым (корректирующим) кодированием называется кодирование при котором осуществляется обнаружение либо обнаружение и исправление ошибок в принятых кодовых комбинациях.

Возможность помехоустойчивого кодирования осуществляется на основании теоремы, сформулированной Шенноном, согласно ей:

если производительность источника (Hи’(A)) меньше пропускной способности канала связи (Ск), то существует по крайней мере одна процедура кодирования и декодирования при которой вероятность ошибочного декодирования сколь угодно мала, если же производительность источника больше пропускной способности канала, то такой процедуры не существует.

Основным принципом помехоустойчивого кодирования является использование избыточных кодов, причем если для кодирования сообщения используется простой код, то в него специально вводят избыточность. Необходимость избыточности объясняется тем, что в простых кодах все кодовые комбинации являются разрешенными, поэтому при ошибке в любом из разрядов приведет к появлению другой разрешенной комбинации, и обнаружить ошибку будет не возможно. В избыточных кодах для передачи сообщений используется лишь часть кодовых комбинаций (разрешенные комбинации). Прием запрещенной кодовой комбинации означает ошибку. Причем, в процессе приема закодированного сообщения возможны три случая (рисунок 3).

Рисунок 3 — Случаи приема закодированного сообщения

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

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

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

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

Если осуществляется кодирование с обнаружением ошибок, то кодовое расстояние должно быть хотя бы на единицу больше чем кратность обнаруживаемых ошибок, т. е.

d0? qо ош + 1.

Если данное условие не выполняется, то одни из ошибок обнаруживаются, а другие нет.

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

d0? 2qи ош + 1.

Если данное условие не выполняется, то одни из ошибок исправляются, а другие нет.

Следует отметить, что если код способен исправить одну ошибку (qи ош = 1), что соответствует кодовому расстоянию 3 (d0 = 1?2+1 = 3), то обнаружить он может две ошибки, т. к.

qо ош = d0 – 1 = 2.

Декодирование помехоустойчивых кодов

Декодирование это процесс перехода от вторичного отображения сообщения к первичному алфавиту.

Декодирование помехоустойчивых кодов может осуществляться тремя способами: сравнения, синдромным и мажоритарным.

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

Синдромный способ  основан на вычислении определенным образом контрольного числа — синдрома ошибки (С). Если синдром ошибки равен нулю, то кодовая комбинация принята верно, если синдром не равен нулю, то комбинация принята не верно. Данный способ может быть использован в кодах с исправлением ошибок, в этом случае синдром указывает не только на наличие ошибки в кодовой комбинации, но и на место положение этой ошибки в кодовой комбинации. Для двоичного кода знание местоположения ошибки достаточно для ее исправления. Это объясняется тем, что любой символ кодовой комбинации может принимать всего два значения и если символ ошибочный, то его необходимо инвертировать. Следовательно, синдрома ошибки достаточно для исправления ошибок, если d0? 2qи ош + 1.

Мажоритарное декодирование основано на том, что каждый информационный символ кодовой комбинации определяется нескольким линейными выражениями через другие символы кодовой комбинации. Если принята комбинация без ошибок, то все соотношения остаются и все выражения дают одинаковые результаты (единицу или ноль). При ошибке в одном из разрядов эти соотношения нарушаются, в результате чего одни линейные выражения равны нулю, а другие единице. Решение о принятом символе определяется по большинству: если в результате вычислений выражений больше нулей, то принимается решение о принятии нуля, если больше единиц, то принимается решение о приеме единицы. Если, при декодировании, результаты вычисления выражений дают одинаковое число единиц и нулей, то при определении принятого символа приоритет имеет принятый символ, значение которого в данный момент определяется.

Классификация корректирующих кодов

Классификация корректирующих кодов представлена схемой (рисунок 4)

Блочные — это коды, в которых передаваемое сообщение разбивается на блоки и каждому блоку соответствует своя кодовая комбинация (например, в телеграфии каждой букве соответствует своя кодовая комбинация).

Рисунок 4 — Классификация корректирующих кодов

Непрерывные — коды, в которых сообщение не разбивается на блоки, а проверочные символы располагаются между информационными.

Неразделимые — это коды, в кодовых комбинациях которых нельзя выделить проверочные разряды.

Разделимые — это коды, в кодовых комбинациях которых можно указать положение проверочных разрядов, т. е. кодовые комбинации можно разделить на информационную и проверочную части.

Систематические (линейные) — это коды, в которых проверочные символы определяются как линейные комбинации информационных символов, в таких кодах суммирование по модулю два двух разрешенных кодовых комбинаций также дает разрешенную комбинацию. В несистематических кодах эти условия не выполняются.

Код с постоянным весом

Данный код относится к классу блочных не разделимых кодов. В нем все разрешенные кодовые комбинации имеют одинаковый вес. Примером кода с постоянным весом является Международный телеграфный код МТК-3. В этом коде все разрешенные кодовые комбинации имеют вес равный трем, разрядность же комбинаций n=7. Таким образом, из 128 комбинаций (N0 = 27 = 128) разрешенными являются Nа = 35 (именно столько комбинаций из всех имеют W=3). При декодировании кодовых комбинаций осуществляется вычисление веса кодовой комбинации и если W?3, то выносится решение об ошибке. Например, из принятых комбинаций 0110010, 1010010, 1000111 ошибочной является третья, т. к. W=4. Данный код способен обнаруживать все ошибки нечетной кратности и часть ошибок четной кратности. Не обнаруживаются только ошибки смещения, при которых вес комбинации не изменяется, например, передавалась комбинация 1001001, а принята 1010001 (вес комбинации не изменился W=3). Код МТК-3 способен только обнаруживать ошибки и не способен их исправлять. При обнаружении ошибки кодовая комбинация не используется для дальнейшей обработки, а на передающую сторону отправляется запрос о повторной передаче данной комбинации. Поэтому данный код используется в системах передачи информации с обратной связью.

Код с четным числом единиц

Данный код относится к классу блочных, разделимых, систематических кодов. В нем все разрешенные кодовые комбинации имеют четное число единиц. Это достигается введением в кодовую комбинацию одного проверочного символа, который равен единице если количество единиц в информационной комбинации нечетное и нулю ? если четное. Например:

При декодировании осуществляется поразрядное суммирование по модулю два всех элементов принятой кодовой комбинации и если результат равен единице, то принята комбинация с ошибкой, если результат равен нулю принята разрешенная комбинация. Например:

101101 = 1 + 0 + 1 + 1 + 0 + 1 = 0 — разрешенная комбинация

101111 = 1 + 0 + 1 + 1 + 1 + 1 = 1 — запрещенная комбинация.

Данный код способен обнаруживать как однократные ошибки, так и любые ошибки нечетной кратности, но не способен их исправлять. Данный код также используется в системах передачи информации с обратной связью.

Код Хэмминга

Код Хэмминга относится к классу блочных, разделимых, систематических кодов. Кодовое расстояние данного кода d0=3 или d0=4.

Блочные систематические коды характеризуются разрядностью кодовой комбинации n и количеством информационных разрядов в этой комбинации k остальные разряды являются проверочными (r):

r = n k.

Данные коды обозначаются как (n,k).

Рассмотрим код Хэмминга (7,4). В данном коде каждая комбинация имеет 7 разрядов, из которых 4 являются информационными,

При кодировании формируется кодовая комбинация вида:

а1 а2 а3 а4 b1 b2 b

где аi — информационные символы;

bi — проверочные символы.

В данном коде проверочные элементы bi находятся через линейные комбинации информационных символов ai, причем, для каждого проверочного символа определяется свое правило. Для определения правил запишем таблицу синдромов кода (С) (таблица 3), в которой записываются все возможные синдромы, причем, синдромы имеющие в своем составе одну единицу соответствуют ошибкам в проверочных символах:

  • синдром 100 соответствует ошибке в проверочном символе b1;
  • синдром 010 соответствует ошибке в проверочном символе b2;
  • синдром 001 соответствует ошибке в проверочном символе b3.

Синдромы с числом единиц больше 2 соответствуют ошибкам в информационных символах. Синдромы для различных элементов кодовой комбинации аi и bi должны быть различными.

Таблица 3 — Синдромы кода Хэмминга (7;4)

Число Элементы синдрома Элементы кодовой
синдрома С1 С2 С3 комбинации
1 0 0 1 b3
2 0 1 0 b2
3 0 1 1 a1
4 1 0 0 b1
5 1 0 1 a2
6 1 1 0 a3
7 1 1 1 a4

Определим правило формирования элемента b3. Как следует из таблицы, ошибке в данном символе соответствует единица в младшем разряде синдрома С4. Поэтому, из таблицы, необходимо отобрать те элементы аi у которых, при возникновении ошибки, появляется единица в младшем разряде. Наличие единиц в младшем разряде, кроме b3,соответствует элементам a1, a2 и a4. Просуммировав эти информационные элементы получим правило формирования проверочного символа:

b3 = a1 +    a2  +  a4

Аналогично определяем правила для b2 и b1:

b2 = a1 +  a3 + a4

b1 = a2 +  a3 + a4

Пример 3, необходимо сформировать кодовую комбинацию кода Хэмминга (7,4) соответствующую информационным символам 1101.

В соответствии с проверочной матрицей определяем bi:

b1 = 1 +  0 + 1 = 0; b2 = 1 + 0 + 1=1; b3 = 1 + 1 + 1 = 1.

Добавляем проверочные символы к информационным и получаем кодовую комбинацию:

Biр = 1101001.

В теории циклических кодов все преобразования кодовых комбинаций производятся в виде математических операций над полиномами (степенными функциями). Поэтому двоичные комбинации преобразуют в полиномы согласно выражения:

Аi(х) = аn-1xn-1 + аn-2xn-2 +…+ а0x0

где an-1, … коэффициенты полинома принимающие значения 0 или 1. Например, комбинации 1001011 соответствует полином

Аi(х) = 1?x6 + 0?x5 + 0?x4 + 1?x3 + 0?x2 + 1?x+1?x0 ? x6 + x3 + x+1.

При формировании кодовых комбинаций над полиномами производят операции сложения, вычитания, умножения и деления. Операции умножения и деления производят по арифметическим правилам, сложение заменяется суммированием по модулю два, а вычитание заменяется суммированием.

Разрешенные кодовые комбинации циклических кодов обладают тем свойством, что все они делятся без остатка на образующий или порождающий полином G(х). Порождающий полином вычисляется с применением ЭВМ. В приложении приведена таблица синдромов.

Этапы формирования разрешенной кодовой комбинации разделимого циклического кода Biр(х).

1.  Информационная кодовая комбинация Ai преобразуется из двоичной формы в полиномиальную (Ai(x)).

2.  Полином Ai(x) умножается на хr,

Ai(x)?xr

где r количество проверочных разрядов:

r = nk.

3.  Вычисляется остаток от деления R(x) полученного произведения на порождающий полином:

R(x) = Ai(x)?xr/G(x).

4.  Остаток от деления (проверочные разряды) прибавляется к информационным разрядам:

Biр(x) = Ai(x)?xr + R(x).

5.  Кодовая комбинация Bip(x) преобразуется из полиномиальной формы в двоичную (Bip).

Пример 4. Необходимо сформировать кодовую комбинацию циклического кода (7,4) с порождающим полиномом G(x)=х3+х+1, соответствующую информационной комбинации 0110.

1. Преобразуем комбинацию в полиномиальную форму:

Ai = 0110 ? х2 + х = Ai(x).

2. Находим количество проверочных символов и умножаем  полученный полином на xr:

r = n – k = 7 – 4 =3

Ai(x)?xr = (х2 + х)? x3 = х5 + х4

3. Определяем остаток от деления Ai(x)?xr на порождающий полином, деление осуществляется до тех пор пока наивысшая степень делимого не станет меньше наивысшей степени делителя:

R(x) = Ai(x)?xr/G(x)

4. Прибавляем остаток от деления к информационным разрядам и переводим в двоичную систему счисления:

Biр(x) = Ai(x)?xr+ R(x) = х5 + х4 + 1? 0110001.

5. Преобразуем кодовую комбинацию из полиномиальной формы в двоичную:

Biр(x) = х5 + х4 + 1 ? 0110001 = Biр

Как видно из комбинации четыре старших разряда соответствуют информационной комбинации, а три младших — проверочные.

Формирование разрешенной кодовой комбинации неразделимого циклического кода.

Формирование данных комбинаций осуществляется умножением информационной комбинации на порождающий полином:

Biр(x) = Ai(x)?G(x).

Причем умножение можно производить в двоичной форме.

Пример 5, необходимо сформировать кодовую комбинацию неразделимого циклического кода используя данные примера 2, т. е. G(x) = х3+х+1, Ai(x) = 0110, код (7,4).

1. Переводим комбинацию из двоичной формы в полиномиальную:

Ai = 0110? х2+х = Ai(x)

2. Осуществляем деление Ai(x)?G(x)

3. Переводим кодовую комбинацию из полиномиальной форы в двоичную:

Bip(x) = х543+х ? 0111010 = Bip

В этой комбинации невозможно выделить информационную и проверочную части.

Матричное представление систематических кодов

Систематические коды, рассмотренные выше (код Хэмминга и разделимый циклический код) удобно представить в виде матриц. Рассмотрим, как это осуществляется.

Поскольку систематические коды обладают тем свойством, что сумма двух разрешенных комбинаций по модулю два дают также разрешенную комбинацию, то для формирования комбинаций таких кодов используют производящую матрицу Gn,k. С помощью производящей матрицы можно получить любую кодовую комбинацию кода путем суммирования по модулю два строк матрицы в различных комбинациях. Для получения данной матрицы в нее заносятся исходные комбинации, которые полностью определяют систематический код. Исходные комбинации определяются исходя из условий:

1)      все исходные комбинации должны быть различны;

2)      нулевая комбинация не должна входить в число исходных комбинаций;

3)      каждая исходная комбинация должна иметь вес не менее кодового расстояния, т. е. W?d0;

4)      между любыми двумя исходными комбинациями расстояние Хэмминга должно быть не меньше кодового расстояния, т. е. dij?d0.

Производящая матрица имеет вид:

Производящая подматрица имеет k строк и n столбцов. Она образована двумя подматрицами: информационной (включает элементы аij) и проверочной (включает элементы bij). Информационная матрица имеет размеры k?k, а проверочная — r?k.

В качестве информационной подматрицы удобно брать единичную матрицу Ekk:

Проверочная подматрица Gr,k строится путем подбора различных r-разрядных комбинаций, удовлетворяющих следующим правилам:

1)      в каждой строке подматрицы количество единиц должно быть не менее d0-1;

2)      сумма по модулю два двух любых строк должна иметь не менее d0-2 единицы;

Полученная таким образом подматрица Gr,k приписывается справа к подматрице Ekk, в результате чего получается производящая матрица Gn,k. Затем, используя производящую матрицу, можно получить любую комбинацию кода путем суммирования двух и более строк по модулю два в различных комбинациях.

Пример 6. Необходимо построить производящую матрицу кода Хэмминга способного исправлять 1 ошибку и имеющего n=7. Закодировать с помощью полученной матрицы комбинацию Ai=1101.

Определяем кодовое расстояние:

d0=2qи ош+1= 2?1+1=3.

Для кодов с d0=3 количество проверочных разрядов определяется по формуле:

r=log2(n+1)= log28=3.

Определяем разрядность информационной части:

k = n r = 7 4 =3.

Запишем все возможные комбинации проверочной подматрицы: 000, 001, 010, 011, 100, 101, 110, 111. Выберем из этих комбинаций те, что удовлетворяют правилам:

1)      в каждой строке не менее d0-1, этому условию соответствуют комбинации 011, 101, 110, 111;

2)      сумма двух любых комбинаций по модулю два содержит единиц не менее d0-2:

3)      записываем проверочную подматрицу:

4)      приписываем полученную подматрицу к единичной и получаем производящую матрицу:

Если произвести определение d0 для исходных комбинаций полученной матрицы (определив расстояние Хэмминга для всех пар комбинаций), то оно окажется равным 3.

Для кодирования заданной комбинации Ai, необходимо просуммировать те строки матрицы G, которые в информационной части имеют единицу на том месте, на котором они находятся в комбинации Аi. Для заданной комбинации 1101 единичными разрядами являются а1, а2, а4. В матрице G единицы на этих местах имеют строки: первая, вторая и четвертая. Просуммировав их получаем разрешенную комбинацию заданного кода.

Сравнивая полученную кодовую комбинацию Bip с комбинацией полученной примере 3, для которой также использована комбинация Ai=1101, видим что они одинаковы.

Для кода Хэмминга выше были определены правила формирования проверочных символов bk:

Эти правила можно отобразить в виде проверочной матрицы Нn,k. Она состоит из n столбцов (соответствует разрядности кодовой комбинации) и r столбцов (соответствует количеству проверочных разрядов кодовой комбинации). В правой части матрицы указываются синдромы, соответствующие ошибкам в проверочных символах, в левой части записываются элементы информационной части комбинации, причем, те элементы, которые участвуют в образовании определенного элемента bi равны единицы, а те которые не участвуют — нулю.

В данном случае обведенные пунктиром проверочные элементы образуют единичную матрицу. Проверочная матрица позволяет определить ошибочный разряд, поскольку каждый столбец данной матрицы представляет собой синдром соответствующего символа. При этом строки матрицы будут соответствовать разрядам синдрома Ck. Например, согласно приведенной проверочной матрице, синдром соответствующий ошибку в разряде а1 имеет вид 011, в разряде а2 — 101, в разряде а3 — 110, в разряде а4 — 111, в разряде b1 — 100, в разряде b2 — 010, в разряде b3 — 001. Также с помощью проверочной матрицы легко определить проверочные и символы и сформировать кодовую комбинацию. Например, необходимо сформировать кодовую комбинацию кода Хэмминга (7,4) соответствующую информационным символам 1101.

В соответствии с проверочной матрицей определяем bi:

b1 = 1 + 0 + 1 = 0; b2 = 1 + 0 + 1=0; b3 = 1 + 1 + 1 = 1.

Добавляем проверочные символы к информационным и получаем кодовую комбинацию:

Biр = 1101001.

Также проверочную матрицу можно построить и другим способом. Для этого сначала строится единичная матрица Еr. К которой слева приписывается подматрица Dk,r. Каждая строка этой подматрицы соответствует столбцу проверочных разрядов подматрицы Сr,k производящей матрицы Gn,k.

Такое преобразование строк матрицы в столбцы называется транспонированием.

В результате получаем

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

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

1. принятая комбинация Bip’ преобразуется их двоичной формы в полиномиальную (Bip(x));

2. осуществляется деление Bip(x) на порождающий полином G(x) в результате чего определяется синдром ошибки C(x) (остаток от деления);

3. синдром ошибки преобразуется из полиномиальной формы в двоичную;

4. По проверочной матрице или таблице синдромов определяется ошибочный разряд;

5. Ошибочный разряд в Bip’(x) инвертируется;

6. Исправленная комбинация преобразуется из полиномиальной формы в двоичную Bip.

делением принятой кодовой комбинации Biр’(x) на порождающий полином G(x), который заранее известен на приеме. Остаток от деления и является синдромом ошибки С(х).

Мажоритарное декодирование циклических кодов

Мажоритарное декодирование может применятся только для декодирования систематических кодов (кода Хэмминга, циклического разделимого кода). Рассмотрим мажоритарное декодирование на примере циклического кода.

фигня
 
  Обноружение ошибок  
 
  Исправление ошибок  
 
  Коррекция ошибок  
 
  Назад  
 

Методы обнаружения ошибок

В обычном равномерном непомехоустойчивом коде число разрядов n в кодовых
комбинациях определяется числом сообщений и основанием кода.

Коды, у которых все кодовые комбинации разрешены, называются простыми или
равнодоступными и являются полностью безызбыточными. Безызбыточные коды обладают
большой «чувствительностью» к помехам. Внесение избыточности при использовании
помехоустойчивых кодов связано с увеличением n – числа разрядов кодовой комбинации. Таким
образом, все множество
комбинаций можно разбить на два подмножества:
подмножество разрешенных комбинаций, обладающих определенными признаками, и
подмножество запрещенных комбинаций, этими признаками не обладающих.

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

Первые работы по корректирующим кодам принадлежат Хеммингу, который ввел понятие
минимального кодового расстояния dmin и предложил код, позволяющий однозначно указать ту
позицию в кодовой комбинации, где произошла ошибка. К информационным элементам k в коде
Хемминга добавляется m проверочных элементов для автоматического определения
местоположения ошибочного символа. Таким образом, общая длина кодовой комбинации
составляет: n = k + m.

Метричное представление n,k-кодов

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

Почти все блочные коды относятся к разделимым кодам, кодовые комбинации которых
состоят из двух частей: информационной и проверочной. При общем числе n символов в блоке
число информационных символов равно k, а число проверочных символов:

К основным характеристикам корректирующих кодов относятся:

 

— число разрешенных и запрещенных кодовых комбинаций;
— избыточность кода;
— минимальное кодовое расстояние;
— число обнаруживаемых или исправляемых ошибок;
— корректирующие возможности кодов.

Для блочных двоичных кодов, с числом символов в блоках, равным n, общее число
возможных кодовых комбинаций определяется значением

Число разрешенных кодовых комбинаций при наличии k информационных разрядов в
первичном коде:

Очевидно, что число запрещенных комбинаций:

а с учетом отношение будет

где m – число избыточных (проверочных) разрядов в блочном коде.

Избыточностью корректирующего кода называют величину

откуда следует:

Эта величина показывает, какую часть общего числа символов кодовой комбинации
составляют информационные символы. В теории кодирования величину Bk называют
относительной скоростью кода. Если производительность источника информации равна H
символов в секунду, то скорость передачи после кодирования этой информации будет

поскольку в закодированной последовательности из каждых n символов только k символов
являются информационными.

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

При этом длительность кодовых блоков будет существенно возрастать, что приведет к
задержке информации при передаче и приеме. Чем сложнее кодирование, тем длительнее
временная задержка информации.

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

Если интерпретировать кодовые комбинации как точки в пространстве, то отличие
выражается в близости этих точек, т. е. в расстоянии между ними.

Количество разрядов (символов), которыми отличаются две кодовые комбинации, можно
принять за кодовое расстояние между ними. Для определения этого расстояния нужно сложить
две кодовые комбинации «по модулю 2» и подсчитать число единиц в полученной сумме.
Например, две кодовые комбинации xi = 01011 и xj = 10010 имеют расстояние d(xi,xj) , равное 3,
так как:

Здесь под операцией ⊕ понимается сложение «по модулю 2».

Заметим, что кодовое расстояние d(xi,x0) между комбинацией xi и нулевой x0 = 00…0
называют весом W комбинации xi, т.е. вес xi равен числу «1» в ней.

Расстояние между различными комбинациями некоторого конкретного кода могут
существенно отличаться. Так, в частности, в безызбыточном первичном натуральном коде n = k это
расстояние для различных комбинаций может изменяться от единицы до величины n, равной
разрядности кода. Особую важность для характеристики корректирующих свойств кода имеет
минимальное кодовое расстояние dmin, определяемое при попарном сравнении всех кодовых
комбинаций, которое называют расстоянием Хемминга.

В безызбыточном коде все комбинации являются разрешенными и его минимальное
кодовое расстояние равно единице – dmin=1. Поэтому достаточно исказиться одному символу,
чтобы вместо переданной комбинации была принята другая разрешенная комбинация. Чтобы код
обладал корректирующими свойствами, необходимо ввести в него некоторую избыточность,
которая обеспечивала бы минимальное расстояние между любыми двумя разрешенными
комбинациями не менее двух – dmin ≥ 2..

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

Число обнаруживаемых или исправляемых ошибок

При применении двоичных кодов учитывают только дискретные искажения, при которых
единица переходит в нуль («1» → «0») или нуль переходит в единицу («0» → «1»). Переход «1» →
«0»
или «0» → «1» только в одном элементе кодовой комбинации называют единичной ошибкой
(единичным искажением). В общем случае под кратностью ошибки подразумевают число
позиций кодовой комбинации, на которых под действием помехи одни символы оказались
замененными на другие. Возможны двукратные (g = 2) и многократные (g > 2) искажения
элементов в кодовой комбинации в пределах 0 ≤ g ≤ n.

Минимальное кодовое расстояние является основным параметром, характеризующим
корректирующие способности данного кода. Если код используется только для обнаружения
ошибок кратностью g0, то необходимо и достаточно, чтобы минимальное кодовое расстояние
было равно dmin ≥ g0 + 1.

В этом случае никакая комбинация из go ошибок не может перевести одну разрешенную
кодовую комбинацию в другую разрешенную. Таким образом, условие обнаружения всех ошибок
кратностью g0 можно записать

Чтобы можно было исправить все ошибки кратностью gu и менее, необходимо иметь
минимальное расстояние, удовлетворяющее условию dmin ≥ 2gu

В этом случае любая кодовая комбинация с числом ошибок gu отличается от каждой
разрешенной комбинации не менее чем в gu+1 позициях. Если условие не выполнено,
возможен случай, когда ошибки кратности g исказят переданную комбинацию так, что она станет
ближе к одной из разрешенных комбинаций, чем к переданной или даже перейдет в другую
разрешенную комбинацию. В соответствии с этим, условие исправления всех ошибок кратностью
не более gи можно записать:

Из и
следует, что если код исправляет все ошибки кратностью gu, то число
ошибок, которые он может обнаружить, равно go = 2gu. Следует отметить, что эти соотношения
устанавливают лишь гарантированное минимальное число обнаруживаемых или
исправляемых ошибок при заданном dmin и не ограничивают возможность обнаружения ошибок
большей кратности. Например, простейший код с проверкой на четность с dmin = 2 позволяет
обнаруживать не только одиночные ошибки, но и любое нечетное число ошибок в пределах go < n.

Корректирующие возможности кодов

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

Коды Хэмминга

Построение кодов Хемминга базируется на принципе проверки на четность веса W (числа
единичных символов «1») в информационной группе кодового блока.

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

В таком коде к кодовым комбинациям безызбыточного первичного двоичного k-разрядного
кода добавляется один дополнительный разряд (символ проверки на четность, называемый
проверочным, или контрольным). Если число символов «1» исходной кодовой комбинации
четное, то в дополнительном разряде формируют контрольный символ «0», а если число
символов «1» нечетное, то в дополнительном разряде формируют символ «1». В результате
общее число символов «1» в любой передаваемой кодовой комбинации всегда будет четным.

Таким образом, правило формирования проверочного символа сводится к следующему:

где i – соответствующий информационный символ («0» или «1»); k – общее их число а, под
операцией ⊕ здесь и далее понимается сложение «по модулю 2». Очевидно, что добавление
дополнительного разряда увеличивает общее число возможных комбинаций вдвое по сравнению
с числом комбинаций исходного первичного кода, а условие четности разделяет все комбинации
на разрешенные и неразрешенные. Код с проверкой на четность позволяет обнаруживать
одиночную ошибку при приеме кодовой комбинации, так как такая ошибка нарушает условие
четности, переводя разрешенную комбинацию в запрещенную.

Критерием правильности принятой комбинации является равенство нулю результата S
суммирования «по модулю 2» всех n символов кода, включая проверочный символ m1. При
наличии одиночной ошибки S принимает значение 1:

— ошибок нет,

— однократная ошибка

Этот код является (k+1,k)-кодом, или (n,n–1)-кодом. Минимальное расстояние кода равно
двум (dmin = 2), и, следовательно, никакие ошибки не могут быть исправлены. Простой код с
проверкой на четность может использоваться только для обнаружения (но не исправления)
однократных ошибок.

Увеличивая число дополнительных проверочных разрядов, и формируя по определенным
правилам проверочные символы m, равные «0» или «1», можно усилить корректирующие
свойства кода так, чтобы он позволял не только обнаруживать, но и исправлять ошибки. На этом и
основано построение кодов Хемминга.

Коды Хемминга позволяют исправлять одиночную ошибку, с помощью непосредственного
описания. Для каждого числа проверочных символов m =3, 4, 5… существует классический код
Хемминга с маркировкой

т.е. (7,4), (15,11) (31,26) …

При других значениях числа информационных символов k получаются так называемые
усеченные (укороченные) коды Хемминга. Так для кода имеющего 5 информационных символов,
потребуется использование корректирующего кода (9,5), являющегося усеченным от
классического кода Хемминга (15,11), так как число символов в этом коде уменьшается
(укорачивается) на 6.

Для примера рассмотрим классический код Хемминга (7,4), который можно сформировать и
описать с помощью кодера, представленного на рис. 1 В простейшем варианте при заданных
четырех информационных символах: i1, i2, i3, i4 (k = 4), будем полагать, что они сгруппированы в
начале кодового слова, хотя это и не обязательно. Дополним эти информационные символы
тремя проверочными символами (m = 3), задавая их следующими равенствами проверки на
четность, которые определяются соответствующими алгоритмами, где знак ⊕ означает
сложение «по модулю 2»: r1 = i1 ⊕ i2 ⊕ i3, r2 = i2 ⊕ i3 ⊕ i4, r3 = i1 ⊕ i2 ⊕ i4.

В соответствии с этим алгоритмом определения значений проверочных символов mi, в табл.
1 выписаны все возможные 16 кодовых слов (7,4)-кода Хемминга.

Таблица 1 Кодовые слова (7,4)-кода Хэмминга

k=4

m=4

i1 i2 i3 i4

r1 r2 r3

0 0 0 0

0 0 0

0 0 0 1

0 1 1

0 0 1 0

1 1 0

0 0 1 1

1 0 1

0 1 0 0

1 1 1

0 1 0 1

1 0 0

0 1 1 0

0 0 1

0 1 1 1

0 1 0

1 0 0 0

1 0 1

1 0 0 1

1 0 0

1 0 1 0

0 1 1

1 0 1 1

0 0 0

1 1 0 0

0 1 0

1 1 0 1

0 0 1

1 1 1 0

1 0 0

1 1 1 1

1 1 1

На рис.1 приведена блок-схема кодера – устройства автоматически кодирующего
информационные разряды в кодовые комбинации в соответствии с табл.1

Рис. 1 Кодер для (7,4)-кода Хемминга

На рис. 1.4 приведена схема декодера для (7,4) – кода Хемминга, на вход которого
поступает кодовое слово
. Апостроф означает, что любой символ слова может
быть искажен помехой в телекоммуникационном канале.

В декодере в режиме исправления ошибок строится последовательность:

Трехсимвольная последовательность (s1, s2, s3) называется синдромом. Термин «синдром»
используется и в медицине, где он обозначает сочетание признаков, характерных для
определенного заболевания. В данном случае синдром S = (s1, s2, s3) представляет собой
сочетание результатов проверки на четность соответствующих символов кодовой группы и
характеризует определенную конфигурацию ошибок (шумовой вектор).

Число возможных синдромов определяется выражением:

При числе проверочных символов m =3 имеется восемь возможных синдромов (23 = 8) .
Нулевой синдром (000) указывает на то, что ошибки при приеме отсутствуют или не обнаружены.
Всякому ненулевому синдрому соответствует определенная конфигурация ошибок, которая и
исправляется. Классические коды Хемминга имеют число синдромов, точно равное их
необходимому числу (что позволяет исправить все однократные ошибки в любом информативном
и проверочном символах) и включают один нулевой синдром. Такие коды называются
плотноупакованными.

Усеченные коды являются неплотноупакованными, так как число синдромов у них
превышает необходимое. Так, в коде (9,5) при четырех проверочных символах число синдромов
будет равно 24 =16, в то время как необходимо всего 10. Лишние 6 синдромов свидетельствуют о
неполной упаковке кода (9,5).

Рис. 2 Декодер для (7, 4)-кода Хемминга

Для рассматриваемого кода (7,4) в табл. 2 представлены ненулевые синдромы и
соответствующие конфигурации ошибок.

Таблица 2 Синдромы (7, 4)-кода Хемминга

Синдром

001

010

011

100

101

110

111

Конфигурация ошибок

0000001

0000010

0000100

0001000

0010000

0100000

1000000

Ошибка в символе

m1

m2

i4

m1

i1

i3

i2

Таким образом, (7,4)-код позволяет исправить все одиночные ошибки. Простая проверка
показывает, что каждая из ошибок имеет свой единственный синдром. При этом возможно
создание такого цифрового корректора ошибок (дешифратора синдрома), который по
соответствующему синдрому исправляет соответствующий символ в принятой кодовой группе.
После внесения исправления проверочные символы ri можно на выход декодера (рис. 2) не
выводить. Две или более ошибок превышают возможности корректирующего кода Хемминга, и
декодер будет ошибаться. Это означает, что он будет вносить неправильные исправления и
выдавать искаженные информационные символы.

Идея построения подобного корректирующего кода, естественно, не меняется при
перестановке позиций символов в кодовых словах. Все такие варианты также называются (7,4)-
кодами Хемминга.

Циклические коды

Своим названием эти коды обязаны такому факту, что для них часть комбинаций, либо все
комбинации могут быть получены путем циклическою сдвига одной или нескольких базовых
комбинаций кода.

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

Для определения неприводимых многочленов раскладывают на простые множители бином
хn -1. Так, для n = 7 это разложение имеет вид:

(x7)=(x-1)(x3+x2)(x3+x-1)

Каждый из полученных множителей разложения может применяться для построения
корректирующего кода.

Неприводимый полином g(x) называют задающим, образующим или порождающим
для корректирующего кода. Длина n (число разрядов) создаваемого кода произвольна.
Кодовая последовательность (комбинация) корректирующего кода состоит из к информационных
разрядов и n — к контрольных (проверочных) разрядов. Степень порождающего полинома
r = n — к равна количеству неинформационных контрольных разрядов.

Если из сделанного выше разложения (при n = 7) взять полипом (х — 1), для которого
r=1, то k=n-r=7-1=6. Соответствующий этому полиному код используется для контроля
на чет/нечет (обнаружение ошибок). Для него минимальное кодовое расстояние D0 = 2
(одна единица от D0 — для исходного двоичного кода, вторая единица — за счет контрольного разряда).

Если же взять полином (x3+x2+1) из указанного разложения, то степень полинома
r=3, а k=n-r=7-3=4.

Контрольным разрядам в комбинации для некоторого кода могут быть четко определено место (номера разрядов).
Тогда код называют систематическим или разделимым. В противном случае код является неразделимым.

Способы построения циклических кодов по заданному полиному.

1) На основе порождающей (задающей) матрицы G, которая имеет n столбцов, k строк, то есть параметры которой
связаны с параметрами комбинаций кода. Порождающую матрицу строят, взяв в качестве ее строк порождающий
полином g(x) и (k — 1) его циклических сдвигов:

Пример; Определить порождающую матрицу, если известно, что n=7, k=4, задающий полином g(x)=x3+х+1.

Решение: Кодовая комбинация, соответствующая задающему полиному g(x)=x3+х+1, имеет вид 1011.
Тогда порождающая матрица G7,4 для кода при n=7, к=4 с учетом того, что k-1=3, имеет вид:

Порождающая матрица содержит k разрешенных кодовых комбинаций. Остальные комбинации кода,
количество которых (2k — k) можно определить суммированием по модулю 2 всевозможных сочетаний
строк матрицы Gn,k. Для матрицы, полученной в приведенном выше примере, суммирование по модулю 2
четырех строк 1-2, 1-3, 1-4, 2-3, 2-4, 3-4 дает следующие кодовые комбинации циклического кода:

001110101001111010011011101010011101110100

Другие комбинации искомого корректирующего кода могут быть получены сложением трех комбинаций, например,
из сочетания строк 1-3-4, что дает комбинацию 1111111, а также сложением четырех строк 1-2-3-4, что
дает комбинацию 1101001 и т.д.

Ряд комбинаций искомого кода может быть получено путем дальнейшего циклического сдвига комбинаций
порождающей матрицы, например, 0110001, 1100010, 1000101. Всего для образования искомого циклического
кода требуется 2k=24=16 комбинаций.

2) Умножение исходных двоичных кодовых комбинаций на задающий полином.

Исходными комбинациями являются все k-разрядные двоичные комбинации. Так, например, для исходной
комбинации 1111 (при k = 4) умножение ее на задающий полином g(x)=x3+х+1=1011 дает 1101001.
Полученные на основе двух рассмотренных способов циклические коды не являются разделимыми.

3) Деление на задающий полином.

Для получения разделимого (систематического) циклического кода необходимо разделить многочлен
xn-k*h(x), где h(x) — исходная двоичная комбинация, на задающий полином g(x) и прибавить полученный
остаток от деления к многочлену xn-k*h(x).

Заметим, что умножение исходной комбинации h(x) на xn-k эквивалентно сдвигу h(x) на (n-к) разрядов влево.

Пример: Требуется определить комбинации циклического разделимого кода, заданного полиномом g(x)=x3+х+1=1011 и
имеющего общее число разрядов 7, число информационных разрядов 4, число контрольных разрядов (n-k)=3.

Решение: Пусть исходная комбинация h(x)=1100. Умножение ее на xn-k=x3=1000 дает
x3*(x3+x2)=1100000, то есть эквивалентно
сдвигу исходной комбинации на 3 разряда влево. Деление комбинации 1100000 на комбинацию 1011, эквивалентно задающему полиному, дает:

Полученный остаток от деления, содержащий xn-k=3 разряда, прибавляем к полиному, в результате чего получаем искомую комбинацию
разделимого циклического кода: 1100010. В ней 4 старших разряда (слева) соответствуют исходной двоичной комбинации, а три младших
разряда являются контрольными.

Следует сделать ряд указаний относительно процедуры деления:

1) При делении задающий полином совмещается старшим разрядом со старшим «единичными разрядом делимого.

2) Вместо вычитания по модулю 2 выполняется эквивалентная ему процедура сложения по модулю 2.

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

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

Логический код 4В/5В

Логический код 4В/5В заменяет исходные символы длиной в 4 бита на символы длиной в 5 бит. Так как результирующие символы содержат избыточные биты, то
общее количество битовых комбинаций в них больше, чем в исходных. Таким образом, пяти-битовая схема дает 32 (25) двухразрядных буквенно-цифровых символа,
имеющих значение в десятичном коде от 00 до 31. В то время как исходные данные могут содержать только четыре бита или 16 (24) символов.

Поэтому в результирующем коде можно подобрать 16 таких комбинаций, которые не содержат большого количества нулей, а остальные считать запрещенными кодами
(code violation). В этом случае длинные последовательности нулей прерываются, и код становится самосинхронизирующимся для любых передаваемых данных.
Исчезает также постоянная составляющая, а значит, еще более сужается спектр сигнала. Но этот метод снижает полезную пропускную способность линии,
так как избыточные единицы пользовательской информации не несут, и только «занимают эфирное время». Избыточные коды позволяют приемнику распознавать
искаженные биты. Если приемник принимает запрещенный код, значит, на линии произошло искажение сигнала.

Итак, рассмотрим работу логического кода 4В/5В. Преобразованный сигнал имеет 16 значений для передачи информации и 16 избыточных значений. В декодере
приемника пять битов расшифровываются как информационные и служебные сигналы.

Для служебных сигналов отведены девять символов, семь символов — исключены.

Исключены комбинации, имеющие более трех нулей (01 — 00001, 02 — 00010, 03 — 00011, 08 — 01000, 16 — 10000). Такие сигналы интерпретируются символом
V и командой приемника VIOLATION — сбой. Команда означает наличие ошибки из-за высокого уровня помех или сбоя передатчика. Единственная
комбинация из пяти нулей (00 — 00000) относится к служебным сигналам, означает символ Q и имеет статус QUIET — отсутствие сигнала в линии.

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

Цена за эти достоинства при таком способе кодирования данных — снижение скорости передачи полезной информации.
К примеру, В результате добавления одного избыточного бита на четыре информационных, эффективность использования полосы
частот в протоколах с кодом MLT-3 и кодированием данных 4B/5B уменьшается соответственно на 25%.

Схема кодирования 4В/5В представлена в таблице.

Двоичный код 4В

Результирующий код 5В

0 0 0 0

1 1 1 1 0

0 0 0 1

0 1 0 0 1

0 0 1 0

1 0 1 0 0

0 0 1 1

1 0 1 0 1

0 1 0 0

0 1 0 1 0

0 1 0 1

0 1 0 1 1

0 1 1 0

0 1 1 1 0

0 1 1 1

0 1 1 1 1

1 0 0 0

1 0 0 1 0

1 0 0 1

1 0 0 1 1

1 0 1 0

1 0 1 1 0

1 0 1 1

1 0 1 1 1

1 1 0 0

1 1 0 1 0

1 1 0 1

1 1 0 1 1

1 1 1 0

1 1 1 0 0

1 1 1 1

1 1 1 0 1

Итак, соответственно этой таблице формируется код 4В/5В, затем передается по линии с помощью физического кодирования по
одному из методов потенциального кодирования, чувствительному только к длинным последовательностям нулей — например, в помощью
цифрового кода NRZI.

Символы кода 4В/5В длиной 5 бит гарантируют, что при любом их сочетании на линии не могут встретиться более трех нулей подряд.

Буква ^ В в названии кода означает, что элементарный сигнал имеет 2 состояния — от английского binary — двоичный. Имеются
также коды и с тремя состояниями сигнала, например, в коде 8В/6Т для кодирования 8 бит исходной информации используется
код из 6 сигналов, каждый из которых имеет три состояния. Избыточность кода 8В/6Т выше, чем кода 4В/5В, так как на 256
исходных кодов приходится 36=729 результирующих символов.

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

Единственное требование — для обеспечения заданной пропускной способности линии передатчик, использующий избыточный код,
должен работать с повышенной тактовой частотой. Так, для передачи кодов 4В/5В со скоростью 100 Мб/с передатчик должен
работать с тактовой частотой 125 МГц. При этом спектр сигнала на линии расширяется по сравнению со случаем, когда по
линии передается чистый, не избыточный код. Тем не менее, спектр избыточного потенциального кода оказывается уже
спектра манчестерского кода, что оправдывает дополнительный этап логического кодирования, а также работу приемника
и передатчика на повышенной тактовой частоте.

В основном для локальных сетей проще, надежней, качественней, быстрей — использовать логическое кодирование данных
с помощью избыточных кодов, которое устранит длительные последовательности нулей и обеспечит синхронизацию
сигнала, потом на физическом уровне использовать для передачи быстрый цифровой код NRZI, нежели без предварительного
логического кодирования использовать для передачи данных медленный, но самосинхронизирующийся манчестерский код.

Например, для передачи данных по линии с пропускной способностью 100М бит/с и полосой пропускания 100 МГц,
кодом NRZI необходимы частоты 25 — 50 МГц, это без кодирования 4В/5В. А если применить для NRZI еще и
кодирование 4В/5В, то теперь полоса частот расширится от 31,25 до 62,5 МГц. Но тем не менее, этот диапазон
еще «влазит» в полосу пропускания линии. А для манчестерского кода без применения всякого дополнительного
кодирования необходимы частоты от 50 до 100 МГц, и это частоты основного сигнала, но они уже не будут пропускаться
линией на 100 МГц.

Скрэмблирование

Другой метод логического кодирования основан на предварительном «перемешивании» исходной информации таким
образом, чтобы вероятность появления единиц и нулей на линии становилась близкой.

Устройства, или блоки, выполняющие такую операцию, называются скрэмблерами (scramble — свалка, беспорядочная сборка) .

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

Избыточные биты при этом по линии не передаются.

Суть скремблирования заключается просто в побитном изменении проходящего через систему потока данных. Практически
единственной операцией, используемой в скремблерах является XOR — «побитное исключающее ИЛИ», или еще говорят —
сложение по модулю 2. При сложении двух единиц исключающим ИЛИ отбрасывается старшая единица и результат записывается — 0.

Метод скрэмблирования очень прост. Сначала придумывают скрэмблер. Другими словами придумывают по какому соотношению
перемешивать биты в исходной последовательности с помощью «исключающего ИЛИ». Затем согласно этому соотношению из текущей
последовательности бит выбираются значения определенных разрядов и складываются по XOR между собой. При этом все разряды
сдвигаются на 1 бит, а только что полученное значение («0» или «1») помещается в освободившийся самый младший разряд.
Значение, находившееся в самом старшем разряде до сдвига, добавляется в кодирующую последовательность, становясь очередным
ее битом. Затем эта последовательность выдается в линию, где с помощью методов физического кодирования передается к
узлу-получателю, на входе которого эта последовательность дескрэмблируется на основе обратного отношения.

Например, скрэмблер может реализовывать следующее соотношение:

где Bi — двоичная цифра результирующего кода, полученная на i-м такте работы скрэмблера, Ai — двоичная цифра исходного
кода, поступающая на i-м такте на вход скрэмблера, Bi-3 и Bi-5 — двоичные цифры результирующего кода, полученные на
предыдущих тактах работы скрэмблера, соответственно на 3 и на 5 тактов ранее текущего такта, ⊕ — операция исключающего
ИЛИ (сложение по модулю 2).

Теперь давайте, определим закодированную последовательность, например, для такой исходной последовательности 110110000001.

Скрэмблер, определенный выше даст следующий результирующий код:

B11=1 (первые три цифры результирующего кода будут совпадать с исходным, так как еще нет нужных предыдущих цифр)

Таким образом, на выходе скрэмблера появится последовательность 110001101111. В которой нет последовательности из шести нулей, п
рисутствовавшей в исходном коде.

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

Существуют другие различные алгоритмы скрэмблирования, они отличаются количеством слагаемых, дающих цифру
результирующего кода, и сдвигом между слагаемыми.

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

На практике для этих целей обычно применяется комбинация двух методов:

а) добавление в поток информации синхронизирующих битов, заранее известных приемной стороне, что позволяет ей при ненахождении
такого бита активно начать поиск синхронизации с отправителем,

б) использование высокоточных генераторов временных импульсов, что позволяет в моменты потери синхронизации производить
декодирование принимаемых битов информации «по памяти» без синхронизации.

Существуют и более простые методы борьбы с последовательностями единиц, также относимые к классу скрэмблирования.

Для улучшения кода ^ Bipolar AMI используются два метода, основанные на искусственном искажении последовательности нулей запрещенными символами.

Рис. 3 Коды B8ZS и HDB3

На этом рисунке показано использование метода ^ B8ZS (Bipolar with 8-Zeros Substitution) и метода HDB3 (High-Density Bipolar 3-Zeros) для корректировки
кода AMI. Исходный код состоит из двух длинных последовательностей нулей (8- в первом случае и 5 во втором).

Код B8ZS исправляет только последовательности, состоящие из 8 нулей. Для этого он после первых трех нулей вместо оставшихся пяти нулей вставляет пять
цифр: V-1*-0-V-1*. V здесь обозначает сигнал единицы, запрещенной для данного такта полярности, то есть сигнал, не изменяющий полярность предыдущей
единицы, 1* — сигнал единицы корректной полярности, а знак звездочки отмечает тот факт, что в исходном коде в этом такте была не единица, а ноль. В
результате на 8 тактах приемник наблюдает 2 искажения — очень маловероятно, что это случилось из-за шума на линии или других сбоев передачи. Поэтому
приемник считает такие нарушения кодировкой 8 последовательных нулей и после приема заменяет их на исходные 8 нулей.

Код B8ZS построен так, что его постоянная составляющая равна нулю при любых последовательностях двоичных цифр.

Код HDB3 исправляет любые 4 подряд идущих нуля в исходной последовательности. Правила формирования кода HDB3 более сложные, чем кода B8ZS.
Каждые четыре нуля заменяются четырьмя сигналами, в которых имеется один сигнал V. Для подавления постоянной составляющей полярность сигнала
V чередуется при последовательных заменах.

Кроме того, для замены используются два образца четырехтактовых кодов. Если перед заменой исходный код содержал нечетное число единиц, то
используется последовательность 000V, а если число единиц было четным — последовательность 1*00V.

Таким образом, применение логическое кодирование совместно с потенциальным кодированием дает следующие преимущества:

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

Линейные блочные коды

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

Кодер служит для преобразования поступающей от источника сообщений последовательности из k информационных
символов в последовательность из n cимволов кодовых комбинаций (или кодовых слов). Совокупность кодовых слов образует код.

Множество символов, из которых составляется кодовое слово, называется алфавитом кода, а число различных символов в
алфавите – основанием кода. В дальнейшем вследствие их простоты и наибольшего распространения рассматриваются главным
образом двоичные коды, алфавит которых содержит два символа: 0 и 1.

Рис. 4 Система передачи дискретных сообщений

Правило, по которому информационной последовательности сопоставляется кодовое слово, называется правилом кодирования.
Если при кодировании каждый раз формируется блок А из k информационных символов, превращаемый затем в n-символьную
кодовую комбинацию S, то код называется блочным. При другом способе кодирования информационная последовательность на
блоки не разбивается, и код называется непрерывным.

С математической точки зрения кодер осуществляет отображение множества из 2k элементов (двоичных информационных
последовательностей) в множество, состоящее из 2n элементов (двоичных последовательностей длины n). Для практики
интересны такие отображения, в результате которых получаются коды, обладающие способностью исправлять часть ошибок
и допускающие простую техническую реализацию кодирующих и декодирующих устройств.

Дискретный канал связи – это совокупность технических средств вместе со средой распространения радиосигналов, включенных
между кодером и декодером для передачи сигналов, принимающих конечное число разных видов. Для описания реальных каналов
предложено много математических моделей, с разной степенью детализации отражающих реальные процессы. Ограничимся рассмотрением
простейшей модели двоичного канала, входные и выходные сигналы которого могут принимать значения 0 и 1.

Наиболее распространено предположение о действии в канале аддитивной помехи. Пусть S=(s1,s2,…,sn)
и Y=(y1,y2,…,yn) соответственно входная и выходная последовательности двоичных символов.
Помехой или вектором ошибки называется последовательность из n символов E=(e1,e2,…,en), которую
надо поразрядно сложить с переданной последовательностью, чтобы получить принятую:

Y=S+E

Таким образом, компонента вектора ошибки ei=0 указывает на то, что 2-й символ принят правильно (yi=si),
а компонента ei=1 указывает на ошибку при приеме (yi≠si).Поэтому важной характеристикой вектора ошибки
является число q ненулевых компонентов, которое называется весом или кратностью ошибки. Кратность ошибки – дискретная случайная величина,
принимающая целочисленные значения от 0 до n.

Классификация двоичных каналов ведется по виду распределения случайного вектора E. Основные результаты теории кодирования получены в
предположении, что вероятность ошибки в одном символе не зависит ни от его номера в последовательности, ни от его значения. Такой
канал называется стационарным и симметричным. В этом канале передаваемые символы искажаются с одинаковой вероятностью
P, т.е. P(ei=1)=P, i=1,2,…,n.

Для симметричного стационарного канала распределение вероятностей векторов ошибки кратности q является биноминальным:

P(Ei)=Pq(1-P)n-q

которая показывает, что при P<0,5 вероятность β2j является убывающей функцией q,
т.е. в симметричном стационарном канале более вероятны ошибки меньшей кратности. Этот важный факт используется при построении
помехоустойчивых кодов, т.к. позволяет обосновать тактику обнаружения и исправления в первую очередь ошибок малой кратности.
Конечно, для других моделей канала такая тактика может и не быть оптимальной.

Декодирующее устройство (декодер) предназначено оценить по принятой последовательности Y=(y1,y2,…,yn)
значения информационных символов A=(a1,a2,…,ak,).
Из-за действия помех возможны неправильные решения. Процедура декодирования включает решение двух задач: оценивание переданного кодового
слова и формирование оценок информационных символов.

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

Наибольшую трудность представляет первая задача декодирования. При равновероятных информационных последовательностях ее оптимальное решение
дает метод максимального правдоподобия. Функция правдоподобия как вероятность получения данного вектора Y при передаче кодовых слов
Si, i=1,2,…,2k на основании Y=S+E определяется вероятностями появления векторов ошибок:

P(Y/Si)=P(Ei)=Pqi(1-P)n-qi

где qi – вес вектора Ei=Y+Si

Очевидно, вероятность P(Y/Si) максимальна при минимальном qi. На основании принципа максимального правдоподобия оценкой S является кодовое слово,
искажение которого для превращения его в принятое слово Y имеет минимальный вес, т. е. в симметричном канале является наиболее вероятным (НВ):

S=Y+EHB

Если несколько векторов ошибок Ei имеют равные минимальные веса, то наивероятнейшая ошибка EHB определяется случайным выбором среди них.

В качестве расстояния между двумя кодовыми комбинациями принимают так называемое расстояние Хэмминга, которое численно равно количеству символов, в которых одна
комбинация отлична от другой, т.е. весу (числу ненулевых компонентов) разностного вектора. Расстояние Хэмминга между принятой последовательностью Y и всеми
возможными кодовыми словами 5, есть функция весов векторов ошибок Ei:

Поэтому декодирование по минимуму расстояния, когда в качестве оценки берется слово, ближайшее к принятой
последовательности, является декодированием по максимуму правдоподобия.

Таким образом, оптимальная процедура декодирования для симметричного канала может быть описана следующей последовательностью операций. По принятому
вектору Y определяется вектор ошибки с минимальным весом EHB, который затем вычитается (в двоичном канале — складывается по модулю 2) из Y:

Y→EHB→S=Y+EHB

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

Широко распространены линейные коды, называемые так потому, что их кодовые слова образуют линейное
подпространство над конечным полем. Для двоичных кодов естественно использовать поле характеристики p=2.
Принадлежность принятой комбинации Y известному подпространству является тем признаком, по которому
выносится решение об отсутствии ошибок (EHB=0).

Так как по данному коду все пространство последовательностей длины n разбивается на смежные классы,
то для каждого смежного класса можно заранее определить вектор ошибки минимального веса,
называемый лидером смежного класса. Тогда задача декодера состоит в определении номера смежного класса,
которому принадлежит Y, и формировании лидера этого класса.

Предложите, как улучшить StudyLib

(Для жалоб на нарушения авторских прав, используйте

другую форму
)

Ваш е-мэйл

Заполните, если хотите получить ответ

Оцените наш проект

1

2

3

4

5

Понравилась статья? Поделить с друзьями:
  • Кодназплатежа 1 ошибка
  • Кодировка ошибок на ваз
  • Кодировка отклонена ошибка 31 вне диапазона абс
  • Кодирование прервано ошибка 31 запрос вне нормы
  • Кодирование отклонено ошибка 31 вне диапазона