Эффективная программная реализация помехоустойчивых блоковых кодов современными микропроцессорными средствами

УДК 681.32

А. А. Лаврухин

ЭФФЕКТИВНАЯ ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПОМЕХОУСТОЙЧИВЫХ БЛОКОВЫХ КОДОВ СОВРЕМЕННЫМИ МИКРОПРОЦЕССОРНЫМИ СРЕДСТВАМИ

В статье рассмотрены вопросы реализации помехоустойчивых блоковых кодов, в частности, кодов Рида-Соломона, средствами современных микропроцессоров. Описаны способы повышения производительности вычислений за счет архитектурных особенностей одного класса процессоров и предложены рекомендации для получения оптимальной по скорости вычисления программы и предварительного оценивания ее быстродействия. Показано использование предложенных рекомендаций на примере двух наиболее вычислительно затратных участков алгоритмов кодирования и декодирования на базе отечественных процессоров серии «Мульти-кор». Предложенные рекомендации позволят повысить пропускную способность каналов передачи информации на железнодорожном транспорте за счет принципиальной возможности реализации наиболее эффективных, но алгоритмически сложных кодов.

Помехоустойчивое кодирование широко применяется во многих современных системах передачи информации, в том числе и на железнодорожном транспорте, и способствует повышению качества связи на канальном уровне. Подавляющее большинство наиболее часто используемых корректирующих кодов подразделяется на два типа - сверточные [1], в которых кодирование и декодирование производится непрерывно, и блоковые [1, 2], в которых эти операции осуществляются в пределах конечных информационных блоков. Самыми эффективными кодами (имеющими одновременно хорошую помехоустойчивость и малую избыточность) считаются каскадные [3], последовательно использующие блоковое и сверточ-ное кодирование.

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

Один из новейших и в настоящее время активно внедряющихся стандартов беспроводной связи - стандарт IEEE 802.16-2004 (WiMAX), который предусматривает последовательное использование средств, способствующих повышению помехоустойчивости: перемеже-ние, кодирование Рида-Соломона, сверточное кодирование. Помимо этих операций к цифровой обработке данных относится модуляция и демодуляция. При проектировании устройств связи одной из основных задач является минимизация стоимости конечного продукта, что требует использования наиболее дешевых микропроцессорных средств. Другим требованием является простота и надежность устройства.

Современные микропроцессоры имеют разнообразные аппаратные средства повышения производительности вычислений. К ним относятся SIMD- и MIMD-архитектуры, обеспечивающие параллельную синхронную и асинхронную обработку данных на одном кристалле, мультискалярная архитектура, при которой процессор способен автоматически группировать несколько последовательных простых команд для выполнения их в течение одного такта вычислений, и архитектура с системой команд, предусматривающей возможность объединения нескольких простых команд в одну инструкцию еще на этапе программирования [4]. В последнем случае необходимо выработать ряд правил, руководствуясь которыми можно было бы быстро оценить максимально возможную скорость работы алгоритма на определенном типе процессора, а при написании программы - получить оптимальный код программы.

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

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

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

Система команд подразделяется на несколько частей: арифметические операции, команды типа умножение или сдвиг, команды обмена с памятью данных (использующие адресные регистры). Благодаря тому, что разные типы операций задействуют различные устройства ядра процессора, они могут быть сгруппированы и записаны в виде одной инструкции. В процессорах семейства «Мультикор» ядро содержит второе адресное устройство, позволяющее дополнительно выполнять чтение из памяти данных параллельно с любыми другими адресными операциями.

Получение блоковых кодов и их декодирование основано на арифметике в полях Галуа [2]. Операция сложения в поле Галуа имеет смысл операции поразрядного исключающего «или» (сложения по модулю два). Умножение в поле имеет более сложный вид и не может быть заменено операциями обычной битовой или байтовой арифметики. Многие процессоры, к сожалению, не имеют операции умножения в поле Галуа, и в таких случаях вычисления основаны на использовании двух таблиц - степеней и логарифмов. С помощью таблицы логарифмов каждому элементу поля сопоставляется степень, в которую необходимо возвести примитивный элемент, чтобы получить заданный элемент. А таблица степеней, напротив, необходима для сопоставления каждой степени (от 0 до 254) того элемента, который будет получен при возведении в эту степень примитивного элемента поля. Для умножения двух чисел сначала необходимо найти их логарифмы, сложить их, определить остаток от деления полученной суммы на число 255, что даст степень искомого произведения, и, наконец, возвести 2 в полученную степень. Используя общепринятые обозначения, произведение элементов a и b можно записать в виде выражения:

