Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы циклических кодов.doc
Скачиваний:
35
Добавлен:
21.09.2019
Размер:
1.48 Mб
Скачать

4. Реализация операций умножения и деления многочленов в поле двоичных чисел

Операции умножения и деления многочленов реализуются с помощью регистров сдвига, состоящих из сумматоров, запоми­нающих устройств и устройств умножения. Сумматор (рис. 1.1, а) представляет собой устройство, осуществляющее сложение по модулю 2 величин на входах 1 и 2. Запоминающее устройство (рис. 1.1,6) служит для хранения в течение определенного вре­мени постоянной величины а.

Рис. 1.1. Функциональное обозначение сумма­тора по модулю два (а), запоминающего уст­ройства (б) и устройства умножения (в)

Устройство умножения (рис. 1.1, в) осуществляет умноже­ние некоторой входной величины с на постоянный множитель а.

Умножение многочленов

Умножение некоторого произвольного многочлена f1 (х) = = а0 +a1x+…+an-1xn-1+anxn на фиксированный много­член f2(х)=b0+b1x+…+bk-1xk-1+bkxk осуществляет­ся с помощью регистров сдвига, изображенных на рис. 1.2. Эти регистры строятся по виду многочлена f2 (x) и отличаются лишь расположением сумматоров. Предполагается, что регистр пер­воначально находится в нулевом состоянии. На вход регистра поступают коэффициенты многочлена f1 (x). начиная со стар­шей степени, а затем следуют k нулей.

Схема, изображенная на рис. 1.2, а и представляющая со­бой регистр с вынесенными сумматорами, работает следующим образом. Когда на входе имеет место первый коэффициент ап, то на выходе появляется первый коэффициент произведения f1(x)f2(x), равный anbk. Кроме того, коэффициент аn запоми­нается в первой ячейке памяти регистра. Со вторым тактом на входе появляется коэффициент an-1 и записывается в первую ячейку памяти, а коэффициент аn этим же тактом переписыва­ется из первой во вторую ячейку регистра. При этом на выходе схемы появляется значение второго коэффициента произведения f1(x) f2 (x), равное п-1 bk+ an bк-1 ) и так далее.

Таким образом, схема работает в соответствии с таблицей.

Следовательно, произведение будет равно:

Схема, изображенная на рис. 1.2,6 и представляющая со­бой регистр с встроенными сумматорами, работает аналогично предыдущей. Очевидно, что обе схемы равноценны.

выход

Рис. 1.2. Реализация умножения многочленов с помощью регистров сдвига с вынесенными (а) и встроенными (б) сумматорами

Рассмотрим некоторые характерные особенности построения этих схем для многочленов с двоичными коэффициентами, а именно с коэффициентами 0 и 1.

Умножение на величину bi производим по правилу:

Для bi= 0 :ajbi=aj0=0,

и для bi=1:ajbi=aj*1=aj,

Таким образом, умножение на 0 соответствует разорванной цепи, а умножение на 1 — короткому замыканию.

Пусть, например, f2 (X) = 1 + х+ х3 +x5, т. е. b0= 1, b1= 1,

b2=0,b3=1,b4=0,b5=1.

Рис. 1.3. Устройство умножения на многочлен f (x) = 1 + х + x3 + х5

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

Аналогично строится регистр с вынесенными сумматорами.

Деление многочленов

Операция деления многочленов может быть реализована с помощью регистра сдвига с обратными связями. Схема деле­ния произвольного многочлена f1(х) = a0+a1x+…+an-1xn-1+anxn на постоянный многочлен f2 (х)= b0+b1x+…+bk-1xk-1+bkxk представлена на рис. 1.4.

Рис. 1.4. Реализация деления на многочлен с помощью регистра сдвига c обратными связями

До поступления многочлена f1 (x) на вход схемы, запоминаю­щие элементы должны находиться в нулевом состоянии. На выходе схемы будет 0 до тех пор, пока первый элемент аn мно­гочлена f1(x) не достигнет конца регистра, т. е. в течение пер­вых k сдвигов. После этого на выходе в соответствии с (1.3) по­явится первый элемент частного, а именно an/bk или an*bk-1, по­лучаемый умножением элемента аn, следующего из последней ячейки памяти, на величину bk-1. Как видно из (1.3), для каж­дого ненулевого коэффициента частного с, из делимого необхо­димо вычесть многочлен cif2(x). Вычитание осуществляется в сумматорах по модулю два после умножения коэффициента частного, например anbk-1 , на множители —bо, b1,…,bk-1.

