на переконфигурацию структуры мультиагентной системы, из-за изменений в системе или поступления нового задания сводится к минимуму и оказывает относительно небольшое влияние на общее время решения задачи.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Лорин Г. Распределенные вычислительные системы:.// -М.: Радио и связь, 1984. - 296 с.
2. Таненбаум Э.. Распределенные системы: принципы и парадигмы.// -СПб: Питер, 2003. - 877 с.
3. Ховансков С.А., Мельник Э.В, . Блуишвили И.В. Метод организации распределенных вычислений в управляющих системах // Мехатроника, автоматизация, управление. «Новые технологии», N4. 2003.
УДК 621.391.25(075)
И. Л. Трунов, Т.М. Горягина
ПРОГРАММНО-АППАРАТНЫЙ КОМПЛЕКС ПОМЕХОУСТОЙЧИВОГО КОДИРОВАНИЯ НА ОСНОВЕ КОДОВ С ИРРАЦИОНАЛЬНЫМ
ОСНОВАНИЕМ
Помехоустойчивое кодирование передаваемой информации позволяет в приемной части системы обнаруживать и исправлять ошибки. Коды, применяемые при помехоустойчивом кодировании, называются корректирующими кодами.
Как правило, корректирующий код может исправлять меньше ошибок, чем обнаруживать. Число ошибок, которые корректирующий код может исправить в определенном интервале последовательности двоичных символов, например, в одной кодовой комбинации, называется исправляющей способностью кода.
Существует система счисления с иррациональным основанием т = 1 + ^,
2
получившая название системы счисления Фибоначчи в честь итальянского математика 13-го столетия Леонардо Фибоначчи [1]. Эта система обладает рядом свойств, на основе которых можно построить помехоустойчивые коды.
Данная работа посвящена анализу помехоустойчивости кодов с иррациональным основанием (кодов Фибоначчи), а также построению комплекса помехоустойчивого кодирования для систем связи.
Под р-кодом Фибоначчи понимается следующий способ представления натурального числа №
N = а(п)Рр(п) + а(п-1)Бр(п-1) + ... + а(1)Бр(1) + ... + а^ (1), (1)
где а(п) = {0, 1} - двоичная цифра 1-го разряда представления; п - разрядность представления; Бр(1) - р-число Фибоначчи, задаваемое с помощью следующих рекуррентных формул:
Рр(1)=Рр(1-1)+Рр(1-р-1); (2)
ад = ад = ... = Бр(р+1) = 1, (3)
где р - целое неотрицательное число, принимающее значение из множества {0, 1,
2, 3 ...}.
Кодом Фибоначчи первого порядка называют следующий позиционный способ представления числа N
N = а(п)Б(п) + а(п-1)Б(п-1) + ... +а(1)Б(1) + ... + аДО); (4)
где а 1 = {0, 1} - двоичная цифра 1-го разряда представления; п - разрядность представления; Б(1) - число Фибоначчи, задаваемое с помощью следующего рекуррентного соотношения [2]:
Р(1)=Р (1-1)+Р(1-2); Б(1) = Б(2) = 1. (5)
Эти формулы позволяют получить двоичное представление любого целого положительного числа в системе Фибоначчи. Ниже приведен ряд Фибоначчи первого порядка (далее ряд Фибоначчи), где каждый последующий член ряда равен сумме 2 предыдущих (см. табл. 1).
Таблица 1
Номер разряда 0 1 2 3 4 5 6 7 8 9 10 11 12
Значение 1 1 2 3 5 8 13 21 34 55 89 144 233
Для представления числа N в системе Фибоначчи необходимо разложить его на сумму членов ряда Фибоначчи. Например, число 32 в системе Фибоначчи можно представить следующим образом (табл. 2):
Таблица 2
Разложение Код Фибоначчи
N 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
32= 21 8 3 1 0 1 0 1 0 0 0
32= 21 8 2 1 1 0 1 0 0 1 1 0
21 8 2 1 1 0 1 0 0 1 0 1
32= 13 8 5 3 2 1 0 1 1 1 1 1 1 0
Очевидно, что одно и то же число N может иметь несколько разложений, а следовательно, несколько видов (форм) кодировки в системе Фибоначчи.
Минимальной формой кода Фибоначчи или свернутым кодом числа N называется последовательность единиц и нулей, которая ставится в соответствие разложению числа N на наименьшее число слагаемых ряда Фибоначчи.
Максимальной формой кода Фибоначчи или развернутым кодом числа N называется двоичная последовательность, содержащая максимальное число единиц.
Эти две формы являются ключевыми в построении помехоустойчивого кода Фибоначчи.
Одно из ключевых утверждений теории помехозащищенного кодирования говорит о том, что максимальная форма кода всегда короче минимальной как минимум на 1 разряд, если код не фиксированный. Фиксированным называют код Фи-
боначчи, который нельзя подвергнуть ни свертке ни развертке. Числа, порождающие такой код, называют фиксированными.
Минимальная форма кода Фибоначчи никогда не содержит двух подряд идущих единиц, т.е. комбинация 11 является запрещенной для минимальной формы, а комбинация 00 является запрещенной для максимальной формы.
Переход от минимальной формы к максимальной и наоборот обеспечивают микрооперации свертки и развертки.
Микрооперацией развертки называют последовательную замену кодовой комбинации 100 на 011. Для разложения эта операция эквивалентна замене члена последовательности на сумму 2 предыдущих, при условии, что они ранее не участвовали в разложении.
Если над кодом произвести все возможные развертки, получим максимальную форму.
Микрооперация свертки состоит в последовательной замене кодовой комбинации 011 на 100, что соответствует замене 2 последовательных членов суммы на следующий старший член, при условии, что он ранее не участвовал в разложении [2].
Система счисления Фибоначчи позволяет не только обнаруживать, но и исправлять некоторые ошибки.
Важным понятием в теории исправления ошибок является критерий фиксиро-ванности кода, который можно определить следующим образом: если для всех т>к номеров позиций двух соседних единиц кода т-к=2, для минимальной формы, то минимальная и максимальная формы кода совпадают и код фиксирован.
Так как т и к- номера соседних единиц кода, то т-к- это число свободных (нулевых) разрядов, которое показывает число членов ряда Фибоначчи, не участвующих в разложении. т-к не может быть меньше 2 . Если т-к>2, тогда т-2>к, следовательно, член ряда с номером т можно разложить по формуле
Б (т)=Б (т-1 )+Б (т-2) (6)
без нарушения целостности кода (развернуть). В этом случае код не будет фиксированным.
Из этого критерия видно, что если длины свернутого и развернутого кода числа, пришедшего на приемник, одинаковы, то это фиксированное число и его можно восстановить со 100% точностью.
Минимальную форму кода легко получить из десятичного представления числа N по алгоритму (рис. 1).
Переведем число N=128 в код Фибоначчи. Наибольший член ряда Фибоначчи Б(і)<=128 это Б(10)=89, находим разность N=N^(10):
N=128-89=39, принимаем а(10)=1 в коде Фибоначчи. Далее повторяем предыдущие действия:
Б(9)=55 больше N следовательно, а(9)=0;
Б(8)=34< 39,
N=39-34=5, а(8)=1;
Б(7)=21Ж, а(7)=0;
Б(4)=5=^ а(4)=1;
N=5-5=0 а(3,2,1,0)=0.
Полученный код 10100010000. Это минимальная форма представления. После проведения всех возможных разверток кода он принимает максимальную форму: 10100010000 -> 10100001100 -> 10011001011 -> 01110111011.
Благодаря свойствам кода Фибоначчи в приемной части системы передачи информации (далее СПИ) возможно обнаружить ошибку уже по двум последовательно принятым разрядам кода, причем локализировать ее с точностью до 2 символов. Это позволяет сделать вывод о верности принятого сообщения по его части, не дожидаясь конца сообщения. Данные свойства могут быть полезны для систем, в которых необходимо отслеживать достоверность принятого сообщения в режиме реального времени и с высокой точностью.
Предлагаемая СПИ «FIB» (рис. 2) позволяет, по предварительным подсчетам, фиксировать до 98% ошибок. Оставшиеся два процента обусловлены возможными ошибками и отказами в аппаратной части комплекса.
Г начало
н Г
\= 0
Ввод десятичного числа N
Ґ конец ^
Рис. 1. Алгоритм преобразования десятичного представления числа N в свернутый код Фибоначчи
Исходное сообщение 8 формируется в компьютере ПК1 и поступает на преобразователь П1, который переводит его в свернутый код Фибоначчи Бє. одновременно поступает в канал связи и на блок развертки БР, где преобразуется в развернутый код Бг, после чего поступает в канал связи. На входе приемной части системы стоят 2 блока проверки свернутого и развернутого кода - БСР и БРС. БПР проверяет принятый развернутый код Бг1 на наличие комбинации 00 (ошибка 1 рода), БПС проверяет принятый свернутый код Бє1 на наличие комбинации 11(ошибка 2 рода). Если хотя бы один из них обнаруживает запрещенную комби-
нацию, посылается сигнал на генератор сигнала ошибки ГСО, который управляет устройством синхронизации УС. УС посылает запрос на повторную передачу. Если запрещенные комбинации не обнаружены, развернутый код Fr1 поступает на блок свертки БС, который производит полную свертку кода Fs2. Затем Fs1 сравнивается с Fs2 в схеме сравнения (СС). Если коды идентичны, они поступают на преобразователь П2, который переводит код в десятичную систему и отправляет на компьютер-получатель ПК2. Если Fs1и Fs2 не равны, то на ГСО поступает сигнал об ошибке. Достоинства данного комплекса в том, что большую часть преобразований можно осуществить как на программном уровне, так и аппаратно.
Если ставится цель закодировать текстовое сообщение, то согласно кодовой таблице Windows (CP-1251), максимальное десятичное число, которое участвует в передаче, равно 255. Для его кодировки нужно 13 разрядов в свернутом коде и 12 в развернутом. В стандартной двоичной системе оно займет 8 разрядов. Таким образом, максимальная избыточность R, вносимая при кодировании равна [3]
Рис. 2. Структурная схема СПИ «ПБ»
Я = .100%, (7)
к
где ^длина исходного кодового слова, а п-длиш результата помехоустойчивого кодирования. В приведенном примере избыточность равна 62,5%. Если для передачи использовать только развернутый код, то для любого числа избыточность не превышает 50%.Следует отметить, что для различных чисел избыточность различна и колеблется от 15% до 50%. Этот нестандартный подход с переменной избыточностью позволяет получить хорошую помехоустойчивость достаточно простым методом. Другие системы кодирования, например, кодирование Рида-Соломона или кодирование Хэмминга, вносят меньшую избыточность, но требуют сложных математических вычислений во время кодирования [4]. В системе Фибоначчи очень простые математические основы, что сводит к минимуму вероятность ошибок кодирования.
Так как реализация математики Фибоначчи достаточно проста и на программном и на аппаратном уровне, целесообразно включить в систему блок исправления ошибок (место подключения условно показано на рис. 2 цифрой 1). Его функции построены на основе свойств свернутого и развернутого кода, а также на понятии фиксированных чисел.
Сначала производится оценка размеров принятых свернутого и развернутого кодов. Если они равны, производится автоматическое построение фиксированного кода нужной длины (последовательность 10101010......).
Если длины кодов не равны, свернутый проверяется на ошибку 1 рода. В случае обнаружения ошибки 1 рода алгоритм исправления ошибки выглядит следующим образом (рис. 3).
Рис. 3. Алгоритм исправления ошибки 1 рода в минимальной форме кода
Описание алгоритма приведено ниже.
1. Рассматриваются два последовательных разряда кода.
2. Если они оба равны 1, т.е. обнаружена ошибка 1 рода, второй разряд заменяется 0.
3. Исправленный код проверяется на фиксированность, если код не фиксирован, выполняется переход на пункт 5;
если код фиксирован, проверяемые разряды инвертируются, выполняется переход на пункт 4 .
4. Исправленный код проверяется на ошибку 1 рода,
если она обнаружена- оба разряда обнуляются, после этого выполняется переход на пункт 8;
если ошибка 1 рода не обнаружена, код проверяется на фиксирован-ность;
если код фиксирован, оба разряда обнуляются, выполняется пункт 5; если код не фиксирован, выполняется переход на пункт 5.
5. Рассматривается следующий разряд .
6. По достижении конца кода, исправленная последовательность поступает на блок декодирования.
Исправление ошибки 2 рода производится аналогично с последовательной заменой 00 на 10, 01 или 11.
Алгоритм исправления ошибок реализован экспериментально. Производилась передача текстового сообщения между двумя персональными компьютерами. Эмулятор канала с ошибками был реализован программно, с возможностью изменения интенсивности ошибки в ходе эксперимента. Текст кодировался в соответствии с кодовой таблицей Windows (СР-1251), где каждому символу ставится в соответствие целое число от 0 до 255. Эти числа переводились в кодировку Фибоначчи (минимальная форма). Кодовые последовательности длиной 12 или 13 бит подавались на эмулятор канала, где происходила инверсия одного, двух, трех или четырех последовательных символов. Искаженные кодовые посылки поступали на вход эмулятора блока коррекции в приемной части системы, где производилась проверка и исправление ошибок.
Результаты эксперимента (зависимость числа верно принятых после исправления битов В(е) от числа переданных битов, где е - число последовательных ошибок) показаны на рис. 4.
ЧИСЛО ВЄРНО 1'риННТы* ЄііїС-Ьі
ОМ
^ у 12 1-4 п<=С3<гЯанмЬ1К битов
Рис. 4. Зависимость числа правильно принятых битов после корректора ошибок
от числа ошибок е
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Воробьев Н.Н. Числа Фибоначчи. - М.: Наука, 1978. - 144 с.
2. Стахов А.П. Кодирование данных, основанное на фибоначчиевых матрицах // Труды Международной конференции «Проблемы гармонии, симметрии и Золотого Сечения в природе, науке и искусстве». -Винница: Изд-во Винницкого государственного аграрного университета, 2003. — С. 311-325.
3. Конопелько В.К., Липницкий В.А. Теория норм синдромов и перестановочное декодирование помехоустойчивых кодов. -М.: Эдиториал УРСС, 2004.- 400 с.
4. Золоторев В.В., Овечкин Г.В. Помехоустойчивое кодирование. Методы и алгоритмы. Справочник.-М.: Горячая линия-Телеком, 2004. - 126 с.