a  b = 2

где  - операция произведения в поле Галуа; mod - операция определения остатка от целочисленного деления (она заменяется проверкой, превышает ли сумма значение 254, и вычитанием величины 255 в положительном случае), а возведение в степень и взятие логарифма выполняются табличным способом.

Информационное сообщение представляется полиномом d(x), в котором членами при степенях x являются информационные байты. Порождающим называется полином g(t), зависящий от свойств кода Рида-Соломона, степень которого равняется 2t - 1, где t - количество ошибок, которое способен исправить код внутри одного блока (в приведенном случае t = 8).

Будем рассматривать систематический код Рида-Соломона, когда закодированное сообщение содержит информационную часть в явном виде. В этом случае кодирование представляет собой деление полинома x2t • d(x) на порождающий полином g(x) и получение остатка b(x). Кодовым словом (закодированным сообщением) называется сумма

c

Такой способ кодирования используется наиболее широко, а его реализация, схема которой приведена на рисунке, напоминает схему авторегрессионного фильтра [2, 5]. Значениями gj и bj обозначены члены соответствующих полиномов g(x) и b(x). Квадратными блоками обозначены регистры задержки.

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

b = j

С учетом формулы (1) выражение (3) записывается в виде:

Ъ = Ъ_ _1 © 2

где gj - коэффициенты порождающего полинома в логарифмической форме.

-умножение в поле Галуа

Структурная схема кодера

Разложим выражение (4) на простые операции (арифметические и адресные), каждой из которых соответствует одна команда процессора. К арифметическим командам можно отнести сложение, проверку условия, условное вычитание, исключающее «или». К командам, работающим с адресными регистрами, относятся операции обмена с памятью, а также загрузки номера строки таблицы степеней в индексный регистр (адресация по индексу позволяет загружать значение, расположенное с нужным смещением относительно базового адреса - начала таблицы). Последовательность команд, соответствующая полному вычислительному циклу по формуле (4), приведена в таблице 1.

Таблица 1 - Разложение элементарной операции кодирования на команды

Номер команды Арифметические команды Команды пересылки

1 Загрузка gj  Я0; Ъу-1  Я4

2 ^ + а]: Я0 + Я2  Я6

3 Проверка условия Я6 > 255

4 Я6 - 255  Я6, если условие верно

5 Я6  Номер строки в таблице степеней

6 Загрузка из таблицы степеней  Я8

7 Щ = Ъ-х © (&  а)]: Я4 © Я8  Я10

8 Сохранение Я10

Как видно из данных таблицы 1, элементарная операция кодирования (4) состоит из четырех арифметических команд (из которых одна - условная, т. е. выполняется не всегда) и пяти адресных. Используя возможность параллельной обработки разного типа команд, требуется сгруппировать их наиболее оптимальным способом так, чтобы количество полученных инструкций было минимальным.

Исходя из архитектуры рассматриваемого процессора граничным минимальным значением количества инструкций можно считать число

^шт _ шах ё^арифм, ^умнож , ^адрес Ц + ^усл ,

где Агарифм - количество безусловных арифметических операций; ^умнож - количество безусловных команд умножения или битового сдвига; ^адрес - количество безусловных операций, которые задействуют адресные регистры (если используется более одной команды загрузки, количество таких операций можно уменьшить на единицу); ^усл - количество условных команд.

В соответствии с выражением (5) приведенная в таблице 1 последовательность команд может быть упакована в виде пяти инструкций, поскольку имеется четыре команды пересылки и одна условная операция исключающего «или».

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

- общая последовательность команд определяется номером инструкции внутри итерации; после выполнения всех команд (к-2)-й итерации выполняется (к-1)-я, а затем - к-я итерация;