Поскольку мы рассматриваем двоичное поле, то коэффици­енты b0,b1,…,bk-1 могут принимать значения 0 или 1, а зна­чение bк —только 1. Учитывая также, что при сложении по модулю 2 знак минус может быть заменен плюсом, схема на рис. 1.4 значительно упростится, если устройства умножения заменить, как и в регистрах умножения, короткими замыкания­ми для bi = 1 и обрывом цепи для bi = 0. При этом число встроенных в регистр сумматоров уменьшится и будет равно числу единичных коэффициентов bi= 1 (i =0, 1, .,., k—1).

Пример. Пусть f2 (х) = 1 +x2 + х4 + х5 т. е. bо =1, b1=0,b2=1,b3=0,b4=1,b5=1.


Рис. 1.5. Схема деления на многочлен f(x)= 1 +x2+ х4+x5



Рис. 1.6. Схема, реализующая одновременное умножение на много член f2(x)=b0+b1x+…+bkxk и деление на многочлен f3(x)=c0+c1x+…+ck

bв0 -I- п.х + ... + ekxk и деление на многочлен /s(*) =

На рис. 1.5 представлена схема деления на заданный мно­гочлен.

На основе регистра с встроенными сумматорами может быть построена схема (рис. 1.6), реализующая одновременное умно­жение на многочлен f2(x)=b0+b1x+b2x2+…+bkxk и деление на многочлен f3(x)=c0+c1x+c2x2+…+ckxk.

2. ОБЩИЕ ПРИНЦИПЫ ПОСТРОЕНИЯ ЦИКЛИЧЕСКИХ КОДОВ

Характерной особенностью циклических кодов является представление кодовых комбинаций длины п многочленами сте­пени п— 1 вида

f(x)=c0+c1x+c2x2+…+cn-1xn-1. (2.1)

Вследствие этого циклические коды называют часто полино­миальными кодами. Такое представление циклических кодов позволяет распространить на них приведенные выше свойства полей Галуа.

Другой распространенной формой представления комбина­ций циклического кода является векторная форма (coc1c2 ... сn-1), где элементы кода с1- являются коэффициентами много­члена f(x), принадлежащими простому полю GF (р). Для дво­ичных циклических кодов коэффициенты сi принадлежат полю GF (2), т. е. принимают значения 0 и 1.

Таким образом, обе формы представления комбинаций свя­заны между собой тем, что одна вытекает из другой. Например, комбинации (1010001) соответствует многочлен f (x)= 1+x2+ х6.

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

Свойство 2.1. Циклический код в полиномиальном его пред­ставлении можно определить как множество многочленов степени п—1 и меньше, каждый из которых делится без остатка на некоторый многочлен Р (х), называемый образующим или порождающим многочленом кода.

Из этого свойства вытекает, что для каждой комбинации циклического кода, представленной многочленом f(x), справед­ливо сравнение

f(x)=[mod Р(х)]. (2.2)

Свойство 2.2. Если некоторая комбинация (c0c1c2cn-1) принадлежит какому-либо циклическому коду, то и комбинация, полученная из предыдущей в результате циклического сдвига ее элементов, например (сn-1 c0c1 … cn-2), также принадлежит этому циклическому коду.

Это свойство основывается на свойстве 1.3 полей Галуа, со­гласно которому любой неприводимый в поле двоичных чисел многочлен Р (х) степени т является делителем двулена (x2^m-1-1), т. е.

x2^m-1-1≡0[modP(x)]. (2.3)

Таким образом, выбрав длину комбинации п, удовлетворяю­щую равенству п = 2т — 1, получим

xn-1≡0[modP(x)]. (2.4)

При таком значении п, умножив на х многочлен комбинации циклического кода f(х), представленного в виде (2.1), получим: x*f(x) =сох + с]х2+ ... + сn-n-1 + сn-1хn. В силу (2.4) можно записать: сn-1xn≡сn-1[mod Р (х)]. Тогда

x*f(x)сп-1 + сох+с1х2 + ...n-2хп-1 (2.5)

