Изучение методов решения разнообразных задач, возникающих при передаче информации от ее источника к получателю, страница 24

G=.

Здесь – двоичный символ (0 или 1), находящийся в -ом разряде -го кодового слова , входящего в выбранный базис.

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

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

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

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

.

Это должно быть выполнено для всех i и j.

Матрица Н, строками которой являются комбинации , называется проверочной. Она содержит n-k  строк и n столбцов. Строки этой матрицы линейно-независимы.

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

.

Комбинация cj представляется (n-k) значным двоичным числом. Если ошибок нет, то синдром является нулевой комбинацией. Если имеется ошибка, то синдром – ненулевая комбинация, причем каждой комбинации соответствует свой вектор ошибки. Поэтому, определив синдром, мы будем знать вектор ошибки, а значит, иметь возможность исправить эту ошибку.

Применение такого кода позволяет при декодировании хранить (n-k) строк проверочной матрицы, а не список из 2k комбинаций, и проверять выполнение (n-k)  равенств. Так при рассмотренном выше коде (100,50) следует хранить  символов вместо 1017 при табличном кодировании, и проверять 50 равенств вместо перебора 1015 расстояний.

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

G=.

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

v1:     00000

v2:00011

v3:01101

v4:11010

v5:01110  v2+ v3

v6:10111  v3+ v4