- в одной строке должны группироваться команды разных типов (исключение может быть сделано только для одной команды загрузки);

- условные операции нельзя группировать с безусловными;

- если значение в некоторый регистр помещается в т-й инструкции (к-1)-й итерации, то оно должно быть использовано не позднее чем в т-й инструкции к-й итерации;

- количество итераций должно быть минимально возможным.

Таблица 2 - Группировка команд кодера в инструкции

Номер Номер итерации

инструкции к - 2 к - 1 к

1 Я6  Номер строки в таблице степеней

2 Я0 + Я2  Я6 Загрузка из таблицы степеней  Я8

3 Загрузка  Я0 Загрузка Ь,-1  Я4 Я4 © Я8  Я10

4 Проверка условия Я6 > 255 Сохранение Я10

5 Я6 - 255  Я6,

если условие верно

Таким образом, основное тело цикла будет содержать пять инструкций в соответствии с таблицей и будет выполняться за пять тактов. Каждой к-й итерации цикла должны предшествовать две - (к-1)-я и (к-2)-я, но поскольку для первой и второй итераций цикла это не выполняется, перед циклом необходима преамбула, состоящая из команд (к-2)-го и (к-1)-го столбцов.

Декодирование выполняется по более сложному алгоритму и за несколько этапов. Существует около десятка различных методов декодирования [5 - 8], но наиболее популярной до настоящего времени остается схема Питерсона-Горенстейна-Цирлера [2, 5], использующая синдромный способ декодирования. В соответствии с ней на первом этапе определяется син-дромный полином (он несет информацию о позициях и величинах ошибок), затем - полином локаторов ошибок, находятся его корни (позиции ошибок), и, наконец, по алгоритму Форни [2] вычисляются значения ошибок. Наиболее вычислительно затратная часть - это определение синдрома, поэтому далее ограничимся только этим элементом алгоритма.

Принятое сообщение по аналогии с кодовым словом (2) представляется в виде полинома у(х) и при наличии ошибок отличается от многочлена с(х). Для вычисления синдромного полинома 5(х) необходимо последовательно найти все его ,-е компоненты путем определения значений г(х) в точках 2 [2]:

V

Если принятое сообщение имеет длину п, то синдром определяется двойным вложенным циклом, состоящим из п и 16 повторений, а тело цикла содержит изменение ,-го компонента синдрома:

5,. =©|з 2,

Используя выражение (1), элементарную операцию (7) можно записать в виде формулы:

sJ = © 2

Последовательность команд процессора, выполняющая эти вычисления, приведена в таблице 3.

Таблица 3 - Разложение элементарной операции вычисления синдрома в декодере на команды

Номер команды Арифметические команды Команды пересылки

1 [V,- = vj + (п - /)]: Я2 + Я4  Я2

2 Проверка условия Я2 > 255

3 Я2 - 255  Я2, если условие верно

4 Я2  Номер строки в таблице степеней

5 Загрузка из таблицы степеней  Я6

6 Загрузка я-  Я0

7 [Формула (9)]: Я0 © Я6  Я8

8 Сохранение Я8

В соответствии с выражением (5) количество инструкций для представления формулы (8) не может быть меньше четырех, поскольку имеется одна условная операция, три арифметических и четыре адресных (из которых одна - загрузка, которая может быть объединена с любой другой адресной командой). Сгруппированные инструкции приведены в таблице 4.

Таблица 4 - Группировка команд подпрограммы вычисления синдрома декодера в инструкции

Номер инструкции Номер итерации

к - 2 к - 1 к

1 2 3 4 Я2 + Я4  Я2 Проверка условия Я2 > 255 Я2 - 255  Я2, если условие верно Я2  Номер строки в таблице степеней Загрузка из таблицы степеней  Я6 Загрузка я-  Я0 Я0 © Я6  Я8 Сохранение Я8

На базе процессора КУС°ш, относящегося к серии «Мультикор», были реализованы кодеры и декодеры Рида-Соломона для нескольких кодов, исправляющих от двух до восьми ошибок, которые используются в стандарте ^ШМАХ (все коды являются частным случаем кода ЯБ(255, 239, 8) и образуются путем стирания разного количества информационных или контрольных байт).

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