Но так как согласно свойству 2.1 многочлен f (x) делится на Р (х) без остатка, то и многочлен xf (x), представленный много­членом (2.5), также делится на Р(х). Отсюда вектор n-1сос1 ... сn-2 ), полученный из исходной комбинации цикли­ческого кода (c0c1c2сn-1) путем циклического сдвига, будет принадлежать также циклическому коду. Из доказательства свойства 2.2 вытекает следствие, которое заключается в том. что для большинства циклических кодов п = 2т—1, где т — степень образующего неприводимого многочлена Р (х). Но на практике иногда выбирают длину комбинации n1меньше 2m-1. Такой циклический код называют укороченным.

Рассмотрим теперь общие принципы построения цикличе­ского кода. Задачей кодирующего устройства является преоб­разование k-элементной комбинации (aoa1 ... аk-1 ) исходного безызбыточного кода в n-элементную комбинацию (c0c1c2 ... cn-1 ) избыточного циклического (п,k)-кода. Таким образом, каждая комбинация циклического кода содержит пk избы­точных элементов.

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

Существует несколько способов кодирования. Наиболее про­стой из них заключается в том, что многочлен (2.1), соответст­вующий комбинации циклического кода, получают путем умно­жения многочлена φ(х) = aо + а1x+ ... ak-1 xk-1, соответ­ствующего исходной комбинации, на образующий многочлен Р(х) степени т, т. е.

f(x) = φ(x)P(x). (2.6)

Отсюда видно, что для циклического (п, k)-кода степень образующего многочлена m = пk, т. е. равна числу избыточных элементов комбинации.

Циклический код, построенный в соответствии с (2.6), на­зывают несистематическим, так как среди элементов комбина­ции (c0c1c2 ... cn-1) нельзя выделить информационные и избы­точные или проверочные.

Другой способ кодирования соответствует систематическому циклическому (п, k)-коду. Построение систематического цикли­ческого кода сводится к тому, чтобы к информационным эле­ментам a0, a1, … ak-1 исходного k-элементного кода добавить (пk) полученных определенным образом избыточных элемен­тов. Причем в каждой комбинации n-элементного циклического кода информационные и избыточные элементы будут занимать определенные позиции. Значения добавленных избыточных эле­ментов должны определяться таким образом, чтобы выполня­лось свойство 2.1 циклических кодов, т. е. деление без остатка на образующий многочлен Р (х).

Чтобы построить систематический циклический код, комби­нацию исходного k-элементного кода, принадлежащую группе порядка 2к, записывают в виде многочлена φ(х) степени к—1. Затем многочлен φ(х) умножается на хn-k, что равносильно приписыванию к исходной k-элементной комбинации n k ну­лей со стороны младшего разряда.

Например, необходимо умножить многочлен φ(х) = 1 +x+x2 на хn-k = х3. Тогда имеем хn-kφ(х) = х3 + х4 + х5. Если записать многочлен φ(х) и результат умножения в виде двоичных комбинаций, то получим

Для φ(х) — 111,

для x3 φ(х) —000111.

Полученное таким образом произведение хn-kφ(х) делим на производящий многочлен Р (х) степени n k. При делении на производящий многочлен Р (х) образуется частное Q(х) той же степени, что и φ(х) и, кроме того, возможно появление ос­татка R (х), т.е.

Видоизменяя уравнение, получим

Очевидно, что многочлен (2.8) соответствует комбинации ци­клического кода, так как он удовлетворяет основному требова­нию циклических кодов, а именно, делится без остатка на про­изводящий многочлен Р(х).

В дальнейшем будем рассматривать только двоичные коды, поэтому знаки «+» и «—» равноценны.

Если многочлен хn-kφ(х)+R(х) записать в виде комбина­ции, то легко заметить, что систематический циклический (n1k)- код можно построить, приписав к каждой кодовой комбинации исходного k-элементного кода остаток от деления многочлена хn-kφ(х) на производящий многочлен Р(х).

Рассмотрим пример построения систематического циклического (n, k)-кода, для которого n=15, k=11 и n-k=4.

В качестве производящего выбран многочлен P(x)=1+x+x4.

Для кодирования комбинации 10100100001, которой соответствует многочлен φ(х)=1+x2+x5+x10, разделим x4φ(х) на производящий многочлен Р(х) и найдем остаток R(х). В результате находим, что R(х)=1+x. Кодовый многочлен образуется путем сложения x4φ(х) и R(х) согласно (2.8):

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

1100 10100100001

проверочные информационные

элементы элементы

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

