Кодирование проще выполнять систематическим кодом. В этом случае необходимо вычислить значения проверочных символов. Каждый проверочный символ согласно алгоритму кодирования (матричное умножение) есть сумма по модулю два самое большее информационных символов. Следовательно, число двоичных сумматоров в схеме кодера будет не больше . Для согласования скоростей приема безизбыточных данных от источника и передачи закодированного сообщения в канал может потребоваться входной и выходной буферы из и ячеек памяти. Общая сложность , где - скорость кода.
Сложность декодера в первую очередь зависит от того, обнаруживаем мы ошибки или исправляем, является декодер полным или неполным. Декодирование по максимуму правдоподобия называют еще декодированием по манизму расстояния. Принятая комбинация сравнивается по метрике Хэмминга с каждой из кодовых и выбирается как решение та кодовая комбинация, к которой ближе всего принятая последовательность. Значит, потребуются - разрядных схем сравнения, буферные регистры и память для кодовых слов. Общая сложность составит , т.е. растет по экспоненте в зависимости от числа информационных разрядов. В неполном декодере предусматриваются сравнение полученного наименьшего расстояния со значением кодового расстояния, и отказ от декодирования, если это расстояние больше .
При синдромном декодировании на вычисление синдрома потребуется не более сумматоров и для полного декодера необходима память лидеров смежных классов (вариантов направляемых ошибок) на -разрядных слов. Общая сложность будет составлять , т.е. сложность синдромного декодера растет по экспоненте в зависимости от числа избыточных символов. Если ошибки только обнаруживать, сложность декодера будет определяться схемой вычисления синдрома .
Относительно синдромного декодирования надо сделать два замечания. Во-первых, не обязательно в качества лидеров смежных классов надо брать векторы наименьшего веса. Вместо хэммингового расстояния в канале с пакетированием надо использовать комбинаторную метрику, т.е. исправлять наиболее вероятные варианты ошибок - пакеты. Во-вторых, не обязательно в памяти хранить все варианты ошибок, можно использовать математическую структуру кода (например, цикличность).
Основная идея, лежащая в основе алгоритма, заключается в том, что информационные символы могут быть вычислены через канальные символы разными способами. Решение выносится голосованием по большинству. Требуется, однако, выполнение некоторых условий к проверочным соотношениям. Это означает, что не любой код допускает мажоритарный вариант декодирования. Рассмотрим код с . Его проверочная матрица:
Проверочные соотношения, определяющие синдром, будут следующими: или .
Поскольку, если нет ошибок, все , то и комбинации . Система проверок называется разделенной относительно последнего символа. Он входит во все проверочные соотношения, каждый другой символ только в одно. Если произошла одна ошибка в позиции , то получим . Если одна ошибка в любой другой позиции получим три единицы и ноль. Значит, ошибку в 14 позиции исправим по правилу: если , то , иначе .
Любая комбинация из двух ошибок, не содержащая , приведет к нарушению не более двух уравнений, а содержащая не менее трех. Значит можно по тому же правилу исправлять и все двойные ошибки. Рассматривается циклический код, поэтому ошибки в остальных позициях тоже исправляются по четырем соотношениям после циклического сдвига.
Рассмотренный код является кодом с одношаговым разделением. Более общий случай - -шаговое разделение. Основное достоинство алгоритма мажоритарного декодирования – простота. Если нужна высокая скорость и умеренный выигрыш от кодирования, то надо применять этот алгоритм. Ниже приведена схема декодера - кода.
Циклический код является частным случаем линейного кода, когда любая циклически сдвинутая кодовая комбинация является также кодовой комбинацией. Непосредственная проверка выполнения этого условия для линейных кодов представляющих практический интерес неосуществима, т.к. велика мощность кода: , где - основание кода, - число информационных символов (). К циклическому коду можно прийти как к частному случаю другого кода – полиномиального. Полиномиальный код задается наиболее просто образующим многочленом , степени , - длина кодовой комбинации. Множество многочленов степени меньшей делящихся на является множеством кодовых комбинаций. Полиномиальный код это тот же линейный код только иначе представленный. Вместо -символьных последовательностей (векторов) их многочленная запись по формальной измененной . Формальная переменная используется по сути для указания номера позиции в -разрядной комбинации, где имеется ненулевой символ. В пользу перехода к многочленному представлению можно указать по крайней мере три аргумента:
- при в среднем на 50% «экономится» длина записи;
- появляется более простая процедура выбора подпространства (т.е. кода), вместо базисных векторов можно использовать образующий многочлен;
- упрощается процедура кодирования, вместо матричного умножения, умножение (или деление) многочленов.
Найдем необходимые и достаточные условия цикличности полиномиального кода. Пусть - кодовый вектор, его многочленная запись . Циклически сдвинутый вектор , его многочленная запись .
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.