Таблица 5 - Аналитические и практические результаты работы подпрограмм кодирования и декодирования

Алгоритм Количество циклов кодирования (4) или вычисления синдрома (8) на один байт Количество тактов на один байт

по формуле (5) получено при реализации программы

Кодер 16 80 92

Декодер Я8(40, 36, 2) 17,7 71 86

Декодер Я8(64, 48, 8) 21,3 85 98

Декодер Я8(ю8, 96, 6) 18 72 82

Число элементарных операций кодирования (4) и декодирования (8) и количество тактов указаны в таблице 5 в относительном виде из расчета на один обрабатываемый байт полезной информации. Все приведенные значения для декодирования касаются лишь задачи вычисления синдрома. Определение синдрома при использовании разных кодов занимает от 40 до 65 % всего вычислительного времени декодирования.

Таким образом, в настоящее время существует новая элементная база отечественного производства, которая может применяться для реализации цифровой связи в соответствии с современными стандартами, такими как WiMAX. Цифровая связь может перекрыть все существующие потребности: передачу любой служебной информации, звуковой и видеоинформации, доступ к интернет-ресурсам.

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

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

Список литературы

1. Скляр, Б. Цифровая связь. Теоретические основы и практическое применение [Текст] / Б. Скляр. - М.: Вильямс, 2003. - 1104 с.

2. Блейхут, Р. Теория и практика кодов, контролирующих ошибки [Текст] / Р. Блейхут. -М.: Мир, 1986. - 576 с.

3. Золотарев, В. В. Помехоустойчивое кодирование. Методы и алгоритмы [Текст] / В. В. Золотарев, Г. В. Овечкин. - М.: Горячая линия - Телеком, 2004. - 126 с.

4. Сперанский, В. С. Сигнальные микропроцессоры и их применение в системах телекоммуникаций и электроники [Текст] / В. С. Сперанский. - М.: Горячая линия - Телеком, 2008. - 168 с.

5. Кларк, Дж. Кодирование с исправлением ошибок в системах цифровой связи [Текст] / Дж. Кларк, Дж. Кейн. - М.: Радио и связь, 1987. - 391 с.

6. Ning Chen. Complexity analysis of Reed-Solomon decoding over GF(2m) without using syndromes [Электронный ресурс] / Ning Chen, Zhiyuan Yan : http://arxiv.org/pdf/0803.0731v2

7. Didier, F. Efficient erasure decoding of Reed-Solomon codes [Электронный ресурс] / F. Didier : http://arxiv.org/pdf/0901.1886v1

8. Moon, T. K. Error correction coding. Mathematical methods and algorithms [Текст] / T. K. Moon. - Wiley, 2005. - 800 p.

УДК 624.012.46.001.24

С. А. Бокарев, Д. Н. Цветков

ЭКСПРЕСС-ОЦЕНКА ТЕХНИЧЕСКОГО СОСТОЯНИЯ ЭКСПЛУАТИРУЕМЫХ СТАЛЕЖЕЛЕЗОБЕТОННЫХ ПРОЛЕТНЫХ СТРОЕНИЙ ЖЕЛЕЗНОДОРОЖНЫХ МОСТОВ ПО ДИНАМИЧЕСКИМ ПАРАМЕТРАМ

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

Результаты обследования эксплуатируемых сталежелезобетонных пролетных строений железнодорожных мостов свидетельствуют о наличии достаточно большого количества дефектных пролетных строений, имеющих повреждения железобетонной плиты, снижающие их грузоподъемность. Оценку грузоподъемности осуществляют, используя основные положения СНиП 2.05.03-84*. Мосты и трубы [1] и отдельные рекомендации руководств по определению грузоподъемности железобетонных и металлических пролетных строений [2, 3]. Такой подход реализован в НИИ мостов [4] и в Сибирском государственном университете путей сообщения (СГУПСе) [5]. В соответствии с требованиями указанных нормативных документов необходимо проведение значительного комплекса работ по обследованию и испытанию, в процессе которых выявляются дефектные пролетные строения. Перечисленные методики требуют определения прочностных параметров железобетонной плиты и напряжений в поясах металлических балок.

ни

Ш20Т0