Систематический циклический код может быть полностью определен своей производящей матрицей, которая строится по следующему правилу. Сначала записывается единичная матрица Еk для исходного k-элементного кода. Далее одночлен, соответствующей каждой из строк Еk, умножается на хn-k и делится на производящий многочлен Р(х). В результате деления получим остатки, каждый из которых соответствует определенной строке матрицы Еk. Из этих остатков составляется дополнительная матрица R, которая приписывается к матрице Еk. Таким образом, производящая матрица для циклического (n, k)-кода будет иметь вид G=[RЕk], где R-приписанная к Еk проверочная матрица размерности k * (n-k).

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

П ример. Пусть необходимо построить циклический код, для которого n=7, k=4, n-k=3, а P(x)=1+x+x3. Прежде всего запишем единичную матрицу Еk:

строкам которой соответствуют одночлены 1, х, х2, х3.

Каждая строка умножается на хn-k = х3 тогда получим новую матрицу, в которой каждая строка будет сдвинута на n— k нулей.

Каждый из полученных многочленов делится на производящий многочлен Р(х) и находится соответствующий остаток степени n-k, который и записывается на месте первых нулей в новой матрице.

Найденные остатки многочленов x3, x4, x5, x6 на P(x)=1+x+x3 будут соответственно равны R1(x)=1+x; R2(x)=x+x2; R3(x)=1+x+x2; R4(x)=1+x2.

Теперь составляем проверочную матрицу R, элементами которой являются остатки в двоичной форме записи:

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

Образующая матрица G позволяет преобразовывать комбинацию исходного кода (a0, a1, … ak-1) в комбинацию циклического кода путем ее умножения на матрицу G. Пусть для рассматриваемого примера кода исходная комбинация равна (1110), т.е. φ(х)=1+x+x2. Умножив ее на матрицу G, т.е. [1110]* G, получим циклическую комбинацию (0101110).

В [7] доказана следующая теорема:

Если V-пространство строк матрицы G=[RЕk], где Еk-единичная матрица размерности k*k, а R-матрица размерности k*(n-k), то V-является нулевым пространством матрицы H=[En-kRT], где En-k- единичная матрица размерности (n-k)*(n-k), а RT-транспорированная матрица R.

По этой теореме двоичный систематический циклический (n,k)-код, производящая матрица которого имеет вид G=[R Еk], является нулевым пространством проверочной матрицы H=[En- kRT] и, следовательно, G*HT=0.

Так, для нашего примера матрица H с учетом найденного ранее матрицы R будет иметь вид:

Легко проверить, что G*HT=0.

Для несистематического кода образующая матрица G строится в соответствии с правилом построения кода, а именно, путем умножения многочлена исходной комбинации φ(x) на порождающий многочлен Р(x). Для получения матрицы G составляют единичную матрицу Ek и каждую ее строку, представленную одночленом xi , умножают на многочлен Р(x). Из коэффициентов полученных многочленов xi* Р(x) составляют образующую матрицу G несистематического кода. Для рассматриваемого выше примера кода (7,4) с Р(x)=1+x+x3, записав произведения xi* Р(x), где i=0,1,2,3, получим следующую матрицу G:

Также, как и для систематического кода, несистематический циклический код должен представлять собой нулевое пространство по отношению к некоторой проверочной матрице H, которая может быть построена по проверочному полиному

Выражение (2.9) следует из свойства 2.2 циклических кодов и сравнения (2.4), согласно которому многочлен Р (х) является делителем двучлена хn + 1, где п = 2n-k — 1. Тогда строки проверочной матрицы Н будут состоять из коэффициентов мно­гочленов хiН(х), где i = 0,1, ..., (п k—1). Так, для рассматриваемого примера кода (7, 4) имеем Н(х)= =(x7+1)/P(x)=1+x+x2+x4.

Записав многочлены Н(х), xH(x), x2H(x), составим проверочную матрицу H:

в которой строки записаны начиная со старшей степени.

Легко проверить, что G*HT =0.

Следует отметить, что может быть построена проверочная матрица H, единая как для систематического, так и для неси­стематического кода, исходя из свойства 2.1 циклических ко­дов. Из этого свойства следует, что, если некоторый элемент а поля GF(2n) является корнем многочлена Р (х), то он явля­ется также и корнем многочлена f (х). Отсюда любая комбина­ция циклического кода, представленная многочленом (2.1), удовлетворяет равенству

f(α)≡0, (2.10)

которое может быть получено как произведение [сос1c2 ... cп-1]НТ, где H-проверочная матрица вида:

