Материал: 5856

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
dкод

76

мальным кодом, то есть, среди всех кодов с заданными значениями r и3 нет другого кода, который бы обладал меньшей избыточностью

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

Это стремление просматривается в схеме проверок, построенной наиболее рациональным образом, если вспомнить, что результат каждой проверки выдаётся в двоичной форме (да - нет). Представим себе, что перед декодированием комбинация дополнена слева ещё одним знаком s0 0 , симво-

лизирующим отсутствие ошибок в остальных символах. Тогда проведение проверок на чётность напоминает процедуру угадывания числа, которое может принять любое из 2r значений. Схема проверок на чётность указывает, каким должен быть смысл каждого из задаваемых вопросов при условии, что на каждый из них даётся ответ “да” или “нет”. Схема проверок кода Хэмминга такова, что позволяет уверенно определить заданное число при минимальном количестве вопросов r.

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

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

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

Стимулом для создания таких кодов явилось желание использовать для кодирования и декодирования простые устройства, подобные линейным цифровым фильтрам (разд. 2.7).

Поэтому и здесь для описания n-разрядных комбинаций s, состоящих из M-ичных символов, удобно использовать полиномы (2.13)

s (s , s ,..., s

) s(x) s

x0 s x1

... s

n 1

xn 1

,

(3.30)

0 1

n 1

0

1

 

 

 

 

где sj=0; 1;…; M-1.

77

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

Во-первых, мы ограничимся изучением лишь двоичных кодов, когда любой символ sj в любой точке тракта передачи может принимать лишь одно из двух значений: 0 или 1 (кстати, общая теория циклических кодов охватывает и недвоичные коды, причем при больших значениях M код приобретает некоторые новые свойства, но эта теория, естественно, несколько сложнее). Чтобы обеспечить это ограничение, суммирование символов (коэффициентов полиномов) нужно проводить по модулю 2 (смотри формулы (2.1)). В дальнейшем, ради простоты, будем использовать знак обычного суммирования, например,

x+x=x(1+1)=0, x5 + x5 + x5 = x5 , (1 x3 x4 ) (1 x2 x4 ) x2 x3 .

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

xmn 1,

(3.31)

где m – любое целое неотрицательное число, следовательно, xmn 1 xmn 1 0 ,

xn 1 0 , xmn j x j и т.д.

Например, при n=5 имеем

(1 x4 )(x2 x3 ) x2 x3 x6 x7 x2 x3 x x2 x x3 . В итоге любой полином будет содержать члены с x в степени, не превышающей n-1.

Итак, при умножении полиномов используются соглашения о суммировании mod 2 и (3.31), а правила деления полиномов, разумеется, вытекают из правил их умножения.

Поскольку коэффициенты полиномов – целые (двоичные) числа, при делении полинома на полином получаем полином-частное и полиномостаток. Например, при n=5 после выполнения операции (x x4 )(1 x2 ) имеем частное (1 x2 ) и остаток (1 x) . В отличие от случая фильтрации обычных сигналов (разд. 2.7) при работе с циклическим кодом не имеет значения, каким получилось частное, важно лишь, каково значение остатка. Для обозначения полинома, соответствующего остатку от деления a(x) на b(x), будем

использовать один из двух вариантов:

 

res(x) или a(x)mod b(x),

(3.32)

при этом видно, что максимальный показатель степени полинома res(x) не превышает p-1, где p – степень полинома b(x).

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

res(x) a(x) mod(xn 1).

(3.33)

Другая особенность, вытекающая из формул (3.31) и (3.33), заключает-

78

ся в том, что циклическая перестановка символов вправо в n-разрядной комбинации отображается умножением соответствующего полинома на x. Например, при n=7 для комбинации s=0110011, s(x) x x2 x5 x6 после циклической перестановки имеем s* 1011001, то есть s* (x) 1 x2 x3 x6 xs(x) .

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

дом полностью определяются его производящим (порождающим, генераторным) полиномом степени r

g(x) g

0

g x ... g

xr ,

(3.34)

 

 

1

r

 

 

где g j 0;1, причём всегда g0 gr

1. Формально этот полином тоже содержит

n членов, просто у него s j 0 при

j r .

 

 

 

Фундаментальное свойство циклического кода состоит в том, что полином s(x), соответствующий любой разрешённой (передаваемой) комбинации s, делится без остатка на производящий полином

s(x) mod g(x) 0 .

(3.35)

Отсюда следует метод декодирования принимаемой комбинации v(x): нужно вычислить остаток res(x) от деления этого полинома на g(x). Степень полинома res(x) не превышает r-1, то есть этот остаток содержит r бит. Если оказалось, что res(x) 0, то это несомненно указывает на наличие ошибок в принятой комбинации (обнаружение ошибок).

Напомним, что переданная s и принятая v комбинации связаны соот-

ношение (3.2), откуда следует

 

v(x)=s(x)+e(x),

(3.36)

где e(x) – полином ошибок. Тогда с учётом (3.35) имеем соотношение, аналогичное формуле (3.17), res(x)=v(x)modg(x)=s(x)modg(x)+e(x)modg(x)=e(x)modg(x), (3.37)

