Министерство образования и науки Российской Федерации Федеральное агентство по образованию Ульяновский государственный т...
4 downloads
216 Views
936KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования и науки Российской Федерации Федеральное агентство по образованию Ульяновский государственный технический университет
Ульяновск 2006
Министерство образования и науки Российской Федерации Федеральное агентство по образованию Ульяновский государственный технический университет
Ульяновск 2006
УДК 681.3 (076) ББК 32.811.4 я7 К 57 Одобрено секцией методических пособий научно-методического совета университета Рецензент канд. техн. наук, доцент кафедры ТОР УлГТУ Б. Н. Романов
К 57
Кодирование информации: методические указания / сост.: В. Д. Горбоконенко, В. Е. Шикина. – Ульяновск: УлГТУ, 2006. – 56 с.
Изложены основные положения теории и методики построения эффективных кодов, оптимальных с точки зрения минимальной средней длины кодовых слов: код Шеннона-Фэно, Хаффмена, префиксные коды. Особое внимание уделено теории помехоустойчивого кодирования, построению корректирующих кодов. Рассмотрены способы обнаружения и исправления ошибок в групповых, циклических кодах, в коде Хемминга. В ходе изложения теоретического материала рассмотрен ряд задач, что в значительной степени упрощает процесс усвоения. После каждого раздела даны задания. Приведенный материал может быть использован при подготовке к практическим занятиям по курсу «Прикладная теория информации» студентами, обучающимися по специальностям 23020165 «Информационные системы и технологии» и 200103165 «Авиационные приборы и измерительновычислительные комплексы». Методические указания подготовлены на кафедре ИВК.
УДК 681.3 (076) ББК 32.811.4 я7
© В. Д. Горбоконенко, В. Е. Шикина, составление, 2006 © Оформление. УлГТУ, 2006
Учебное издание
КОДИРОВАНИЕ ИНФОРМАЦИИ Методические указания Составители: ГОРБОКОНЕНКО Вера Дмитриевна ШИКИНА Виктория Евгеньевна Редактор Н. А. Евдокимова Подписано в печать 30.03.2006. Формат 60×84/16. Бумага офсетная. Печать трафаретная. Усл. печ. л. 3,03. Уч.-изд. л. 3,00. Тираж 100 экз. Заказ .
Ульяновский государственный технический университет 432027, г. Ульяновск, ул. Сев. Венец, д. 32. Типография УлГТУ, 432027, г. Ульяновск, ул. Сев. Венец, д. 32.
СОДЕРЖАНИЕ Раздел 1. Эффективное кодирование 1.1. 1.2. 1.3. 1.4. 1.5. 1.6.
Общая характеристика эффективного кодирования Методика Шеннона – Фэно Кодирование блоками Методика Хаффмена Префиксные коды Упражнения и задачи
Раздел 2. Помехоустойчивое кодирование 2.1. Общая характеристика помехоустойчивых кодов 2.2. Кодовое расстояние и корректирующая способность кода 2.3. Линейные групповые коды 2.4. Код Хемминга: идея построения 2.5. Групповой код. Принцип формирования образующей матрицы 2.6. Циклические коды. Идея построения циклических кодов 2.7. Упражнения и задачи
Раздел 3. Аппаратурная реализация 3.1. Контроль по четности 3.2. Контроль по Хэммингу
Раздел 4. Цифровые коды, используемые в АЦП и ЦАП 4.1. Натуральный двоичный код 4.2. Двоично-десятичные коды 4.3. Код Грея
Приложение Библиографический список
3 3 3 5 6 8 9 10 10 11 13 15 19 27 39 42 42 43 46 46 47 49 52 54
55
РАЗДЕЛ 1. ЭФФЕКТИВНОЕ КОДИРОВАНИЕ 1.1. Общая характеристика эффективного кодирования Учитывая статистические свойства источника сообщения, можно минимизировать среднее число двоичных символов, требующихся для выражения одной буквы сообщения, что при отсутствии шума позволяет уменьшить время передачи или объем запоминающего устройства. Такое эффективное кодирование базируется на основной теореме Шеннона для каналов без шума. Шеннон доказал, что сообщения, составленные из букв некоторого алфавита, можно закодировать так, что среднее число двоичных символов на букву будет сколь угодно близко к энтропии источника этих сообщений, но не меньше этой величины. 1.2. Методика Шеннона – Фэно При отсутствии статистической взаимосвязи между буквами конструктивные методы построения эффективных кодов были даны впервые Шенноном и Фэно. Их методики существенно не различаются, поэтому соответствующий код получил название кода Шеннона – Фэно. Код строится следующим образом: буквы алфавита сообщений выписываются в таблицу в порядке убывания вероятностей. Затем они разделяются на две группы так, чтобы суммы вероятностей в каждой из групп были по возможности одинаковы. Всем буквам верхней половины в качестве первого символа приписывается 1, а всем нижним 0. Каждая из полученных групп в свою очередь разбивается на две подгруппы с одинаковыми суммарными вероятностями и т. д. Процесс повторяется до тех пор, пока в каждой подгруппе останется по одной букве. Рассмотрим алфавит из восьми букв. Ясно, что при обычном (не учитывающем статистических характеристик) кодировании для представления каждой буквы требуется три символа. Наибольший эффект сжатия получается в случае, когда вероятности букв представляют собой целочисленные отрицательные степени двойки. Среднее число символов на букву в этом случае точно равно энтропии. Убедимся в этом, вычислив энтропию 8 63 (1.1) H(z) = − ∑ p(z i )⋅logp(zi ) = 1 64 i =1 и среднее число символов на букву
8 63 , l ср ∑ p(z i ) ⋅ n(z i ) = 1 64 i =1
(1.2)
3
где n(zi) – число символов в кодовой комбинации1, соответствующей букве zi. Характеристики такого ансамбля и коды букв представлены в табл.1.1. Табл. 1.1 Кодовые комбинации
Ступень разбиения
Буквы
Вероятности
z1
1/2
1
z2 z3
1/4 1/8
01 001
I II
z4
1/16
0001
III
z5 z6
1/32 1/64
00001 000001
IV V
z7 z8
1/128 1/128
0000001 0000000
VI VII
В более общем случае для алфавита из восьми букв среднее число символов на букву будет меньше трех, но больше энтропии алфавита H(z). Для ансамбля букв, приведенного в табл. 1.2, энтропия равна 2,76, а среднее число символов на букву 2,84. Табл. 1.2 Буквы
Вероятности
z1 z2 z3 z4 z5 z6 z7 z8
0,22 0,20 0,16 0,16 0,10 0,10 0,04 0,02
Кодовые комбинации 11 101 100 01 001 0001 00001 00000
Ступень разбиения II III I IV V VI VI VII
Следовательно, некоторая избыточность в последовательностях символов осталась. Из теоремы Шеннона следует, что эту избыточность также можно устранить, если перейти к кодированию достаточно большими блоками.
1
Число разрядов в кодовой комбинации здесь и в дальнейшем обозначено через п для того, чтобы избежать расхождения с общепринятой терминологией в области эффективного и помехоустойчивого кодирования.
4
1.3. Кодирование блоками Рассмотрим сообщения, образованные с помощью алфавита, состоящего всего из двух букв z1 и z2 с вероятностями появления соответственно p(z1)=0,9 и p(z 2 )=0,1. Поскольку вероятности не равны, то последовательность из таких букв будет обладать избыточностью. Однако при побуквенном кодировании никакого эффекта не получается. Действительно, на передачу каждой буквы требуется символ либо 1, либо 0, в то время как энтропия равна 0,47. При кодировании блоков, содержащих по две буквы, получим коды, показанные в табл. 1.3. Табл. 1.3 Блоки
Вероятности
z1 z1 z1 z2 z2 z1 z2 z2
0,81 0,09 0,09 0,01
Кодовые комбинации
Ступень разбиения
1 01 001 000
I II III
Так как буквы статистически не связаны, вероятности блоков определяются как произведение вероятностей составляющих букв. Среднее число символов на блок получается равным 1,29, а на букву 0,645. Кодирование блоков, содержащих по три буквы, дает еще больший эффект. Соответствующий ансамбль и коды приведены в табл. 1.4. Табл. 1.4 Кодовые комбинации
Ступень разбиения
Блоки
Вероятности
z1z1z1
0,729
1
z2z1z1 z1z2z1
0,081 0,081
011 010
I III
z1z1z2
0,081
001
II
z2z2z1
0,009
00011
IV
z2z1z2
0,009
00010
VI
z1z2z2
0,009
00001
z2z2z2
0,001
00000
V VII
5
Среднее число символов на блок равно 1,59, а на букву 0,53, что всего на 12% больше энтропии. Теоретический минимум Н(z)=0,47 может быть достигнут при кодировании блоков, включающих бесконечное число букв:
liml ср = H (z ) .
(1.3)
n →∞
Следует подчеркнуть, что увеличение эффективности кодирования при укрупнении блоков не связано с учетом все более далеких статистических связей, так как нами рассматривались алфавиты с некоррелированными буквами. Повышение эффективности определяется лишь тем, что набор вероятностей, получающийся при укрупнении блоков, можно делить на более близкие по суммарным вероятностям подгруппы. 1.4. Методика Хаффмена Рассмотренная нами методика Шеннона – Фэно не всегда приводит к однозначному построению кода. Ведь при разбиении на подгруппы можно сделать большей по вероятности как верхнюю, так и нижнюю подгруппу. Множество вероятностей, приведенных в табл. 1.2, можно было бы разбить иначе, например, так, как это показано в табл. 1.5. Табл. 1.5 Кодовые комбинации
Ступень разбиения
Буквы
Вероятности
z1 z2 z3
0,22 0,20 0,16
11 10 011
II I
z4
0,16
010
IV
z5 z6 z7
0,10 0,10 0,04
001 0001 00001
III V VI
z8
0,02
00000
VII
При этом среднее число символов на букву оказывается равным 2,80. Таким образом, построенный код может оказаться не самым лучшим. При построении эффективных кодов с основанием m>2 неопределенность становится еще больше. От указанного недостатка свободна методика Хаффмена. Она гарантирует однозначное построение кода с наименьшим для данного распределения вероятностей средним числом символов на букву. Для двоичного кода методика сводится к следующему. Буквы алфавита сообщений выписываются в основной столбец в порядке убывания вероятностей. Две последние буквы объединяются в одну вспомогательную 6
букву, которой приписывается суммарная вероятность. Вероятности букв, не участвовавших в объединении, и полученная суммарная вероятность снова располагаются в порядке убывания вероятностей в дополнительном столбце, а две последние объединяются. Процесс продолжается до тех пор, пока не получим единственную вспомогательную букву с вероятностью, равной единице. Методика поясняется примером, представленным табл. 1.6. Значения вероятностей приняты те же, что и в ансамбле табл. 1.2. Табл. 1.6 Буквы
Вероятности
Вспомогательные столбцы 1
2
3
4
5
6
7
->0,32 0,26 0,22 0,20
->0,42 0,321 0,26
->0,58 0,42
->1
z1 z2 z3 z4
0,22 0,20 0,16 0,16
0,22 0,20 0,16 0,16
0,22 0,20 0,16 0,16
->0,26 0,22 0,20 0,16
z5 z6 z7
0,10 0,10 0,04
0,10 0,10 0,03
0,16 0,10
0,16
z8
0,02
Для составления кодовой комбинации, соответствующей данному сообщению, необходимо проследить путь перехода сообщения по строкам и столбцам таблицы. Для наглядности строится кодовое дерево. Из точки, соответствующей вероятности 1, направляются две ветви, причем ветви с большей вероятностью присваивается символ 1, а с меньшей 0. Такое последовательное ветвление продолжаем до тех пор, пока не дойдем до каждой буквы. Кодовое дерево для алфавита букв, рассматриваемого в табл. 1.6, приведено на рис. 1.1.
Рис. 1.1. Кодовое дерево, построенное по табл. 1.6, в соответствии с методом Хаффмена
7
Теперь, двигаясь по кодовому дереву сверху вниз, можно записать для каждой буквы соответствующую ей кодовую комбинацию: zl z2 z3 z4 z5 z6 z7 z8 01 00 111 110 100 1011 10101 10100 1.5. Префиксные коды Рассмотрев методики построения эффективных кодов, нетрудно убедиться в том, что эффект достигается благодаря присвоению более коротких кодовых комбинаций более вероятным буквам и более длинных – менее вероятным буквам. Таким образом, эффект связан с различием в числе символов кодовых комбинаций. А это приводит к трудностям при декодировании. Конечно, для различения кодовых комбинаций можно ставить специальный разделительный символ, но при этом значительно снижается желаемый эффект, так как средняя длина кодовой комбинации по существу увеличивается на символ. Более целесообразно обеспечить однозначное декодирование без введения дополнительных символов. Для этого эффективный код необходимо строить так, чтобы ни одна комбинация кода не совпадала с началом более длинной комбинации. Коды, удовлетворяющие этому условию, называются префиксными кодами. Последовательность комбинаций префиксного кода, например, кода z1 z2 z3 z4 00 01 101 100 декодируется однозначно: 100 00 z4 z1
01 z2
101 z3
101 z3
101 z3
00 z1
Последовательность комбинаций непрефиксного кода, например кода z1 z2 z3 z4 00 01 101 010 (комбинация 01 является началом комбинации 010), может быть декодирована по-разному: 00 01 01 01 010 101 z1 z2 z2 z2 z4 z3,
или
00 z1
010 z4
101 z3
010 z4
101 z3
00 01 010 101 01 01 z1 z2 z4 z3 z2 z2. Нетрудно убедиться, что коды, получаемые в результате применения методики Шеннона – Фэно или Хаффмена, являются префиксными.
8
1.6. Упражнения и задачи Задача 1.1 1. Построить оптимальный неравномерный код методом Хаффмана. 2. Построить оптимальный неравномерный код методом Шеннона – Фено. Данные: Ра1=0,22, Ра2=0,58, Ра3=0,01, Ра4=0,03, Ра5=0,16. Задача 1.2 Построить оптимальный неравномерный код методом Шеннона – Фено. Данные: Ра1=1/8, Ра2=1/8, Ра3=1/8, Ра4=1/8, Ра5=1/4, Ра6=1/4. Задача 1.3 Построить оптимальный равновероятных букв.
код
сообщения,
состоящего
из
восьми
Задача 1.4 Построить оптимальный код передачи сообщения, в котором вероятность −n появления подчиняются закону p i = 2 , но ∑ p i = 1 . Варианты заданий Вариант
Вероятности
1
Р(z1)=0,32 Р(z5)=0,06
Р(z2)=0,26 Р(z6)=0,02
Р(z3)=0,2 Р(z7)=0,015
Р(z4)=0,12 Р(z8)=0,005
2
Р(z1)=0,38 Р(z5)=0,03
Р(z2)=0,32 Р(z6)=0,02
Р(z3)=0,15
Р(z4)=0,1
3
Р(z1)=0,37 Р(z5)=0,06
Р(z2)=0,25 Р(z6)=0,04
Р(z3)=0,18
Р(z4)=0,1
4
Р(z1)=0,26 Р(z5)=0,1
Р(z2)=0,21 Р(z6)=0,08
Р(z3)=0,18 Р(z7)=0,06
Р(z4)=0,11
5
Р(z1)=0,24 Р(z5)=0,12
Р(z2)=0,22 Р(z6)=0,08
Р(z3)=0,16 Р(z7)=0,02
Р(z4)=0,16
9
РАЗДЕЛ 2. ПОМЕХОУСТОЙЧИВОЕ КОДИРОВАНИЕ 2.1. Общая характеристика помехоустойчивых кодов Теория помехоустойчивого кодирования базируется на результатах исследований, проведенных Шенноном и сформулированных им в виде основной теоремы для дискретного канала с шумом: при любой скорости передачи двоичных символов меньшей, чем пропускная способность канала, существует такой код, при котором вероятность ошибочного декодирования будет сколь угодно мала; вероятность ошибки не может быть сделана произвольно малой, если скорость передачи больше пропускной способности канала. Как видно, в теореме не затрагивается вопрос о путях построения кода, обеспечивающего указанную идеальную передачу. Тем не менее, значение ее огромно, поскольку, обосновав принципиальную возможность такого кодирования, она мобилизовала усилия ученых на разработку конкретных кодов. Кодирование должно осуществляться так, чтобы сигнал, соответствующий принятой последовательности символов, после воздействия на него предполагаемой в канале помехи оставался ближе к сигналу, соответствующему конкретной переданной последовательности символов, чем к сигналам, соответствующим другим возможным последовательностям (степень близости обычно определяется по числу разрядов, в которых последовательности отличаются друг от друга). Это достигается ценой введения при кодировании избыточности, которая позволяет так выбрать передаваемые последовательности символов, чтобы они удовлетворяли дополнительным условиям, проверка которых на приемной стороне дает возможность обнаружить и исправить ошибки. Коды, обладающие таким свойством, получили название помехоустойчивых. Они используются как для исправления ошибок (корректирующие коды), так и для их обнаружения. У подавляющего большинства существующих в настоящее время помехоустойчивых кодов указанные выше условия являются следствием их алгебраической структуры. В связи с этим их называют алгебраическими кодами. Алгебраические коды можно подразделить на два больших класса: блоковые и непрерывные. В случае блоковых кодов процедура кодирования заключается в сопоставлении каждой букве сообщения (или последовательности из k символов, соответствующей этой букве) блока из n символов, причем в операциях по преобразованию принимают участие только указанные k символов и выходная последовательность не зависит от других символов в передаваемом сообщении. Блоковый код называется равномерным, если n остается постоянным для всех букв сообщения. 10
Различают разделимые и неразделимые блоковые коды. При кодировании разделимыми кодами выходные последовательности состоят из символов, роль которых может быть отчетливо разграничена. Это информационные символы, совпадающие с символами последовательности, поступающей на вход кодера канала, и избыточные (проверочные) символы, вводимые в исходную последовательность кодером канала и служащие для обнаружения и исправления ошибок. При кодировании неразделимыми кодами разделить символы выходной последовательности на информационные и проверочные невозможно. Непрерывными называются такие коды, в которых введение избыточных символов в кодируемую последовательность информационных символов осуществляется непрерывно, без разделения ее на независимые блоки. Непрерывные коды также могут быть разделимыми и неразделимыми. 2.2. Кодовое расстояние и корректирующая способность кода При взаимно независимых ошибках наиболее вероятен переход в кодовую комбинацию, отличающуюся от данной в наименьшем числе символов. Степень различия любых двух кодовых комбинаций характеризуется расстоянием между ними (по Хэммингу), или просто кодовым расстоянием. Оно выражается числом символов, в которых комбинации отличаются одна от другой, и обозначается через d. Чтобы рассчитать кодовое расстояние между двумя комбинациями двоичного кода, достаточно подсчитать число единиц в сумме этих комбинаций по модулю 2. Например заданы две кодовые комбинации А и В. Требуется определить кодовое расстояние. Складывая по модулю 2 А и В, получаем некоторую комбинацию С. Непосредственный подсчет единиц определяет вес ϖ(С) кодовой комбинации С, который равен кодовому расстоянию d. А В С
⊕
1001111101
ϖ(А)=7
1100001010 0101110111
ϖ(В)=4 ϖ(С)=7, d=7.
Минимальное расстояние, взятое по всем парам кодовых комбинаций данного кода, называется минимальным кодовым расстоянием. Декодирование после приема может производиться таким образом, что принятая кодовая комбинация отождествляется с той разрешенной, которая отличается от полученной в наименьшем числе символов. Такое декодирование называется декодированием по методу максимального правдоподобия. Очевидно, что при d=l все кодовые комбинации являются разрешенными. Например, при n=3 разрешенные комбинации образуют следующее множество: 000, 001, 010, 011, 100, 101, 110, 111. 11
Любая одиночная ошибка трансформирует данную комбинацию в другую разрешенную комбинацию. Это случай равнодоступного кода, не обладающего способностью обнаруживать и исправлять ошибки. Если d=2, то ни одна из разрешенных кодовых комбинаций при одиночной ошибке не переходит в другую разрешенную комбинацию. Например, подмножество разрешенных кодовых комбинаций может быть образовано по принципу четности в них числа единиц, как это приведено ниже для n=3: 000, 011, 101, 110 разрешенные комбинации 001, 010, 100, 111 запрещенные комбинации Код обнаруживает все одиночные ошибки. В общем случае при необходимости обнаруживать ошибки кратности r минимальное хэммингово расстояние между разрешенными кодовыми комбинациями должно быть по крайней мере на единицу больше r, т. е, (2.1) d0 min ≥ r +1. Действительно, в этом случае никакая r-кратная ошибка не в состоянии перевести одну разрешенную кодовую комбинацию в другую. Для исправления одиночной ошибки каждой разрешенной кодовой комбинации необходимо сопоставить подмножество запрещенных кодовых комбинаций. Чтобы эти подмножества не пересекались, хэммингово расстояние между разрешенными кодовыми комбинациями должно быть не менее трех. При n=3 за разрешенные комбинации можно, например, принять 000 или 111. Тогда разрешенной комбинации 000 необходимо поставить в соответствие подмножество запрещенных кодовых комбинаций 001, 010, 100, образующихся в результате возникновения единичной ошибки в комбинации 000. Подобным же образом разрешенной комбинации 111 необходимо поставить в соответствие подмножество запрещенных кодовых комбинаций 110, 011, 101, образующихся в результате возникновения единичной ошибки в комбинации 111:
12
Для возможности исправления ошибок кратности s и менее кодовое расстояние должно удовлетворять соотношению (2.2) dиmin ≥ 2s+ 1. Нетрудно убедиться в том, что для исправления всех ошибок кратности s и менее и одновременного обнаружения всех ошибок кратности r (r≥s) и менее минимальное хеммингово расстояние нужно выбирать из условия (2.3) d и . о . min ≥ r + s+ 1. Каждый конкретный корректирующий код не гарантирует исправления любой комбинации ошибок. Коды предназначены для исправления комбинаций ошибок, наиболее вероятных для заданного канала. Если характер и уровень помехи будут отличаться от предполагаемых, эффективность применения кода резко снизится. Применение корректирующего кода не может гарантировать безошибочность приема, но дает возможность повысить вероятность получения на выходе правильного результата. 2.3. Линейные групповые коды Линейные коды всегда можно представить в систематической форме. Систематическими называют такие коды, в которых информационные и корректирующие символы расположены по строго определенной системе и всегда занимают строго определенные места в кодовых комбинациях. Они являются равномерными кодами, т. е. все комбинации кода с заданными корректирующими способностями имеют одинаковую длину. Систематические коды отличаются от сверточных тем, что в них формирование проверочных элементов происходит по nи информационным элементам кодовой комбинации. В канал связи идет n-элементная комбинация, состоящая из nи информационных и n–nи проверочных разрядов, тогда как в сверточных кодах проверочные элементы формируются путем сложения двух 13
или нескольких информационных элементов, сдвинутых друг от друга на расстояние, равное шагу сложения. Кроме того, в систематических кодах проверочные символы могут образовываться путем различных линейных комбинаций информационных символов. Декодирование систематических кодов также основано на проверке линейных соотношений между символами, стоящими на определенных проверочных позициях. В случае двоичных кодов этот процесс сводится к проверке на четность. Если число единиц четное, то линейная комбинация символов дает нуль, в противном случае – единицу. Линейными называются коды, в которых проверочные символы представляют собой линейные комбинации информационных символов. Для двоичных кодов в качестве линейной операции используют сложение по модулю 2. Напомним его. Правила сложения по модулю 2: 0 ⊕ 0 = 0; 0 ⊕ 1 = 1; 1 ⊕ 0 = 1; 1 ⊕ 1 = 0. Последовательность нулей и единиц, принадлежащих данному коду, будем называть кодовым вектором. Свойство линейных кодов: сумма (разность) кодовых векторов линейного кода дает вектор, принадлежащий данному коду. Линейные коды образуют алгебраическую группу 1 по отношению к операции сложения по модулю 2. В этом смысле они являются групповыми кодами2. Свойство групповых кодов: минимальное кодовое расстояние между кодовыми векторами группового кода равно минимальному весу ненулевых кодовых векторов. Вес кодового вектора (кодовой комбинации) равен числу его ненулевых компонентов. Расстояние между двумя кодовыми векторами равно весу вектора, полученного в результате сложения исходных векторов по модулю 2. Например, кодовое расстояние между двоичными векторами: 1100011 и 1001111 равно 1100011 ⊕ 1001111 0101100 d = 3. Таким образом, Wмин = d.
2
Группа G – это некоторое множество G, где каждой паре элементов a, b сопоставлен некоторый однозначно определенный элемент c (также принадлежащий данному множеству), называемый произведением элементов a и b. При этом (ab)c = a(bc)
14
2.4. Код Хэмминга: идея построения Код Хэмминга представляет собой один из важнейших классов линейных кодов, нашедших широкое применение на практике и имеющих простой и удобный для технической реализации алгоритм обнаружения и исправления одиночной ошибки. Предположим, необходимо исправить одиночную ошибку бинарного кода. Такой код состоит из nи символов, несущих информацию, и nк контрольных (избыточных) символов. Всего символов в коде n = nи + nк (2.4) При передаче кода может быть искажен любой информационный символ. Однако может быть и такой вариант, что ни один из символов не будет искажен, т. е. если всего n символов, то с помощью контрольных символов, входящих в это число, должно быть создано такое число комбинаций 2nк , чтобы свободно различить n+1 вариант. Поэтому nк должно удовлетворять неравенству 2nк ≥ n + 1 . (2.5) Тогда, согласно (2.4) 2 n = 2 nк +nи = 2 nк ⋅ 2 nи . (2.6) Используя (2.5), запишем 2 n ≥ (n + 1) ⋅ 2 n и , (2.7) n где 2 – полное число комбинаций кода. Отсюда число информационных символов кода, обнаруживающего и корректирующего одиночную ошибку, 2n nи 2 ≤ (2.8) (n + 1) . Для вычисления основных параметров кода Хэмминга задается количество либо информационных символов, либо информационных комбинаций N = 2 nи . При помощи формул вычисляют n и nк. Соотношения между n, nи и nк для кода Хэмминга представлены в табл. 2.1. Зная основные параметры корректирующего кода, определяют, какие позиции сигналов будут рабочими, а какие – контрольными. Практика показала, что номера контрольных символов удобно выбирать по закону 2i, где i = 0, 1, 2, 3, ... – натуральный ряд чисел. Номера контрольных символов в этом случае равны 1, 2, 4, 16, 32... Затем определяют значения контрольных коэффициентов (0 или 1), руководствуясь следующим правилом: сумма единиц на проверочных позициях должна быть четной. Если эта сумма четна – значение контрольного коэффициента нуль, в противном случае – единица.
15
Табл. 2.1 Соотношения между количеством информационных и контрольных символов в коде Хэмминга n
nи
nк
n
nи
nк
1
0
1
9
5
4
2
0
2
10
6
4
3
1
2
11
7
4
4
1
3
12
8
4
5
2
3
13
9
4
6
3
3
14
10
4
7
4
3
15
11
4
8
4
4
16
11
5
Проверочные позиции выбирают следующим образом. Составляют табличку для ряда натуральных чисел в двоичном коде. Число ее строк n =nк+nи Первой строке соответствует проверочный коэффициент a1, второй а2 и т. д.: 0001a1 0010а2 0011а3 0100а4 0101а5 0110а6 0111а7 1000a8 1001a9 1010а10 1011a11 Затем выявляют проверочные позиции, выписывая коэффициенты по следующему принципу: в первую проверку входят коэффициенты, которые содержат единицу в младшем разряде (а1, а3, а5, а7, а9, а11 и т. д.); во вторую – во втором разряде (а2, а3, а6, а7, a10, a11 и т. д.); в третью – в третьем разряде и т. д. Номера проверочных коэффициентов соответствуют номерам проверочных позиций, что позволяет составить общую таблицу проверок (табл. 2.2).
16
Табл. 2.2 Номера проверочных позиций кода Хэмминга № проверки
№ контрольного символа
Проверочные позиции (П)
1
1, 3, 5, 7, 9, 11, ...
1
2
2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 24, ...
2
3
4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, ...
4
4
8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31, 40, 41, 42, ...
8
Построение кода Хэмминга Пример 2.1. Построить макет кода Хэмминга и определить значения корректирующих разрядов для кодовой комбинации (nи=4) 0101. Табл. 2.3 Позиция символов корректирующего кода
Кодовое слово без значений со значениями контрольных контрольных коэффициентов коэффициентов
1 2 3 4
К1 К2 0 К3
0 1 0 0
5 6 7
1 0 1
1 0 1
Решение: Согласно табл. 2.1 минимальное число контрольных символов nк = 3, при этом n = 7. Контрольный коэффициенты будут расположены на позициях 1, 2, 4. Составим макет корректирующего кода и запишем его во вторую колонку табл. 2.3. Пользуясь табл. 2.2, определим значения коэффициентов К1, К2 и К3. Первая проверка: сумма П1+П3+П5+П7 должна быть четной, а сумма К1+0+1+1 будет четной при К1 = 0. Вторая проверка: сумма П2+П3+П6+П7 должна быть четной, а сумма К2+0+0+1 будет четной при К2 = 1. Третья проверка: сумма П4+П5+П6+П7 должна быть четной, а сумма К3+1+0+1 будет четной при К3 = 0. Окончательное значение искомой комбинации корректирующего кода записываем в третью колонку табл. 2.3. 17
Обнаружение и исправление ошибок в коде Хэмминга Пример 2.2. Предположим, в канале связи под действием помех произошло искажение и вместо 0100101 было принято 0100111. Решение: Для обнаружения ошибки производят уже знакомые нам проверки на четность. Первая проверка: сумма П1+П3+П5+П7 = 0+0+1+1 четна. В младший разряд номера ошибочной позиции запишем 0. Вторая проверка: сумма П2+П3+П6+П7 = 1+0+1+1 нечетна. Во второй разряд номера ошибочной позиции запишем 1. Третья проверка: сумма П4+П5+П6+П7 = 0+1+1+1 нечетна. В третий разряд номера ошибочной позиции запишем 1. Номер ошибочной позиции 110 = 6. Следовательно, символ шестой позиции следует изменить на обратный, и получим правильную кодовую комбинацию. Табл. 2.4 Код, исправляющий одиночную и обнаруживающий двойную ошибки Десятичное представление чисел на позициях 3, 5, 6 и 7
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Позиция
1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1
2 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1
3 0 0 0 0 0 0 0 0 I 1 1 1 1 1 1 1
4 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1
5 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
6 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
7 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
8 0 0 1 1 1 1 0 0 1 1 0 0 0 0 1 1
Если по изложенным выше правилам строить корректирующий код с обнаружением и исправлением одиночной ошибки для равномерного двоичного кода, то первые 16 кодовых комбинаций будут иметь вид, показанный в табл. 2.4. Такой код может быть использован для построения кода 18
с исправлением одиночной ошибки и обнаружением двойной. Для этого, кроме указанных выше проверок по контрольным позициям, следует провести еще одну проверку на четность для всей строки в целом. Чтобы осуществить такую проверку, следует к каждой строке кода добавить контрольные символы, записанные в дополнительной колонке (табл. 2.4 колонка 8). Тогда в случае одной ошибки проверки по позициям укажут номер ошибочной позиции, а проверка на четность – на наличие ошибки. Если проверки позиций укажут на наличие ошибки, а проверка на четность не фиксирует ее, значит в кодовой комбинации две ошибки. 2.5. Групповой код. Принцип формирования образующей матрицы Групповые коды удобно задавать при помощи матриц, размерность которых определяется параметрами кода nи и nк. Число строк матрицы равно nи, число столбцов n = nи + nк:
a11 a12 a 21 a 22 C= K K an 1 an 2 и
и
K a1 n и K a2n и K K K an n
и и
P11 P12 P21 P22 K K P Pn 1 и
K P1 n к K P2 n к K K K Pn n
(2.7)
и к
Коды, порождаемые этими матрицами, известны как (n, k) – коды, где k = nи, а соответствующие им матрицы называют производящими, порождающими, образующими. Производящая матрица С может быть представлена при помощи двух матриц И и П (информационной и проверочной). Число столбцов матрицы П равно nк, число столбцов матрицы И – nи. При соблюдении всех этих условий любую производящую матрицу группового кода можно привести к следующему виду: a1 a2 a3 … an и P1 P2 … Pnи
1 0 0 K 0 1 0 K С= 0 0 1 K K 0 0 0 K
0 P11 0 P21 0 P31
P12 P22 P32
1 PK1
PK 2
K K K K K
P1(n −n и ) P2(n − n и ) P3(n −n и )
,
PK(n −n и )
называемому левой канонической, или приведенной ступенчатой формой производящей матрицы. Для кодов с d0 = 2 производящая матрица С имеет вид
19
1 0 С= 0
0 1 0
0 0 1
И 1 0 0 K 0 0 1 0 1 0 K 0 0 1 0 1 = 0 0 1 K 0 K K K K K K K 0 0 0 K 1 1 1 построенного при помощи
П 1 1 1
K K K K K K K 1 0 0 0 K Во всех комбинациях кода, такой матрицы, четное число единиц. Известны формулы, по которым определяется связь между n, nи и nк. В частности, если известно количество информационных разрядов nи, то nк вычисляется по формуле: n к = [log 2 {(n и + 1) + [log 2 (n и + 1)]}]. (2.8) Квадратные скобки означают округление полученного числа до целого. Если известно количество разрядов в коде, т. е. n, то количество корректирующих разрядов равно: n к = [log 2 (n + 1)]. (2.9)
Пример 2.3. Построить матрицу для группового кода, способного исправлять одиночную ошибку при передаче 16 символов первичного алфавита. Решение: 1. Так как число информационных разрядов кода nи = 4 (16 = 24 = 2nи), то число строк производящей матрицы С должно быть равно 4. 2. Число столбцов матрицы С равно n; n – длина кода, которая равна nи + nк, а число корректирующих разрядов для кодов с d0 = 3, n к = log 2 {5 + [log 2 5]} = log 2 8 = 3 . Следовательно, число столбцов, содержащих контрольные разряды, должно быть равно 3, а общее число столбцов матрицы С равно nи + nк = 4+3 = 7. 3. Так как вес каждой строки проверочной матрицы П должен быть WП ≥ d 0 − WИ , то в качестве строк проверочной матрицы могут быть выбраны трехзначные двоичные комбинации с числом единиц, большим или равным двум (d0 = 3, a WИ=1, потому что матрицу информационных разрядов удобно выбирать единичную): 111; 110; 101; 011. 4. Окончательный вид производящей матрицы: С1 =
20
1 0 0 0 1 1 1 0 1 0 0 1 1 0
1 0 0 0 1 1 1 0 1 0 0 0 1 1
0 0 1 0 1 0 1
или С 2 = 0 0 1 0 1 1 0
0 0 0 1 0 1 1
0 0 0 1 1 0 1
1 0 С3 =
0 1 0 0 0 0
или 0 0 0 0 1 0 0 1
0 1 1 1 0 1 1 1 0 1 1 1
Как видно из примера, основным требованиям могут удовлетворять несколько матриц. Выбор той или иной матрицы из числа матриц, возможных для данных nи, nк и d0, определяется по дополнительным требованиям: минимум корректирующих разрядов или максимальная простота аппаратуры. Пример 2.4. Определить вид производящей матрицы группового кода, оптимального с точки зрения минимума корректирующих разрядов при максимуме информационных разрядов, для использования его в системе телемеханики, проектируемой для передачи не менее 2000 различных сообщений. Решение: 1. 2 n ≥ 2000 , n И = 11, согласно (2.8), при nи=11 и d0=3, n к = [log 2 {(11 + 1) + [log 2 (11 + 1)]}] = 4. 2. Проверим условие оптимальности кода. Условие оптимальности принимает вид 2 n −nи − 1 = n; 215−11 − 1 = 1; 15 = 15. 3. Вес каждой комбинации проверочной матрицы П Wп > d 0 − 1, Wп ≥ 2 . 4. Так как число строк производящей матрицы С равно nи, то в качестве проверочных используются все четырехзначные двоичные комбинации весом W ≥ 2. 5. Окончательный вид матрицы С: и
1 0 0 0 0 С= 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 1 1 1 1 1 1
0 1 1 1 0 0 0 1 1 1 1
1 0 1 1 0 1 1 0 0 1 1
1 1 0 1 1 0 1 0 1 0 1
21
При четырех избыточных разрядах невозможно построить код, исправляющий одиночную ошибку, если у него будет число информационных разрядов больше 11, так как не существует больше 11 четырехзначных двоичных комбинаций, удовлетворяющих условию Wn ≥ d 0 − 1.
Пример 2.5. Источник сообщений рассчитан на передачу 120 различных 11-разрядных комбинаций. Одним из главных требований технического задания (ТЗ) на разработку приемного устройства является максимальная простота дешифратора и возможность коррекции одиночных ошибок в каждой передаваемой комбинации. Построить образующую матрицу группового кода, удовлетворяющую требованиям ТЗ. Решение: 1. Задана длина кода n=11 и максимальное расстояние между кодами d0=3. Согласно (2.9), n к = [log(11 + 1)] = 4 . 2. Минимальная простота дешифратора достигается при минимальном количестве сумматоров по модулю 2 в декодере, что возможно при минимальном весе комбинаций избыточной матрицы П. Для этого в качестве векторов, составляющих строки матрицы П, выбираем четырехзначные двоичные комбинации весом Wn=2, 3, 4 и используем те комбинации, в которых содержится меньшее число единиц, т. е.(0011,0100, 0110, 1010, 1100, 0111). 3. Искомая матрица имеет вид 1 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 С= 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 1 1 Метод кодирования при помощи образующей матрицы Метод кодирования при помощи образующих матриц может быть представлен следующим образом. Строки образующей матрицы С представляют собой n комбинаций искомого кода. Остальные комбинации кода строятся при помощи образующей матрицы по следующему правилу: корректирующие символы, предназначенные для обнаружения или исправления ошибки в информационной части кода, находятся путем суммирования по модулю 2 тех строк матрицы П, номера которых совпадают с номерами разрядов, содержащих единицы в кодовом 22
векторе, представляющем информационную часть кода. Полученную комбинацию приписывают справа к информационной части кода и получают вектор полного корректирующего кода. Аналогичную процедуру проделывают с каждой последующей информационной кодовой комбинацией, пока не будет построен корректирующий код для передачи всех символов первичного алфавита. Алгоритм образования проверочных символов по известной информационной части кода может быть записан следующим образом:
P1 = P11α 1 ⊕ P21α 2 ⊕ L ⊕ Pn и 1 α n и ; P2 = P12 α 1 ⊕ P22 α 2 ⊕ L ⊕ Pn и 2 α n и ; .................................................. Pn k = P1 n k α1 ⊕ P2 n k α 2 ⊕ L ⊕ Pn и n k α n и
(2.10)
или nи Pij = P1 jα1⊕ P2 jα 2 ⊕ L ⊕ Pnijα n = ∑ Pijα i и i =1
Пример 2.6. Построить групповой код по заданной производящей матрице: 1 0 C= 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 1 1 0
1 1 0 1
1 1 0 0 0 1 = 1 0 0 1 0 0
0 0 1 0
И
0 0 0 1
1 1 1 0
1 1 0 1
1 0 1 1
П
Решение: 1. Число строк матрицы nи=4. Следовательно, число возможных информационных комбинаций N = 2nи = 24 = 16. 1) 0 0 0 0 5) 0 0 1 0 9) 0 0 0 1 13) 0 0 1 1 2) 1 0 0 0 6) 1 0 1 0 10) 1 1 0 0 14) 1 0 1 1 3) 0 1 0 0 7) 0 1 1 0 11) 0 1 0 1 15) 0 1 1 1 4) 1 1 0 0 8) 1 1 1 0 12) 1 1 0 1 16) 1 1 1 1 2. Находим последовательно корректирующие разряды всех информационных комбинаций путем суммирования по модулю 2 тех строк матрицы П, номера которых совпадают с номерами разрядов, содержащих единицы в информационной части кода.
23
1) 0 0 0
2) 1 1 1
3) 1 1 0
5) 1 0 1
9) 1 0 1
3. Окончательно комбинации корректирующего кода имеют вид: 1) 0 0 0 0 0 0 0 5) 0 0 1 0 1 0 1 9) 0 0 0 1 0 1 1 13) 0 0 1 1 1 1 0 2) 1 0 0 0 1 1 1 6) 1 0 1 0 0 1 0 10) 1 0 0 1 1 0 0 14) 1 0 1 1 0 0 1 3) 0 1 0 0 1 1 0 7) 0 1 1 0 0 1 1 11) 0 0 0 1 1 1 0 15) 0 1 1 1 0 0 0 4) 1 1 0 0 0 0 1 8) 1 1 1 0 1 0 0 12) 1 0 0 1 1 0 0 16) 1 1 1 1 1 1 1 Коррекция ошибок в групповых кодах Коррекции ошибок в линейных кодах связаны с выполнением проверок, идея которых в общем виде может быть представлена следующим образом: n i (2.11) P ⊕ ∑ P *a = S, j =1, 2,..., n к . ij i i i =1 Для каждой конкретной матрицы существует своя, одна-единственная система проверок. Проверки производятся по следующему правилу: в первую проверку вместе с проверочным разрядом Р1 входят информационные разряды, соответствующие единицам первого столбца проверочной матрицы П, во вторую – второй проверочный разряд Р2 и информационные разряды, соответствующие единицам второго столбца проверочной матрицы, и т. д. Число проверок равно числу проверочных разрядов корректирующего кода nк. В результате проверок образуется проверочный вектор S1, S2,..., Sn – синдром. Если число единиц проверяемых разрядов четно, то значение соответствующего разряда синдрома равно нулю. Если вес синдрома равен нулю, то принятая комбинация считается безошибочной. Если хотя бы один разряд проверочного вектора содержит 24
единицу, то принятая комбинация содержит ошибку. Исправление ошибки производится по виду синдрома, так как каждому ошибочному разряду соответствует один-единственный проверочный вектор. Вид синдрома для каждой конкретной матрицы может быть определен при помощи контрольной матрицы Н, которая представляет собой транспонированную матрицу П, дополненную единичной матрицей I, число столбцов которой равно числу проверочных разрядов кода. Первый столбец матрицы становится первой строкой транспонированной матрицы, второй столбец – второй строкой и т. д.
H = П Т I nк
(2.12) Столбцы такой матрицы представляют собой значение синдрома для разряда, соответствующего номеру столбца матрицы H. Пример 2.7. Групповой код построен по матрице 1 0 С= 0 0
0 1 0 0
0 0 1 0
0 0 0 1
0 1 1 1
1 0 1 1
1 1 0 1
Показать процесс исправления ошибки в произвольном разряде корректирующего кода, информационная часть которого представляет собой четырехразрядные комбинации натурального двоичного кода. Решение: 1. Производящая матрица С в виде информационной матрицы И и проверочной матрицы П может быть представлена следующим образом:
С=
1 0 0 0 0 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 0 0 0 0 1 1 1 1
=
1 0 0 0 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 0 0 0 0 1 1 1 1
И П Согласно принципу построения системы проверки, система проверок для кодов, построенных по матрице С, будет иметь вид P1 ⊕ a 2 ⊕ a 3 ⊕ a 4 = S1
P2 ⊕ a 1 ⊕ a 3 ⊕ a 4 = S1 P3 ⊕ a 1 ⊕ a 2 ⊕ a 4 = S 3 2. Чтобы знать, какая комбинация значений разрядов синдрома S1, S2, S3 будет соответствовать ошибке в определенном разряде принятой комбинации, строим контрольную матрицу Н, cтроками которой являются столбцы матрицы П, дополненные единичной транспонированной матрицей In, размерность которой определяется числом избыточных разрядов кода, т. е. в нашем случае равна 3. Таким образом, 25
a1 0 H= 1 1
a2 a3 a4 P1 P2 P3 1 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 ПТ In Если разряды синдрома соответствуют первому столбцу матрицы Н, т. е. Sj=0, S2=1, S3=1, то ошибки в первом разряде принятой комбинации, если синдром имеет вид 101, что соответствует второму столбцу матрицы Н, то ошибка во втором разряде, синдром 001 соответствует ошибке в третьем проверочном разряде кода и т. д. 3. Так как информационная часть кода обычно представляет собой натуральный двоичный код разрядности nи то в качестве примера проверки корректирующих свойств кода используем информационные комбинации, соответствующие цифрам 3, 4 и 5 в четырехзначном двоичном коде3: 1100, 0010 и 1010. Значение корректирующих разрядов находим путем суммирования строк матрицы П, соответствующих единицам в информационных комбинациях: P ′ = 0 11 ⊕ 1 0 1 = 110; P ′′ = 11 0; P ′′′ = 0 11 ⊕ 110 = 1 0 1. Полные комбинации кода имеют вид соответственно: 1 1 0 0 1 1 0; 0 0 1 0 1 1 0; 1 0 1 0 1 0 1. 4. Пусть сбои произошли в первом разряде первой комбинации, в четвертом разряде второй и в последнем разряде третьей, т. е. приняты они в таком виде: 0 1 0 0 1 1 0; 0 0 1 1 1 1 0; 1 0 1 0 1 0 0. Находим проверочные векторы согласно системе проверок. Для первой комбинации Р' =110, т. е. Р1=1; Р2=1; Р3=0: P1 ⊕ a 2 ⊕ a 3 ⊕ a 4 = 1 ⊕ 1 ⊕ 0 ⊕ 0 = 0;
P2 ⊕ a 1 ⊕ a 3 ⊕ a 4 = 1 ⊕ 0 ⊕ 0 ⊕ 0 = 1; P3 ⊕ a 1 ⊕ a 2 ⊕ a 4 = 0 ⊕ 0 ⊕ 1 ⊕ 0 = 1. Синдром 0 1 1 показывает, что в первом разряде символ следует заменить на обратный.
3
Старшинство разрядов в данном случае считается слева направо, согласно порядку поступления двоичных сигналов на вход декодера.
26
Для второй комбинации
1 ⊕ 0 ⊕ 1 ⊕ 1 = 1; 1 ⊕ 0 ⊕ 1 ⊕ 1 = 1;
0 ⊕ 0 ⊕ 0 ⊕ 1 = 1. Синдром 1 1 1 – ошибка в четвертом разряде. Для третьей комбинации
1 ⊕ 0 ⊕ 1 ⊕ 0 = 0; 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0;
0 ⊕ 1 ⊕ 0 ⊕ 0 = 1. Синдром 001 – ошибка в седьмом разряде.
2.6. Циклические коды. Идея построения циклических кодов Циклические коды получили такое название потому, что в них часть или все комбинации могут быть получены путем циклического сдвига одной или нескольких комбинаций кода. Циклический сдвиг осуществляется справа налево, причем крайний левый символ каждый раз переносится в конец комбинации. Все циклические коды относятся к линейным кодам. Кроме того, циклические коды относятся к числу блочных кодов. Каждый блок кодируется самостоятельно. Идея построения циклических кодов базируется на использовании неприводимых в поле4 двоичных чисел многочленов. Неприводимыми называются многочлены, которые могут быть представлены в виде произведения многочленов низших степеней с коэффициентами из того же поля. Они так же, как простые числа, не могут быть представлены произведением других чисел. Иными словами, неприводимые многочлены делятся без остатка только на себя или на единицу. Идея коррекции ошибок в циклических кодах базируется на том, что разрешенные комбинации кода делятся без остатка на некоторый образующий многочлен, который выбирается из числа неприводимых многочленов. Для обнаружения ошибки при делении на выбранный (или построенный по специальным правилам) многочлен надо, чтобы все комбинации кода не делились ни на какой другой многочлен, а для этого необходимо, чтобы выбранный многочлен не разлагался на другие многочлены (как, например, простые числа натурального ряда не разлагаются на сомножители), т. е. был простым неприводимым многочленом. С другой стороны, такие многочлены следует искать среди нечетных многочленов, т. е. среди многочленов, 4
Множество элементов принадлежит к одному полю, если над ними можно производить операции сложения и умножения по правилам данного поля, при этом сложение и умножение должны подчиняться дистрибутивному закону: (а + b) с = ас + bc для всех а, b и с.
27
содержащих нечетное число единиц, так как из всех четных многочленов легко выделить двучлен (X+1), т. е. четные многочлены состоят минимум из двух сомножителей и не могут служить однозначным критерием при определении ошибочной комбинации. Неприводимые многочлены в теории циклических кодов играют роль образующих (генераторных, производящих) многочленов, так как, если заданные кодовые комбинации умножить на выбранный неприводимый многочлен, то получим циклический код, корректирующие способности которого определяются неприводимым многочленом. Пусть требуется закодировать одну из комбинаций четырехзначного двоичного кода. Предположим также, что эта комбинация И(X ) = X 3 + X 2 + 1 − 1101. Пока, не обосновывая свой выбор, берем из таблицы неприводимых многочленов в качестве образующего многочлена
К(X) = X 3 + X+ 1 − 1011.
Затем умножаем И(X) на одночлен той же степени, что и образующий многочлен. От умножения многочлена на одночлен степени n степень каждого члена многочлена повысится на n, что эквивалентно приписыванию n нулей со стороны младших разрядов многочлена. Так как степень выбранного неприводимого многочлена равна трем, то исходная информационная комбинация умножается на одночлен третьей степени И(X) X n = (X 3 + X 2 + 1) X 3 = X 6 + X 5 + X 3 = 1101000. Осуществляется эта процедура для того, чтобы впоследствии вместо этих нулей можно было записать корректирующие разряды. Значение корректирующих разрядов находят в результате деления И(X)Xn на К(X):
28
В результате деления
1 И(Х ) X 3 = X 3 + X 2 + X+ 1 + 3 в общем виде K (X ) X + X+ 1
И(X ) X n R (X ) = Q(X ) + , (2.13) K (X ) K (X ) где Q(X) – частное, а R(X) – остаток от деления И(X) на K(X). Так как в двоичной арифметике 1 ⊕ 1=0, а значит и –1=1, то можно при сложении двоичных чисел переносить слагаемые из одной части равенства в другую без изменения знака (если это удобно), поэтому равенство вида а ⊕ b=0 можно записать и как а=b, и как а–b=0. Все три равенства в данном случае означают, что либо и а и b равны 0, либо и а и b равны 1, т. е. имеют одинаковую четность. На основании изложенного выражение (2.13) можно записать как
F(X ) = И(X ) X n = Q(X ) K(X ) + R (X )
(2.14)
после переноса R(X) в левую часть равенства (2.14)
F(X ) = Q(X ) K(X ) = И(X ) X n + R (X ) ,
(2.15)
что для нашего примера даст
F(X ) = (X 3 + X 2 + X+ 1)(X 3 + X+ 1) = (X 3 + X 2 + 1) X 3 + 1, или
F(X ) = 1111 ⋅ 1011 = 1101000 + 001 = 1101001. Многочлен 1101001 и есть искомая комбинация, где 1101 – информационная часть, а 001 – контрольные символы. Заметим, что искомую комбинацию мы получили бы как в результате умножения одной из комбинаций четырехзначного двоичного кода на все сочетания (в данном случае 1111) на образующий многочлен, так и умножением заданной комбинации на одночлен, имеющий ту же степень, что и выбранный образующий многочлен (в нашем случае таким образом была получена комбинация 1101000) с последующим добавлением к полученному
29
произведению остатка от деления этого произведения на образующий многочлен (остаток имел вид 001). Шифраторы циклических кодов, в том или ином виде, построены по принципу умножения двоичных многочленов, так как даже если кодовые комбинации получаются в результате сложения соседних комбинаций по модулю 2, то это, как мы увидим ниже, эквивалентно умножению первой комбинации на двучлен X+1. Итак, комбинации циклических кодов можно представлять в виде многочленов, у которых показатели степени X соответствуют номерам разрядов, коэффициенты при X равны нулю или единице в зависимости от того, стоит ли нуль или единица в разряде кодовой комбинации, которую представляет данный многочлен. Например, 000101 → 0 ⋅ X 5 + 0 ⋅ X 4 + 0 ⋅ X 3 + 1 ⋅ X 2 + 0 ⋅ X 1 + 1 ⋅ X 0 = X 2 + 1; 001010 → 0 ⋅ X 5 + 0 ⋅ X 4 + 1 ⋅ X 3 + 0 ⋅ X 2 + 1 ⋅ X 1 + 0 ⋅ X 0 = X 3 + X; 010100 → 0 ⋅ X 5 + 1 ⋅ X 4 + 0 ⋅ X 3 + 0 ⋅ X 2 + 0 ⋅ X 1 + 0 ⋅ X 0 = X 4 + X 2 ; 101000 → 1 ⋅ X 5 + 0 ⋅ X 4 + 1 ⋅ X 3 + 0 ⋅ X 2 + 0 ⋅ X 1 + 0 ⋅ X 0 = X 5 + X 3 .
Циклический сдвиг кодовой комбинации аналогичен соответствующего многочлена на X: (X 2 + 1) ⋅ X = X 3 + X → 001010 ;
(X
) (X + X )⋅ X = X 3
умножению
+ X ⋅ X = X 4 + X 2 → 010100 ;
+ X 3 → 101000 . Если степень многочлена достигает разрядности кода, то происходит «перенос» в нулевую степень при X, и цикл повторяется. В шифраторах циклических кодов эта операция осуществляется путем соединения выхода ячейки старшего разряда со входом ячейки нулевого разряда. Сложение по модулю 2 любых двух соседних комбинаций циклического кода эквивалентно операции умножения многочлена, соответствующего комбинации первого слагаемого, на многочлен X+1, если приведение подобных членов осуществляется по модулю 2: 4
2
5
Таким образом, существует принципиальная возможность получения любой кодовой комбинации циклического кода путем умножения соответствующим образом подобранного образующего многочлена на некоторый другой многочлен. 30
Принцип формирования опознавателей ошибок в циклических кодах
Однако мало построить циклический код. Надо уметь выделить из него возможные ошибочные разряды, т. е. ввести некоторые опознаватели ошибок, которые выделяли бы ошибочный блок из всех других. Так как циклические коды – блочные, то каждый блок должен иметь свой опознаватель. И тут решающую роль играют свойства образующего многочлена К(X). Методика построения циклического кода такова, что образующий многочлен принимает участие в образовании каждой кодовой комбинации, поэтому любой многочлен циклического кода делится на образующий без остатка. Но без остатка делятся только те многочлены, которые принадлежат данному коду, т. е. образующий многочлен позволяет выбрать разрешенные комбинации из всех возможных. Если же при делении циклического кода на образующий многочлен будет получен остаток, то это значит, что в коде произошла ошибка или эта комбинация какого-то другого кода (запрещенная комбинация), что для декодирующего устройства не имеет принципиальной разницы. По остатку и обнаруживается наличие запрещенной комбинации, т. е. обнаруживается ошибка. Остатки от деления многочленов являются опознавателями ошибок циклических кодов. Остатки от деления единицы с нулями на образующий многочлен используют для построения циклических кодов – возможность этого видна из выражения (2.15). При делении единицы с нулями на образующий многочлен следует помнить, что длина остатка должна быть не меньше числа контрольных разрядов, поэтому в случае нехватки разрядов в остатке к остатку приписывают справа необходимое число нулей, как это показано на следующем примере. Пример 2.8. Получить остатки от деления единицы на образующий многочлен 1011. Решение:
31
Остатки от деления: 4) 101 1) 011 5) 001 2) 110 6) 010 3) 111 Начиная с восьмого, остатки будут повторяться.
7) 100 8) 011 9) 110
Построение циклических кодов с использованием образующих матриц
Остатки от деления используют для построения образующих матриц, которые, благодаря наглядности и удобству получения производных комбинаций, получили широкое распространение для построения циклических кодов. Построение образующей матрицы сводится к составлению единичной транспонированной и дополнительной матрицы, элементы которой представляют собой остатки от деления единицы с нулями на образующий многочлен К(X). Элементы дополнительной матрицы приписываются справа от единичной транспонированной матрицы. Однако не все остатки от деления единицы с нулями на образующий многочлен могут быть использованы в качестве элементов дополнительной матрицы, а лишь те из них, вес которых W ≥ d 0 − 1 , где d0 – минимальное кодовое расстояние. Длина остатков должна быть не менее количества контрольных разрядов, а число остатков должно равняться числу информационных разрядов. Строки образующей матрицы представляют собой первые комбинации искомого кода. Остальные комбинации кода получаются в результате суммирования по модулю 2 всевозможных сочетаний строк образующей матрицы. Пример 2.9. Используя метод образующих матриц, построить циклический код, исправляющий одинарные ошибки при передаче комбинаций четырехзначного двоичного кода на все сочетания (кроме нулевой комбинации). Решение: 1. Код, обнаруживающий двойные или исправляющий одинарные ошибки, должен обеспечивать между комбинациями минимальное кодовое расстояние d0=3, следовательно, число разрядов дополнительной матрицы должно быть nк=3, а каждый остаток должен содержать три разряда. 2. Из приложения выбираем многочлен, степень которого больше или равна 3, число ненулевых членов также должно быть больше или равно 3. Выбираем многочлен Х3+ Х2+ 1. 3. Число строк, столбцов транспонированной матрицы равно nи=4, так как исходный код четырехразрядный. 4. Число единиц в каждом остатке (вес остатка) от деления единицы с нулями на образующий многочлен должно быть W ≥ d 0 − 1 ≥ 3 − 1 ≥ 2. 32
5. Соблюдая условия 1 и 4, находим остатки от деления единицы с нулями на образующей многочлен:
Остатки от деления: 1) 101 2) 111 3) 011 4) 110 6. Строим образующую матрицу: С 7, 4
0 0 0 1 1 0 1 0 0 1 0 1 1 1 = 0 1 0 0 0 1 1 1 0 0 0 1 1 0
Четыре строки матрицы образуют кодовые комбинации циклического кода: X1
=
0 0 0 1 1 0 1
X2
=
0 0 1 0 1 1 1
X3
=
0 1 0 0 0 1 1
X4
=
1 0 0 0 1 1 0
7. Путем суммирования по модулю 2 всевозможных сочетаний строк образующей матрицы находим остальные комбинации искомого кода (первые четыре комбинации – строки образующей матрицы):
33
Описанный выше метод построения образующих матриц не являетcя единственным. Построение циклических кодов умножением элементов единичной матрицы на образующий многочлен
Образующая матрица может быть построена в результате непосредственного умножения элементов единичной матрицы на образующий многочлен. Это часто бывает удобнее, чем нахождение остатков от деления. Полученные коды ничем не отличаются от кодов, построенных по образующим матрицам, в которых дополнительная матрица состоит из остатков от деления единицы с нулями на образующий многочлен. Пример 2.10. При помощи образующей матрицы, полученной в результате умножения единичной матрицы на образующий многочлен X3+X+1, построить циклический код, исправляющий одиночную ошибку в любом из четырех информационных разрядов. Решение: 1. Так как в искомом коде nи = 4, то единичная матрица содержит 4 строки. 2. Строим образующую матрицу: 0001 x 1011 = 0001011 (X 1 )
0010 x 1011 = 0010110 (X 2 )
0100 x 1011 = 0101100 (X 3 )
1000 x 1011 = 1011000 (X 4 )
С 7, 4
0 0 0 1 0 1 1 0 0 1 0 1 1 0 = 0 1 0 1 1 0 0 1 0 1 1 0 0 0
Строки образующей матрицы являются первыми четырьмя комбинациями искомого кода. 3. Находим остальные комбинации кода путем суммирования по модулю 2 строк образующей матрицы, используя п. 7 (стр. 33): Х5= 0011101 Х8= 0111010 Х11=0110001 Х14=1111111 34
Х6= 0100111 Х9= 1001110 Х12=1100010 Х15=1101001
Х7= 1010011 Х10=1110100 Х13=1000101
Сгруппируем полученные коды 6) 1100010 1) 0001011 7) 1000101 2) 0010110 8) 0011101 3) 0101100 9) 0111010 4) 1011000 10) 1110100 5) 0110001
11) 1101001 12) 1010011 13) 0100111 14) 1001110 15) 1111111.
Построение циклических кодов непосредственным умножением информации на образующий многочлен
Циклический код может быть также получен путем непосредственного умножения информационных комбинаций на образующий многочлен. Пример 2.11. Методом умножения по модулю 2 образующего многочлена на многочлены четырехзначного двоичного кода на все сочетания построить циклический код. Решение: 1) 0 0 0 1 0 1 1 2) 0 0 1 0 1 1 0 3) 0 0 1 1 1 0 1 4) 0 1 0 1 1 0 0 5) 0 1 0 0 1 1 1 6) 0 1 1 1 0 1 0 7) 0 1 1 0 0 0 1 8) 1 0 1 1 0 0 0 9) 1 0 1 0 0 1 1 10) 1 0 0 1 1 1 0 11) 1 0 0 0 1 0 1 12) 1 1 1 0 1 0 0 13) 1 1 1 1 1 1 1 14) 1 1 0 0 0 1 0 15) 1 1 0 1 0 0 1 Сгруппировав 14 из 15 полученных комбинаций в колонки I и II, легко заметить циклический сдвиг комбинации: 1) 0 0 1 1 1 0 1 6) 0 1 0 0 1 1 1 11) 1 0 1 1 0 0 0 2) 0 1 1 1 0 1 0 7) 1 0 0 1 1 1 0 12) 0 1 1 0 0 0 1 3) 1 1 1 0 1 0 0 8) 0 0 0 1 0 1 1 13) 1 1 0 0 0 1 0 4) 1 1 0 1 0 0 1 9) 0 0 1 0 1 1 0 14) 1 0 0 0 1 0 1 5) 1 0 1 0 0 1 1 10) 0 1 0 1 1 0 0 15) 1 1 1 1 1 1 1
Как видим, кодовые комбинации 1...15 ничем не отличаются от кодовых комбинаций, полученных в примере 2.10. Обнаружение и исправление ошибок в циклических кодах
Ошибки в циклических кодах обнаруживаются и исправляются при помощи остатков от деления полученной комбинации на образующий многочлен. Остатки от деления являются опознавателями ошибок, но не указывают непосредственно на место ошибки в циклическом коде. Идея исправления ошибок базируется на том, что ошибочная комбинация после определенного числа циклических сдвигов «подгоняется» под остаток таким образом, что в сумме с остатком она дает исправленную комбинацию. Остаток при этом представляет собой не что иное, как разницу между искаженными и правильными символами, единицы в остатке стоят на местах искаженных разрядов в «подогнанной» циклическими сдвигами комбинации. Подгоняют же искаженную комбинацию до тех пор, пока число единиц в 35
остатке не будет равно числу ошибок, которое еще способен исправить данный код. При этом, естественно, число единиц может быть равно числу ошибок S, исправляемых данным кодом (код исправляет три ошибки и в искаженной комбинации три ошибки), или меньше S (код исправляет три ошибки, а в принятой комбинации – одна ошибка). Место ошибки в кодовой комбинации не имеет значения. Достаточно получить один остаток, вес которого W ≤ S , и этого достаточно для исправления искаженной комбинации. В этом смысле циклические коды могут исправлять пачки ошибок, лишь бы длина пачки не превышала S. Процедура исправления ошибок рассматривается на примере построения кодов, исправляющих одиночную ошибку, d0=3. Построение и декодирование конкретных циклических кодов сводится к следующим стандартным процедурам. 1. Расчет соотношения между контрольными и информационными символами кода. Если задано число информационных разрядов nи, то число контрольных разрядов nк находится из выражения n к = [log 2 {(n и + 1) + [log 2 (n и + 1)]}], (2.16) общее число символов кода n = nи + nк . Если задана длина кода n, то число контрольных разрядов n к = [log 2 (n + 1)]. (2.17) Соотношение числа контрольных и информационных символов для кодов с d0=3 приведены в табл. 1 Приложения. 2. Выбор образующего многочлена производится по таблицам неприводимых двоичных многочленов Приложения. Образующий многочлен К(X) следует выбирать как можно более коротким, но, с одной стороны, степень его должна быть не меньше числа контрольных разрядов, с другой – число ненулевых членов К(X) должно быть не меньше минимального кодового расстояния d0. 3. Выбор параметров единичной транспонированной матрицы происходит из условия, что число столбцов (строк) матрицы определяется числом информационных разрядов, т. е. ранг единичной матрицы равен nи. 4. Определение элементов дополнительной матрицы производится по остаткам от деления последней строки транспонированной матрицы (единицы с нулями) на образующий многочлен. Полученные остатки должны удовлетворять следующим требованиям: а) число разрядов каждого остатка должно быть равно числу контрольных символов nk, следовательно, число разрядов дополнительной матрицы должно быть равно степени образующего многочлена; б) число остатков должно быть не меньше числа строк единичной транспонированной матрицы, т. е. должно быть равно числу информационных разрядов nи; 36
в) число единиц каждого остатка, т. е. его вес, должно быть не менее величины W=d0–1, d0 – минимальное кодовое расстояние, т. е. не меньше числа обнаруживаемых ошибок; г) количество нулей, приписываемых к единице с нулями при делении ее на выбранный неприводимый многочлен, должно быть таким, чтобы соблюдались условия а-в. 5. Образующая матрица составляется путем дописывания элементов дополнительной матрицы справа от единичной матрицы или путем умножения элементов единичной матрицы на образующий многочлен. 6. Комбинациями искомого кода являются строки образующей матрицы и всевозможные суммы по модулю 2 различных сочетаний строк образующей матрицы. Коды, полученные при использовании неприводимых многочленов вида 3 X +X2+1 и X3+X+1, подобны друг другу и обладают равноценными корректирующими способностями. Сами же многочлены 1101 и 1011 называют обратными, или двойственными, многочленами. Если данный многочлен неприводимый, то неприводимым будет и двойственный ему многочлен. 7. Обнаружение и исправление ошибок происходит по остаткам от деления принятой комбинации F(X) на образующий многочлен К(X). Если принятая комбинация делится на образующий многочлен без остатка, то код принят безошибочно. Остаток от деления свидетельствует об ошибке, но не указывает, какой именно. Чтобы найти ошибочный разряд и исправить его в циклических кодах, принято осуществлять следующие процедуры: а) принятая комбинация делится на образующий многочлен; б) подсчитывается количество единиц в остатке (вес остатка). Если W ≤ S , где S – допустимое число исправляемых данным кодом ошибок, то принятая комбинация складывается по модулю 2 с полученным остатком. Сумма даст исправленную комбинацию. Если W>S, то в) делим полученную в результате циклического сдвига комбинацию на образующий многочлен K(X). Если в остатке W ≤ S , то складываем делимое с остатком. Затем производим циклический сдвиг вправо комбинации, полученной в результате суммирования последнего делимого с остатком. Полученная комбинация уже не содержит ошибок. Если после первого циклического сдвига и последующего деления остаток получается таким, что его вес W>S, то г) повторяется процедура в) до тех пор, пока не будет W ≤ S . В этом случае комбинация, полученная в результате последнего циклического сдвига, суммируется с остатком от деления этой комбинации на образующий многочлен, а затем д) производится циклический сдвиг вправо на столько разрядов, на сколько была сдвинута суммируемая с последним остатком комбинация относительно принятой. В результате получим исправленную комбинацию.
37
Пример 2.12. Показать процесс исправления одиночной ошибки в принятой кодовой комбинации. Решение: 1. Предположим, передавалась комбинация № 14 и в ней исказился третий разряд. Таким образом, принятая комбинация имеет вид 1000110. 2. Делим принятую комбинацию на образующий многочлен 1000110 |1 0 1 1 ⊕1011 1111 ⊕1011 1000 ⊕ 1011 11 3. Сравниваем вес полученного остатка W с возможным для данного кода числом исправляемых ошибок S. Вес остатка W=2. Число исправляемых ошибок S=1, т. к. W>S. 4. Производим циклический сдвиг принятой комбинации F(X) на один разряд влево с последующим делением полученной в результате циклического сдвига комбинации на К(X): 0001101 |1011 1011 110 W>S, т. е. W=2, W>S. 5. Повторяем процедуру п. 3 до тех пор, пока не будет W ≤ S 0110100 |1011 1101000 |1011 0011010 |1011 1011 1 1011 1011 1100 1100 1100 1011 1011 1011 111 W>S; 1110 1110 1011 1011 101 W>S; 1010 1011 1 W = S. 6. Складываем по модулю 2 последнее делимое с последним остатком 1101000 ⊕ 1 1101001 7. Производим циклический сдвиг комбинации, полученной в результате суммирования последнего делимого с последним остатком, вправо на 4 разряда (так как перед этим мы четырежды сдвигали принятую комбинацию влево) 1110100, 0111010, 0011101, 1001110, как видим, последняя комбинация соответствует переданной, т. е. уже не содержит ошибки.
38
2.7. Упражнения и задачи Задача 2.1 Построить матрицу для группового кода, способного исправлять одиночную ошибку при передаче 16 символов первичного алфавита. Задача 2.2 Используя метод образующих матриц, построить циклически код, исправляющий одинарные ошибки при передаче комбинации четырехзначного двоичного кода на все сочетания (кроме нулевой комбинации). Задача 2.3 При помощи образующей матрицы, полученной в результате умножения единичной матрицы на образующий многочлен Х3+Х+1, построить циклический код, исправляющий одиночную ошибку в любом из четырех информационных разрядов. Задача 2.4 Исправить любую одиночную ошибку при передаче комбинации 0101, т.е. nи=4. Задача 2.5 Составить макет кодовой комбинации для nи=4 (0111), вычислить значения контрольных символов. Задача 2.6 Составить макет кодовой комбинации для nи=4 (1101), вычислить корректирующие коэффициенты. Задача 2.7 Проверить, допущена ли ошибка при приеме кодовой комбинации (код Хемминга), nи=4, nк=3: 1011011. Изложить методику проверки. Задача 2.8 Составить проверочную часть матрицы группового кода для nи=5, nк=4, dmin=3. Задача 2.9 Проверить, допущена ли ошибка при приеме кодовой комбинации (групповой код), при nи=4, nк=3: 1100111, 1000111.
39
Задача 2.10 Групповой код построен по матрице: 1000 011
C=
0100 111 0010 101
0001 110 Построить контрольную матрицу для исправления ошибки. Задача 2.11 Дана образующая матрица для группового кода. Составить кодовые комбинации с учетом информационных составляющих nи=1101, nи=1111, nи=1001. 1000 111
C=
0100 110 0010 101 0001 011
Задача 2.12 При построении циклического кода использовался образующий многочлен 3 Х +Х+1. Проверить, допущены ли ошибки в кодовых комбинациях циклического кода: 0011101 0111010 1111111 1100010 Задача 2.13 Заданы производящие матрицы для группового кода: 100000 0011 10000 0011 010000 0101 01000 0110 001000 0110 C1 = C 2 = 00100 1001 000100 1001 00010 1100 000010 1010 00001 0101 000001 1100 Построить контрольные матрицы и записать алгоритм системы проверок для кодов, построенных по этим матрицам. Используя матрицу С1, сформировать кодовые комбинации с учетом информационных составляющих: 111000, 101000, 111001, 100111, 100110, 100110.
40
Используя матрицу С2, сформировать кодовые комбинации с учетом информационных составляющих: 11100, 0100, 110011, 10101, 10001, 10111. Проверить, допущены ли ошибки при получении кодовых комбинаций: 11 0000 0110, 11 0000 0111, 11 1000 0000, 11 1000 0100, 1 0001 0110, 1 000 111, 0 0011 1001, 1 0011 1001.
41
РАЗДЕЛ 3. АППАРАТУРНАЯ РЕАЛИЗАЦИЯ 3.1. Контроль по четности На передаваемые по линии связи или хранимые в памяти данные воздействуют различные помехи, которые могут исказить эти данные. Простейшим способом удостовериться, что полученные с линии или извлеченные из памяти данные искажены ошибкой и использовать их нельзя, служит введение контроля по четности (контроль по нечетности, parity check – контроль по паритету). В его основе лежит операция сложения по модулю 2 всех двоичных разрядов контролируемого слова. Если число единиц в слове четное, то сумма по модулю 2 его разрядов будет 0, если нечетное – то 1. Признаком четности называют инверсию этой суммы. Общая схема организации контроля показана на рис. 3.1.
Рис. 3.1. Организация контроля по нечетности
На n-входовом элементе М2 формируется признак четности Р числа, который в качестве дополнительного, (n+1)-го контрольного разряда (parity bit) отправляется вместе с передаваемым словом в линию связи или запоминающее устройство (ЗУ). Передаваемое (n+1)-разрядное слово имеет всегда нечетное число единиц. Если в исходном слове оно было нечетным, то функция М2 от такого слова равна 0, и нулевое значение контрольного разряда не меняет числа единиц при передаче слова. Если же число единиц в исходном слове было четным, то контрольный разряд Р для такого числа будет равен 1, и результирующее число единиц в передаваемом (n+1)-разрядном слове станет нечетным. Вид контроля, когда по линии передается нечетное число единиц, по строгой терминологии называют контролем по нечетности. На приемном конце линии или после чтения из памяти от полученного (n+l)-разрядного слова снова берется свертка по четности. Если значение этой свертки равно 1, то или в передаваемом слове, или в контрольном разряде при передаче или хранении произошла ошибка. Столь простой контроль не 42
позволяет исправить ошибку, но он, по крайней мере, дает возможность при обнаружении ошибки исключить неверные данные, затребовать повторную передачу и т. д. Контроль по четности основан на том, что одиночная ошибка (безразлично – пропадание единицы или появление лишней) инвертирует признак четности. Однако две сшибки проинвертируют его дважды, т. е. оставят без изменения, поэтому двойную ошибку контроль по четности не обнаруживает. Рассуждая аналогично, легко прийти к выводу, что контроль по четности обнаруживает все нечетные ошибки и не реагирует на любые четные. Пропуск четных ошибок – это не какой-либо дефект системы контроля. Это следствие предельно малой избыточности при контроле по четности, равной всего одному разряду. Для более глубокого контроля требуется соответственно и большая избыточность. Если ошибки друг от друга не зависят, то из необнаруживаемых чаще всего будет встречаться двойная ошибка, и при вероятности одиночной ошибки, равной q, вероятность двойной будет q2. Поскольку в нормальных цифровых устройствах q<
состав всего одной, 3-й, контрольной группы; разряд 7 входит в состав трех групп: 1, 2 и 3-й; 2) в каждую i-ю контрольную группу входят те разряды кодового слова, в двоичном номере которых в i-й позиции стоит единица. Например, 3-я контрольная группа включает разряды 4, 5, 6, 7; 12, 13, 14 ... Самый младший разряд каждой группы – контрольный. Очевидно, что это разряды, в двоичных номерах которых содержится только одна единица: 1, 2, 4, 8-й... Такое расположение контрольных разрядов облегчает понимание принципа построения схем формирования этих разрядов. На рис. 3.2,б показан набор функциональных узлов, формирующих кодовое слово на передающей стороне. Семиразрядные контрольные группы информационного слова, скомпонованные в соответствии с рис. 3.2,а, поступают на семивходовые свертки по четности М 2.1–М 2.4. Результаты свертки каждой группы записываются в ее контрольный разряд. Функциональные узлы приемной стороны представлены на рис. 3.2,в. Разряды принятого кодового слова также поступают на четыре свертки по четности, но здесь на каждой свертке обрабатывается вся группа вместе с ее контрольным разрядом. Выходы сверток образуют 4-разрядный синдром ошибки, или корректирующий код К. Если при передаче кодового слова в одном из его разрядов произошла ошибка (на рис. 3.2,а в качестве примера крестиком отмечен поврежденный пятый разряд), то будет зафиксировано нарушение четности именно в тех контрольных группах, в состав которых входит неверный разряд. В результате код синдрома ошибки укажет номер неисправного разряда принятого кодового слова. Так, код синдрома 0101 есть двоичный номер поврежденного разряда № 5. Для восстановления слова неверный разряд нужно проинвертировать. Синдромные разряды поступают на дешифратор, активный выход которого возбуждает управляемый инвертор (двухвходовой элемент М2) в том разряде, в котором произошла ошибка. На рис. 3.2,в показаны 11 инверторов, обеспечивающих исправление разрядов только информационного слова. Предполагается, что оно дальше передаваться не будет, поэтому контрольные разряды больше не нужны, и в них ошибки корректировать не требуется. Разумеется, можно включить в состав схемы все 15 управляемых инверторов и исправлять не только информационные, но и контрольные разряды. Если ошибка не обнаружена, то все синдромные разряды будут нулями, о чем сигнализирует возбужденный нулевой выход S дешифратора. Инверторы при этом пропускают принятое слово без изменения. Следует отметить, что цель рис. 3.2 – возможно проще проиллюстрировать закон, по которому определенные разряды информационного или кодового слова должны взаимодействовать с определенными элементами схемы при кодировании и декодировании. Физическое расположение разрядов в слове при его передаче или хранении может и отличаться от показанного на рис. 3.2, если это технически оправдано. Например, информационные разряды могут образовывать один компактный массив, контрольные – другой. 44
Рис. 3.2. Контроль по Хэммингу: а – структура кодового слова и контрольных групп; б – узлы кодирования передатчика; в – узлы контроля и коррекции приемника
45
РАЗДЕЛ 4. ЦИФРОВЫЕ КОДЫ, ИСПОЛЬЗУЕМЫЕ В АЦП И ЦАП При построении АЦП и ЦАП используют те же коды, что и в ЭВМ, с которыми они совместно работают в различных системах переработки информации. Это, как правило, разновидности натурального двоичного кода. В измерительных приборах с АЦП чаще применяют варианты двоичнодесятичных кодов. Наконец, в некоторых случаях преимущество имеет код Грея. 4.1. Натуральный двоичный код При кодировании натуральным двоичным положительному числу ставится в соответствие код
{α } = α ij
1j
α 2 j ... α mj ,
кодом
каждому
(4.1)
где αij равны 0 или 1 и находятся из выражения
cj =
m
∑
i =1
α ij ⋅ 2 − i .
(4.2)
Такой код называется прямым. Его крайний правый разряд является младшим, крайний левый – старшим. Двоичные числа, используемые в АЦП, как правило, нормализованы, т. е. их абсолютное значение не превышает единицы. Они представляют собой отношение входного сигнала к полному диапазону преобразуемого сигнала, который равен 2m. Как легко видеть, прямой код пригоден лишь для работы с однополярными сигналами. При работе с биполярными аналоговыми и цифровыми сигналами важное значение имеет представление отрицательных чисел. Прямой код со знаком предусматривает введение дополнительного знакового разряда, который является старшим разрядом и для отрицательных чисел принимает значение 1, а для положительных 0. В остальном код остается без изменений. В результате такое представление часто называют «знак+амплитуда». В вычислительной технике для представления отрицательных чисел используют смещенный, дополнительный и обратный двоичные коды. Смещенный двоичный код образуется прибавлением к числу постоянной величины 2m, в результате чего
c j = − 2 −1 +
46
m
∑
i =1
α ij ⋅ 2 − i .
(4.3)
При этом максимальный положительный сигнал 1 – 2m представляется кодом 111 ... 1, максимальный отрицательный сигнал 2-m – кодом 000 ... 1, а нулю соответствует код 100 ... 0. Достоинством смещенного двоичного кода является его достаточно легкая реализация на основе имеющихся однополярных АЦП и ЦАП, однако он менее удобен при выполнении арифметических операций в ЭВМ. Например, сложение двух значений смещенного кода, соответствующих одинаковым по абсолютному значению и противоположным по знаку величинам, приведет к образованию на выходе максимального (по абсолютному значению) сигнала вместо нулевого. Дополнительный код образуется вычитанием в двоичной форме преобразуемого числа cj из постоянной величины 2m+1. Другими словами, находится дополнение до двух к числу сj, в результате образование отдельных разрядов в кодовом представлении описывается выражением
(
c j = α 1 j⋅ − 2
−1
)+ ∑ m
i =1
α ij ⋅ 2 − i ,
(4.4)
⎧⎪1 при c j < 0 α = где 1 j ⎨ ⎪⎩0 при с j ≥ 0 . Диапазон представления чисел в дополнительном коде соответствует от -m –2 до 1–2-m. Нуль имеет одно представление 000...0. Этот код наиболее удобен для работы с ЭВМ. Обратный код образуется вычитанием в двоичной форме преобразуемого числа сj из постоянной величины 2m+1–1, т. е. находится дополнением до единицы Cj. Образование отдельных разрядов в кодовом представлении происходит на основе выражения
[ (
c j = α1 j⋅ − 2
−1
−2
−m
)] + ∑ α m
i=2
ij
⋅ 2 −i ,
(4.5)
⎧⎪1 при c j < 0 α = где 1 j ⎨ ⎪⎩0 при с j ≥ 0 . В обратном коде нуль имеет двойное представление: положительный 0+ = 0 000... 0 и отрицательный 0– = 1 111 ... 1. Диапазон чисел, представляемых в обратном коде, такой же, как и для прямого кода со знаком. Для положительных чисел представления в дополнительном и обратном кодах совпадают с представлением в прямом. Отметим, что прямой код со знаком предпочтительнее для операций умножения и деления, а дополнительный и обратный коды удобнее использовать для операций сложения и вычитания. 4.2. Двоично-десятичные коды
Двоично-десятичные коды широко применяют в АЦП, предназначенных для различных цифровых измерительных приборов. Каждая значащая десятичная цифра в таком коде представляется четырьмя двоичными знаками и 47
содержит десять значений сигнала от 0 до 9. Так, например, десятичное число 10 можно представить как 0001 0000, а десятичное число 99 можно представить как 1001 1001. Так как при кодировании четырьмя двоичными знаками можно получить 16 кодовых значений, то приведенное двоично-десятичное представление не является единственным. Например, широко используют код 2-4-2-1, который на первой и третьей позициях имеет одинаковые веса, равные 2 (табл. 4.1). Табл. 4.1 Десятичный код 0 1 2 3 4 5 6 7 8 9 10
Двоичнодесятичный код с весами 8-4-2-1 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 0000
Двоичнодесятичный код с весами 5-1-2-1 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
0000 0001 0010 0011 0111 1000 1001 1010 1011 1111 0000
Двоичнодесятичный код с весами 2-4-2-1 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
0000 0001 0010 0011 0100 1011 1100 1101 1110 1111 0000
Для кода 8-4-2-1 представляется возможным производить арифметические операции на двоично-десятичных сумматорах, которые проектируют как обычные двоичные сумматоры, добавляя лишь устройства формирования дополнительных переносов, необходимых в тех случаях, когда сумма двух двоично-десятичных чисел (S) становится больше или равна 10. Причем, если 10≤ 5 ≤15, то после переноса в следующую четверть из суммы необходимо вычитать число 10 (1100), а если S = 16, то к сумме после переноса необходимо добавить 6 (0110). Например, при сложении двух двоично-десятичных чисел 0111 и 0100 получится число 1011, которое в двоично-десятичном изображении не предусмотрено. После переноса и коррекции суммы получим число 0001 0001. Для упрощения двоично-десятичных счетчиков процедуру вычитания числа 1010 заменяют двумя процедурами: вычитания числа 16 и добавления 6, что сводится к добавлению к сумме двоично-десятичного числа 01010 и переносу единицы в следующую четверть без восстановления. Так, для рассмотренного примера получим 1011+ 0110 = 1 0001. Описанный способ построения двоично-десятичных счетчиков не исключает и возможности преобразования двоично-десятичного кода в натуральный двоичный код с последующим проведением арифметических операций. Двоично-десятичные коды строятся с учетом следующих условий: 1. Вес наименьшей значащей цифры равен «1». 48
2. Вес второй значащей цифры равен «1» или «2». 3. Вес, соответствующий двум оставшимся цифрам кода, q3+q4≥7, если q2=1, и q3+q4≥6, если q2=2. 4. Совокупность весов должна удовлетворять соотношению q4–(q1+q2+q3)≤1. Двоично-десятичные коды широко применяются в АЦП, предназначенных для различных цифровых измерительных приборов. Каждая значимая десятичная цифра в таком коде представляется четырьмя двоичными знаками и содержит десять значений сигнала от 0 до 9. Все двоично-десятичные коды не имеют однозначности в отображении, кроме 8-4-2-1. 4.3. Код Грея
Особое место среди позиционных двоичных кодов занимает циклический код, называемый кодом Грея. Характерной особенностью этого кода является изменение только одной позиции при переходе от одного кодовой комбинации к другой. Это свойство кода Грея широко используют как для построения некоторых типов АЦП, так и для повышения надежности преобразователей с помощью резервирования и самоконтроля. Используется в технике аналоговоцифровых преобразователях, где он позволяет свести к «1» младшего разряда погрешность неоднозначности при считывании. Табл. 4.2 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
Для пояснения принципа специальной схемой (рис. 4.1).
построения
кода
Грея
воспользуемся
Рис. 4.1. Принцип построения кода Грея
49
Предположим, что мы имеем числа от 0 до 15. Объединим парами данные числа, слева от каждого узла, соединяющего числа попарно, а также у узлов, соединяющих полученные пары чисел и т.д., ставится единица, а справа 0. Для получения по этой схеме кода Грея нужно в каждой второй справа в своем ряду «вилке» поменять местами 1 и 0. Основными трудностями, ограничивающими применение кодов Грея, является непостоянство веса каждого разряда и изменение его знака. Выясним, как определяется вес и знак разряда кода Грея. Табл. 4.3 Dc 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Db 00000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Гр 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000
Выберем из табл.4.3 следующие кодовые комбинации: 0001, 0010, 0100, 1000. Этим комбинациям соответствуют числа в десятичной системе счисления: 1, 3, 7, 15, которые определяют вес каждого разряда. С другой стороны, вес разряда может быть как положительным, так и отрицательным. Рассмотрим это свойство кода Грея на примерах, приведенных в табл. 4.4. Табл. 4.4 Код Грея
Десятичная система счисления
Представление числа с учетом весовых коэффициентов
0011 0101 1011 1111
2 6 13 10
15⋅0 + 7⋅0 + 3⋅1 + (-1)⋅1 = 3-1 15⋅0 + 7⋅1 + 3⋅0 + (-1)⋅1 = 7-1 15⋅1 + 7⋅0 + (-3)⋅1 + 1⋅1 = 15-3+1 15⋅1 + (-7)⋅1 + 3⋅1 + (-1)⋅1 = 15-7+3-1
Исследование особенностей построения кода Грея позволяет сделать вывод: его недостатком является то, что в нем затруднено, хотя и возможно, выполнение арифметических операций и цифроаналоговое преобразование. Поэтому в тех случаях, когда эти операции необходимы, параллельный код Грея превращают в натуральный двоичный, а уже затем осуществляют арифметические операции или цифроаналоговое преобразование. Для перехода от натурального двоичного кода к отраженному (Грея) существуют правила: • если в предыдущем разряде двоичного кода стоит 0, то в данном разряде цифра сохраняется; • если в предыдущем разряде двоичного кода стоит 1, то в данном разряде цифра меняется; Правило перехода от кода Грея к натуральному двоичному коду: если слева от данной цифры находится четное число единиц, то цифра сохраняется, в противном случае цифра меняется. 50
Например: 1010 (код Грея) 1100 (двоичный код). На рис. 4.2 и 4.3 приведены схемы преобразования четырехразрядного кода Грея в натуральный двоичный код и двоичного кода в код Грея.
Рис. 4.2. Схема преобразования 4-разрядного кода Грея в натуральный двоичный код: М2 – сумматор по модулю 2
Рис. 4.3. Схема преобразования прямого параллельного двоичного кода в код Грея
В правильности работы такого устройства легко убедиться, если иметь в виду, что между отдельными разрядами кода Грея и прямого двоичного кода имеет место следующая зависимость: значения старших разрядов равны между собой, а значение очередного разряда прямого кода при чтении от старшего разряда к младшему надо брать инверсным по отношению к предыдущему значению разряда кода Грея, если значение очередного разряда кода Грея равно единице.
51
ПРИЛОЖЕНИЕ Таблицы соотношений информационных nи и корректирующих nк разрядов для кодов с кодовым расстоянием d0=3 (табл.1) и d0=5 (табл.2). Табл. 2 Табл. 1 n
nи
nк
L
nи
nк
1 2 3 4 5 6 7 8 9 10 11 12
0 0 1 1 2 3 4 4 5 6 7 8
1 2 2 3 3 3 3 4 4 4 4 4
5 6 7 8 9 10 11 12 13 14 15 16
1 1 2 2 3 4 4 5 6 7 7 8
4 5 5 6 6 6 7 7 7 7 8 8
17 18 19 20 21 22 23 24 25 26 27 28
9 10 11 12 13 14 14 15 16 17 18 19
8 8 8 8 8 8 9 9 9 9 9 9
52
Таблица минимальных неприводимых многочленов (табл. 3). Табл. 3 № 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29
1
2
1
111
3
4
1011 10011 1101 11111 111 11001
5 100101 111101 110111 101111 110111 111011
Степень 6 1000011 1010111 1100111 1001001 1101 1101101
7
8
9
10001001 10001111 10011101 11110111 10111111 11010101 10000011
100011101 101110111 111110011 101101001 110111101 111100111 100101011 111010111 010011 101100101 110001011 101100011 100011011 100111111
1000010001 1001011001 1100110001 1010011001 1100010011 1000101101 1001110111 1101100001 1011011001 1110000101 1000010111 1111101001 1111100011 1110001111 1101101011
11001011 11100101
53
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Дмитриев, В. Н. Прикладная теория информации: учебник для вузов / В. Н. Дмитриев. – М.: Высшая школа, 1989. – 320 с.; ил. 2. Темников, Ф. Е. Теоретические основы информационной техники: учебное пособие для вузов / Ф. Е. Темников, В. А. Афонин, В. И. Дмитриев. – 2-е изд., перераб и доп. – М.: Энергия, 1979. – 512 с., ил. 3. Цымбал, В. П. Теория информации и кодирования: учебник для вузов / В. П. Цимбал. – 3-е изд., перераб. и доп. – Киев: Головное издательство «Вища школа», 1982. – 304 с. 4. Калабеков, Б. А. Микропроцессоры и их применение в системах передачи и обработки сигналов: учебное пособие для вузов / В. А. Калабеков. – М.: Радио и связь, 1988. – 368 с., ил. 5. Острейковский, В. А. Информатика: учебник для вузов / В. А. Острейковский. – М.: Высшая школа, 1991. – 551 с., ил. 6. Гиттис, Э. И. Преобразователи информации для электронных цифровых и вычислительных устройств. – 2-е изд., перераб. / Э. И. Гиттис. – М.: Энергия, 1970. 7. Гиттис, Э. И. Аналого-цифровые преобразователи: учебное пособие для вузов / Э. И. Гиттис, Е. А. Пискулов. – М.: Энергоиздат, 1981. – 380 с., ил.
54