H=[1αα2….αn-1]. (2.11)

Учитывая, что для рассматриваемого примера кода (7, 4) по­рождающий многочлен Р(х) = 1+х+x3 является примитив­ным и а — его корень, матрица Н будет состоять из ненулевых элементов поля GF (23), т. е.

H=[1αα2α3α4α5α6].

Заменив элементы αi их двоичными векторами и записав их в виде столбцов получим следующую проверочную матрицу:

Легко проверить, что полученная проверочная матрица Н удовлетворяет равенству G*HT=0 как для систематического, так и для несистематического циклических кодов (7,4), построенных по многочлену Р(х)=1+х+х3.

Принципы обнаружения и исправления ошибок циклическими кодами

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

В общем виде принятая комбинация h(x) в полиномиальном представлении равна сумме h(x)=f(x)+e(x),

где f(x)-многочлен, соответствующий переданной кодовой комбинации,

e(x)-многочлен, соответствующий вектору ошибок.

Ошибки обнаруживаются, если остаток от деления h(x) на Р(х) не равен нулю. Если же остаток равен нулю, то ошибка или отсутствует, или не обнаруживается кодом.

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

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

  1. Принятое сообщение делится на Р(х) и вычисляется ос­таток.

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

  3. Найденный многочлен е (х) вычитается из h (х), в ре­зультате получается f (x), т. е. переданное сообщение.

Другая, применяемая на практике процедура обнаружения и исправления ошибок циклическими кодами, основывается на том, что комбинации циклического кода являются нулевым про­странством по отношению к его проверочной матрице Н. Из этого свойства следует, что произведение вектора любой ком­бинации, принадлежащей циклическому коду, на матрицу Нт равно нулю. Если же в принятой комбинации содержатся ошиб­ки и эта комбинация попадает в число запрещенных, то резуль­тат умножения, называемый синдромом, не будет равен нулю. Обозначив синдром через S = (s0, s1 ...sn-k-1) будем иметь

(h0,h2,h1…hn-1)*HT=(s0s1…sn-k-1), (2.12)

где вектор (h0h1h2…hn-1) соответствует многочлену принятой комбинации h(x), равному h (х) = f (x) -f e (х). Таким обра­зом, ошибки обнаруживаются, если синдром S не равен нулю.

Исправить можно только те конфигурации ошибок в комби­нации, которые дают различные ненулевые синдромы.

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

3. ЦИКЛИЧЕСКИЕ КОДЫ, ИСПРАВЛЯЮЩИЕ ОДНОКРАТНЫЕ ОШИБКИ

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

Согласно описанному ранее принципу построения система­тического циклического (п,k)-кода, каждый многочлен φ (х), соответствующий определенной комбинации исходного кода, должен быть умножен на одночлен хn-k затем хп-кφ(х) делит­ся на производящий многочлен Р (х). Обе эти операции реали­зуются с помощью регистра, включенного по виду многочлена Р(х). В результате деления многочлена хп-kφ (х) на произво­дящий многочлен Р (х) в регистре сдвига будет получен оста­ток R (х) степени, меньшей степени многочлена Р (х). Как было показано, комбинация циклического кода будет выражена в виде многочлена φ(х) с дописанным к нему остатком R (х).

Рассмотрим пример построения и принцип работы кодирую­щего устройства кода (15.11) для производящего многочлена Р(х) = 1 + х +x4 (рис. 3.1). Элементы комбинации, соответст­вующей многочлену φ(х), поступают на выходной сумматор, что реализует умножение хn-kφ (х) = х4φ (х).

Pиc. 3.1. Кодирующее устройство системати­ческого кода (15, 11) с образующим много­членом р(х) = 1 + x+x4

В течение k тактов, пока на вход поступают информацион­ные элементы, ключ Кл. находится в положении 1, при этом информационные элементы без всякой задержки поступают на выход кодирующего устройства. С приходом последнего инфор­мационного элемента в регистре сдвига определяется остаток от деления хn-kφ (х) на Р (х), после чего ключ Кл. переклю­чается в положение 2 и на выход вслед за информационными элементами считывается остаток R(x), т. е. проверочные элемен­ты. Таким образом, с выхода кодирующего устройства поступа­ет комбинация циклического кода.

