_Доклады БГУИР_
2009 № 5 (43)
УДК 621.391
КОРРЕКЦИЯ ОШИБОК ЦИКЛИЧЕСКИМИ КОДАМИ C ИСПОЛЬЗОВАНИЕМ СТИРАНИЙ
А.В. ШКИЛЕНОК
Белорусский государственный университет информатики и радиоэлектроники П. Бровки 6, Минск 220013, Беларусь
Поступила в редакцию 16 октября 2009
Рассматривается возможность коррекции случайных и зависимых ошибок циклических кодов с использованием стираний. Применение стираний при коррекции ошибок позволяет исправить вдвое большее количество ошибок при тех же корректирующих способностях кода.
Ключевые слова: циклические коды, коррекция ошибок, стирания.
Введение
Одной из основных проблем в современных телекоммуникационных системах является повышение надежности передачи информации и помехоустойчивости систем и сетей связи. Среди множества методов борьбы с ошибками при передаче данных наибольшее распространение получило помехоустойчивое кодирование, позволяющее повысить качественные показатели работы систем связи. В цифровых системах широкое применение получили итеративные коды, однако их высокая избыточность влечет за собой сложные и вычислительно трудоемкие алгоритмы их декодирования, что нередко является преградой на пути их использования в некоторых системах. В работе [1] при декодировании итеративных кодов предложено использовать метод коррекции ошибок с использованием стираний, что позволяет многократно увеличить количество исправляемых ошибок, не увеличивая длины и корректирующих способностей исходных кодов. Так как в качестве исходных кодов в итеративных могут использоваться и линейные блоковые, то весьма вероятно, что те же методы могут быть применены и при обработке циклических блочных кодов.
Важным моментом при декодировании кодов является наличие информации о структуре и количестве исправляемых ошибок в принимаемой кодовой последовательности. При наличии информации о местоположении неверно принятых символов их можно стереть, а потом применить метод исправления ошибок со стираниями, что позволит вдвое увеличить корректирующие способности кода, не изменяя при этом его параметров (длины, скорости и т.д.).
При таком подходе можно с достаточно высокой степенью вероятности утверждать об эффективности применения при декодировании циклических блоковых кодов тех же методов, что и при декодировании итеративных кодов, поскольку это дает принципиально новые возможности для повышении надежности передачи информации в каналах связи с высокой нестабильностью помех, универсальность в применении различных типов помехоустойчивых кодов для при решении одних и тех же задач, расширяет сферы применения данного типа кодов.
Коррекция случайных и зависимых ошибок при декодировании циклических кодов со стираниями
В работе [2] приводятся алгоритм и метод декодирования, использующие стирания при исправлении случайных ошибок. В работе [3] показано, что применяя классификацию ошибок, возможно многократно сократить количество анализируемых селектором комбинаций и уменьшить сложность декодера БЧХ-кодов. Согласно классификации ошибок все однократные зависимые ошибки являются типичными, поэтому все они могут корректироваться как частный случай независимых многократных ошибок. Применяя дополнительно к этому исправление ошибок со стираниями корректирующие способности кода можно дополнительно повысить.
Под стиранием понимаются искаженные символы, местоположение которых известно при декодировании, но неизвестно их истинное состояние. Эта дополнительная информация позволяет исправлять ^ ошибок и р стираний кодом, у которого:
й > 2^ + р + 1. (1)
Например, код с й = 7 позволяет корректировать две ошибки и два стирания, одну ошибку и четыре стирания или шесть стираний. Как следует из (1) введение стираний, по сравнению с исправлением только ошибок, обладает тем преимуществом, что исправление ошибок требует вдвое больше усилий (и избыточности), чем исправление стираний, поскольку позиции стираний известны декодеру. Иными словами, информация о местоположении стертых символов позволяет в два раза повысить эффективность использования одного и того же кода по сравнению с обычным исправлением ошибок [4-7].
Известен простой метод исправления стираний с помощью линейного кода: стертые символы заменяются нулями, и вычисляется синдром. Если вычисленный синдром равен нулю, то принимается что, все стертые символы равны нулю. Если синдром не равен нулю, то один из стертых символов заменяется единицей и снова вычисляется синдром. В результате чего можно найти вектор согласования состояний стираний с переданными словами. Эта процедура повторяется до тех пор, пока соответствующий синдром не будет равен нулю.
Очевидно, что такой переборный метод исправления стираний требует больших временных затрат. В общем случае, для коррекции р стираний необходимо выполнять в худшем случае 2р вычислений синдромов (на каждое вычисление синдрома также требуются временные затраты), поэтому данный декодер будет иметь низкое быстродействие. Этот недостаток обусловлен тем, что каждый раз необходимо вычислить синдром по правильным значениям принятых символов и подставляемых значений стираний и при этом не используется вычисленный синдром на предыдущем этапе.
При коррекции многократных ошибок возникает так называемая «проблема селектора», а при обнаружении ошибок такая проблема не возникает. Если использовать идентификацию ошибок, при которой ошибки обнаруживаются и определяется кратность произошедших ошибок, то можно выбрать эффективный алгоритм обработки: вначале осуществляется коррекция ошибок малой кратности, отказ от декодирования или установление местоположения стираний, которые затем корректируются как стирания. Это позволяет упростить реализацию декодера.
Многократные стирания (или стирания и ошибки) могут исправляться циклическими кодами следующим образом. Вначале заменяются все стертые символы нулями, и декодируется полученное слово с использованием стандартного алгоритма декодирования циклических кодов для коррекции только ошибок, и получается кодовое слово А0(х). Затем снова заменяются все стертые символы единицами, и осуществляется подобное декодирование и получается кодовое слово А^х). Наконец выбирается из А0(х) и А1(х) в качестве результата декодирования кодовое слово, в котором было исправлено меньшее число ошибок в нестертых позициях [6, 7]. При этом любая допустимая по условию (1.1) комбинация стираний и ошибок исправляется за две попытки исправления только ошибок. Это значит, что рассмотренный метод исправления стираний циклическими кодами требует аппаратных и временных затрат вдвое больше, чем исправление только ошибок. Кроме того, при коррекции многократных стираний необходимо применить код с большим кодовым расстоянием, что по рассмотренному методу приводит к
коррекции многократных ошибок, и снова появляется проблема селектора. При исправлении только стираний (без ошибок) алгоритм декодирования упрощается. При этом стертые символы заменяются нулями, и вычисляется синдром. Если вычисленный синдром равен нулю, то принимается что, все стертые символы равны нулю. Если синдром не равен нулю, то один из стертых символов заменяется единицей и снова вычисляется синдром. В результате можно найти истинные состояния стираний. Эта процедура повторяется до тех пор, пока соответствующий синдром не будет равен нулю.
Таким образом, для коррекции ошибок циклическими кодами с использованием стираний необходимо применение двухэтапного метода декодирования:
- обнаружение ошибок и коррекция (коррекция ошибок малой кратности);
- стирание некорректируемых ошибок и коррекция стираний этим же кодом.
Декодер однократных стираний (в том числе пакетных и модульных) будет по своей
структуре аналогичен декодеру, корректирующему однократные ошибки, за исключением добавления блока формирования вектора согласований стираний.
Для исправления многократных стираний потребуется дополнительно учитывать нетипичные векторы ошибок согласно классификации.
Быстродействие декодера можно увеличить, если при коррекции стираний перейти к параллельному вычислению векторов согласования стираний и формированию векторов ошибок (иначе придется многократно «прогонять» все содержимое регистра, что приводит к большим временным задержкам). При этом следует не забывать об обязательном наличии цепи обратной связи к БВС для модификации синдрома.
Общее правило декодирования циклических кодов с использованием стираний выглядит следующим образом:
1. Вычисление синдрома;
2. Коррекция корректируемых ошибок или идентификация некорректируемых;
3. Стирание позиций символов, идентифицированных, как ошибочные, но некорректируемые;
4. Поиск вектора согласования стираний;
5. Коррекция стираний;
6. Если комбинация неисправимая - отказ от декодирования.
По синдрому образующего вектора ошибок можно определить подмножество (подкласс) ошибок, а соответственно их кратность и местоположение. Для этого известный декодер классифицированных ошибок требуется дополнить третьим регистром с сумматорами по модулю два для параллельного исправления. При параллельном исправлении стираний возможно получение вектора согласования аналогичным образом, как и у линейных блоковых кодов. Задача нахождения вектора согласования выбранного значения состояния стираний с переданными является трудоемкой задачей. Однако ее можно упростить, если сопоставить каждому вектору согласования ш соответствующий синдром и по совпадению вычисленного синдрома 5 с сопоставляемым находить соответствующий вектор ошибок.
Общее количество тактов на декодирование и коррекцию ошибок составляет (2п-1) на вычисление синдрома и п тактов на исправление стираний.
Преимуществом перед классическим декодером со стираниями будет являться уменьшение задержек при вычислении синдромов ошибок, так как вычисление синдрома будет происходить на каждом этапе исправлений лишь однократно.
Метод исправления стираний на основе нахождения векторов согласования стираний позволяет предложить декодер с приемлемой сложностью и быстродействием. Важным моментом является возможность реализации блочной структуры декодера на ПЗУ и ПЛИС, которая затем легко наращивается модульным путем при помощи увеличения числа однотипных функциональных блоков, что позволит сохранить высокое быстродействие за счет однородности структуры. При коррекции однократных модульных и пакетных стираний объем ПЗУ можно уменьшить за счет хранения только ошибочных модулей, а не всех векторов ошибок.
Известен метод коррекции ошибок с использованием стираний, подробно рассмотренный в [2]. Известно, что для двоичных кодов ошибке в /-ой позиции кодового слова соответствует синдром, образованный /-ым столбцом проверочной матрицы, а в случае наличия
многократных ошибок синдром равен сумме синдромов, образованных теми столбцами, где произошли ошибки. Это можно использовать для разработки декодера циклических кодов с исправлением стираний.
Вначале, согласно символам принятого слова Ап вычисляется синдром 5:
5 = Ап*Ит. (2)
После этого, состояние в стертых разрядах заменяется всеми возможными комбинациями, и вычисляются синдромы соответствующие векторам со значениями нестертых символов, равными нулю. Сравнивая 5 с 5Х можно найти вектор ошибки и выполнить исправление стираний.
Вышеописанный алгоритм позволяет уменьшить задержку в силу уменьшения задержек при вычислении синдромов, но тем не менее, это тоже переборный метод. Отметим, что в вышеописанном алгоритме столбцы проверочной матрицы, соответствующие нестертым позициям принятого слова не влияют на значение синдрома 8, следовательно, при вычислении синдрома 5 можно пренебречь этими столбцами.
Рассмотрим более эффективный метод исправления стираний основанный на использовании вычисленного на первоначальном этапе синдрома известных позиций стираний, а следовательно и составляющих одиночных синдромов. В соответствии с позициями стертых разрядов составляется подматрица стираний, которая содержит столбцы проверочной матрицы кода Н с номером, равным номеру позиции стирания. Обозначим вектор согласования состояний стираний ш - вектор строки с р элементами, 7-й элемент соответствует 7-ой слева стертой позиции и равен нулю, если значение этой позиции у принятого слова совпадает с правильным значением кодового слова и равен единице в противном случае. Вектор согласования со стираниями ш, равен вектору ошибок е, который имеет единичные значения в стертых позициях и значения нуля в остальных позициях, например, е = (00«;0...0«2... Шр0...0).
Согласно принятому слову вычисляется синдром 52. Если = 0, то вектор согласования состояний стираний равен нулю, в принятом слове нет ошибок и все стертые разряды согласованы с их значениями. Когда Ф 0 производится выбор из ПЗУ соответствующего вектора согласования и формируется вектор ошибки, который подается на блок коррекции для исправления ошибок в принятой кодовой комбинации.
Структурная схема декодера циклического кода со стираниями представлена на рисунке.
Структурная схема декодера циклического кода со стираниями
Предложенный декодер может быть достаточно просто реализован аппаратно с применением ПЗУ или ПЛИС для нахождения всех одиночных синдромов стертых позиций и
их всевозможных сумм, блока совпадения и блока формирования вектора ошибок по вектору ш. Декодер по предложенному алгоритму будет обладать высоким быстродействием благодаря вычислению синдрома только один раз.
Выводы
Проведенные исследования показали возможность использования стираний при коррекции случайных и зависимых ошибок циклическими кодами Предложена структурная схема декодера циклических кодов с использованием стираний. Исправление многократных случайных и зависимых ошибок также возможно, однако это значительно увеличивает количество анализируемых комбинаций и, соответственно, требуемый объем памяти для хранения синдромов ошибок и векторов согласования. Полученные результаты подтверждают возможность использования при коррекции многократных случайных, пакетов и модулей ошибок циклическими кодами в режиме исправления со стираниями.
ERROR CORRECTING CYCLIC CODES WITH USING ERASURES
A.V. SHKILENOK
Abstract
Considered ability of correct dependent and independent errors by cyclic codes with using erasures. Applying erasure with correction errors let correct double amount of errors with the same correcting abilities of codes.
Литература
1. Фам, ХакХоан // Докл. БГУИР. 2008. № 1. 141-146.
2. Конопелько В.К., Липницкий В.А., Дворников В.Д. и др. Теория прикладного кодирования: Учебное пособие. М., 2004.
3. Шкиленок А.В. Конопелько В.К // Докл. БГУИР, 2007. №2 (18), С. 12 - 18.
4. Блейхут Р. Теория и практика кодов, контролирующих ошибки. М., 1986.
5. ВернерМ. Основы кодирования. М., 2006.
6. Кларк, Дж. мл. Кодирование с исправлением ошибок в системах цифровой связи. М., 1987.
7. Морелос-Сарагоса Р. Искусство помехоустойчивого кодирования. М., 2005.