то есть величина остатка не зависит от того, какая комбинация была передана, а зависит лишь от того, какие произошли ошибки. Таким образом, остаток res(x), вычисленный при декодировании, обладает тем же свойством, что и синдром c любого линейного блочного кода.

Отсюда вытекает первое требование, которому должен удовлетворять “хороший” производящий полином: если нужно обнаруживать все ошибки кратности q qo , то для всех таких полиномов e(x) при вычислении по фор-

муле (3.43) должен получаться ненулевой остаток.

Из описанной процедуры декодирования становится очевидным и способ исправления ошибок: вычислив остаток для принятой комбинации v(x), нужно подставить его значение в уравнение (3.37) res(x)=e(x)mod g(x) и найти из него вектор ошибок e(x). Тогда очевидно второе требование к полиному g(x): если нужно исправлять все ошибки кратности 1 q qи , то всем таким

полиномам e(x) должны соответствовать различные ненулевые остатки, иначе не удастся однозначно решить уравнение (3.37). Кстати, максимальное количество различных ненулевых остатков определяется очевидным образом

79

Nres 2r 1,

(3.38)

а число различных однократных ошибок равно n, число двукратных ошибок равно Cn2 и т.д.

Обратимся к проблеме кодирования. Если полином a(x) степени k-1, соответствующий входной комбинации информационных символов, умно-

жить на производящий полином

 

s(x)=a(x)g(x),

(3.39)

то получим полином, удовлетворяющий условию (3.35) (сравните с формулой (3.21)). Код, формируемый таким образом, не является систематическим.

Для кодирования в систематической форме (информационные симво-

лы a j последовательно переносятся в кодовую комбинацию s и занимают k первых позиций) можно применить другой метод

s(x) xr a(x) [xr a(x)]mod g(x) .

(3.40)

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

1)умножение a(x) на xr означает, что k информационных символов сдвигается на r позиций вправо и в итоге занимают k старших (по степеням x) разрядов; r разрядов слева при этом оказываются нулевыми;

2)вычисляется r-разрядный остаток res(x) от деления полинома xr a(x) ,

соответствующего полученной таким образом комбинации;

3) эти r элементов остатка помещаются на r нулевых позиций комбинации, полученной в пункте 1, в качестве проверочных символов.

Легко проверить, что такая комбинация удовлетворяет условию (3.35). Коды, полученные по формулам (3.39) и (3.40), эквивалентны, но это разные коды, то есть им соответствуют разные кодовые таблицы. Но поскольку оба кода обладают одним и тем же свойством (3.35), алгоритмы обнаружения и исправления ошибок для них должны быть одинаковы.

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

Во-первых,

n 2p 1,

(3.41)

где р – целое число ( p 3) ;

 

r pqи ,

(3.42)

где qи - максимальная кратность гарантированно исправляемых ошибок, при этом кодовое расстояние dкод 2qи 1. При r k это неравенство обычно об-

ращается в равенство. Во-вторых,

80

g(x) modb(x) 0

(3.43)

для любого b(x), если b(x) 1 и b(x) g(x) . Это значит, что многочлен g(x) является неприводимым (простым), то есть не делится без остатка ни на какой

другой многочлен, кроме 1 и самого себя.

 

В-третьих,

 

g(x)h(x) xn 1 0 ,

(3.44)

то есть двучлен xn 1 делится без остатка на g(x) (сравните это с формулой

(3.18)).

Коды, обладающие указанным набором свойств, называются кодами БЧХ. Таблицы производящих полиномов для таких кодов даны в ряде книг [2,8]. Некоторые из полиномов приведены в Приложении 1.

Обратите внимание, что при qи 1, dкод

3 для (3.48) имеем р=r и для

(3.41) получим

 

n 2r 1.

(3.45)

Таким образом, самый простой циклический код БЧХ эквивалентен коду Xэмминга (3.26) и, следовательно, также является оптимальным и совершенным.

Полином степени k, входящий в (3.44),

h(x) h

h x ... h xk

(3.46)

0

1

k

 

называется проверочным полиномом данного циклического кода, причём всегда h0 hk 1. Таблицы проверочных полиномов не приводятся, поскольку

его легко можно найти из (3.44).

Вполне естественно, что для кодирования и декодирования вместо полинома g(x) можно использовать полином h(x), при этом фундаментальное свойство (3.41) формулируется следующим образом

s(x)h(x) mod(xn 1) s(x)h(x) 0,

(3.47)

то есть произведение s(x)h(x) делится без остатка на xn 1, при этом обозначение mod(xn 1) опущено, поскольку эта операция уже была нами принята в соглашениях (3.31) и (3.33). Кстати, циклический код – это линейный блочный код, поэтому неудивительно, что эта формула напоминает (3.22).

Разумеется, это соотношение также можно использовать для декодирования, то есть для обнаружения ошибок. Итак, и кодер, и декодер можно строить либо на основе производящего полинома, либо на основе проверочного. Во всех случаях кодер и декодер содержат регистр сдвига и сумматоры по модулю 2, причём количество ячеек регистра сдвига равно степени полинома. На практике обычно применяют коды с малой избыточностью, для которых r k , поэтому кодер и декодер выгоднее строить на основе производящего полинома g(x).

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

Источник: https://studfile.net/preview/16438528/