Кодирующее устройство несистематического (п,k)-кода реа­лизует умножение φ(х)Р(х). Схема построения КУ для кода (15, 11) с образующим полиномом Р (х) = 1 + х + x4 представ­лена на рис. 3.2.

Рис. 3.2. Кодирующее устройство несистематическо­го циклического (15, 11)-кода с образующим мно­гочленом р (х)= 1 + х + х4

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

Любой систематический (п,k)-код, исправляющий однократ­ные ошибки, должен иметь такое число п k проверочных раз­рядов в комбинации, чтобы удовлетворялось неравенство 2n-kn+1 . Код, построенный таким образом, обеспечивает мини­мальное кодовое расстояние между любыми разрешенными ком­бинациями, равное трем.

Как было показано, любая одиночная ошибка может обна­руживаться по ненулевому остатку от деления многочлена h(x), соответствующего принятой комбинации, на производящий мно­гочлен Р (х). Однако для исправления однократных ошибок требуется, чтобы любой ошибке соответствовал определенный отличный от нуля остаток и, во-вторых, чтобы все эти остатки были различны между собой, т. е., чтобы выполнялось взаимо­однозначное соответствие между местоположением ошибки и ее остатком. Эти требования выполняются, если остатки в случае одиночных ошибок будут представлять собой степени первооб­разного элемента, являющегося корнем примитивного много­члена Р(х), и, следовательно, будут ненулевыми элементами поля Галуа GF(2n). Таких различных ненулевых элементов поля GF(2т) будет 2m—1. Пусть на i-й позиции комбинации длины n = 2т—I произошла ошибка, которой соответствует одночлен е (х) = хi. В результате деления принятой комбина­ции на производящий многочлен Р(х) образуется остаток R(x), представляющий собой элемент а1 поля GF(2m), где а — перво­образный элемент поля и корень многочлена Р (х). Этот оста­ток будет содержаться в регистре сдвига, который реализует операцию деления на многочлен Р (х). При этом сдвиг содер­жимого регистра на один шаг соответствует умножению на х с последующим приведением результата по модулю Р (х). Следо­вательно, произведя (п i) сдвигов остатка R (х), мы тем са­мым как бы умножили принятую комбинацию h (х) на хn-1 и разделили результат на Р (х). В регистре при этом останется некоторый новый остаток Ri (х) = xn-iR (x) [modP(x)]. Со­стояние регистра определим из преобразования:

хп-ih(х)=хn-i[ f(x)+ е(х)]=xn-if(х)+хп-iе(х)≡хn ≡1[modP(x)],

где f(х) — разрешенная кодовая комбинация, выраженная в виде многочлена, делящегося на Р (х) без остатка. Следова­тельно, состояние регистра после (ni) сдвигов будет соот­ветствовать элементу поля а°= 1. Обнаружив это состояние, можно легко исправить одиночную ошибку.

Рассмотрим процесс исправления одиночных ошибок деко­дирующим устройством (рис. 3.3) циклического (15,11)кода, производящий многочлен которого имеет вид Р (х)=1+ х+x4 Комбинация циклического кода поступает на вход буферного накопителя емкостью п=15 и одновременно с этим на вход регистра сдвига с обратными связями. Когда элементы комби­нации циклического кода заполнят буфер, в регистре сдвига с обратными связями будет содержаться остаток от деления при­нятой комбинации на производящий многочлен Р (х).

Рис. 3.3. Декодирующее устройство циклического кода (15, 11), исправляющего однократные ошибки

Как было показано, определение ошибочной i-й позиции для рассматриваемого кода осуществляется путем обнаружения со­стояния (1000) через (пi) сдвигов, т. е. тогда, когда ошибоч­ный элемент уже покинет буфер. Следовательно, после буфер­ного накопителя необходимо поставить задержку на один эле­мент, что позволит исправить эту ошибку со следующим так­том (сдвигом). Чтобы предотвратить ложную работу декоди­рующего устройства во время заполнения комбинацией буфера, а также при наличии в принятой комбинации одиночной ошиб­ки на нулевой позиции, соответствующей коэффициенту при х°, поставлен ключ Кл. Этот ключ замыкается в момент поступле­ния на выходной сумматор 111 первого информационного эле­мента, соответствующего коэффициенту при х14в принятой ком­бинации, а размыкается в момент сброса регистра сдвига с обратными связями, т. е. в момент установления состояния 0000. Сброс можно осуществить, например, из блока обнаружения в момент исправления ошибки подачей единицы в сумматор 11.

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