Избыточные кодыВступление. Известно, что каналы, по которым передается информация, практически никогда не бывают идеальными (каналами без помех). В них почти всегда присутствуют помехи. Отличие лишь в уровне помех и их спектральном составе. Помехи в каналах образуются по различным причинам, но результат воздействия их на передаваемую информацию всегда один – информация теряется (искажается). Для предотвращения потерь информации в канале были придуманы избыточные коды (коды с избыточностью). Преимущество избыточного кода в том, что при приеме его с искажением (количество искаженных символов зависит от степени избыточности и структуры кода) информация может быть восстановлена на приемнике. Существуют избыточные коды с обнаружением (они только обнаруживают ошибку) и коды с исправлением (эти коды обнаруживают место ошибки и исправляют ее). Для различных помех в канале существуют различные по своей структуре и избыточности коды. Обычно избыточность кодов находится в пределах 10…60% или чуть больше. Избыточность 1/4 (25%) применяется при записи информации на лазерные диски и в системах цифрового спутникового ТВ. Классификация кодов. Известно большое число помехоустойчивых кодов, которые классифицируются по различным признакам. Помехоустойчивые коды можно разделить на два больших класса: блочные и непрерывные. При блочном кодировании последовательность элементарных сообщений источника разбивается на отрезки и каждому отрезку ставится в соответствие определенная последовательность (блок) кодовых символов, называемая обычно кодовой комбинацией. Множество всех кодовых комбинаций, возможных при данном способе блочного кодирования, и есть блочный код. Длина блока может быть как постоянной, так и переменной. Различают равномерные и неравномерные блочные коды. Помехоустойчивые коды являются, как правило, равномерными. Блочные коды бывают разделимыми и неразделимыми. К разделимым относятся коды, в которых символы по их назначению могут быть разделены на информационные символы, несущие информацию о сообщениях и проверочные. Такие коды обозначаются как ( n , k ), где n - длина кода, k - число информационных символов. Число комбинаций в коде не превышает 2^ k . К неразделимым относятся коды, символы которых нельзя разделить по их назначению на информационные и проверочные. Коды с постоянным весом характеризуются тем, что их кодовые комбинации содержат одинаковое число единиц: Примером такого кода является код “3 из 7”, в котором каждая кодовая комбинация содержит три единицы и четыре нуля (стандартных телеграфный код № 3). Линейный код называется систематическим, если первые k символов его любой кодовой комбинации являются информационными, остальные ( n - k ) символов — проверочными. Вероятность необнаруженной ошибки в первом приближении можно определить как вероятность искажения двух символов: Подклассом линейных кодов являются циклические коды. Они характеризуются тем, что все наборы, образованные циклической перестановкой любой кодовой комбинации, являются также кодовыми комбинациями. Это свойство позволяет в значительной степени упростить кодирующее и декодирующее устройства, особенно при обнаружении ошибок и исправлении одиночной ошибки. Примерами циклических кодов являются коды Хэмминга, коды Боуза - Чоудхури - Хоквингема (БЧХ — коды) и др. Примером нелинейного кода является код Бергера, у которого проверочные символы представляют двоичную запись числа единиц в последовательности информационных символов. Например, таким является код: 00000; 00101; 01001; O 111 O ; 10001; 10110; 11010; 11111. Коды Бергера применяются в асимметричных каналах. В симметричных каналах они обнаруживают все одиночные ошибки и некоторую часть многократных. Непрерывные коды характеризуются тем, что операции кодирования и декодирования производятся над непрерывной последовательностью символов без разбиения ее на блоки. Среди непрерывных наиболее применимы сверточные коды. Как известно различают каналы с независимыми и группирующимися ошибками. Соответственно помехоустойчивые коды можно разбить на два класса: исправляющие независимые ошибки и исправляющие пакеты ошибок. Далее будут рассматриваться в основном коды, исправляющие независимые ошибки. Это объясняется тем, что хотя для исправления пакетов ошибок разработано много эффективных кодов, на практике целесообразнее использовать коды, исправляющие независимые ошибки вместе с устройством перемежения символов или декорреляции ошибок. При этом символы кодовой комбинации не передаются друг за другом, перемешиваются с символами других кодовых комбинаций. Если интервал между символами, принадлежащими одной кодовой комбинации, сделать больше чем “память” канала, то ошибки в пределах кодовой комбинации можно считать независимыми, что и позволяет использовать коды, исправляющие независимые ошибки. Блочные коды. Построение кодеков. Линейные коды. Из определения следует, что любой линейный код (п, k ) можно получить из k линейно независимых кодовых комбинаций путем их посимвольного суммирования по модулю 2 в различных сочетаниях. Исходные линейно независимые кодовые комбинации называются базисными. Представим базисные кодовые комбинации в виде матрицы размерностью n Xk (7.7) Матрица задает систематический код. Можно показать, что для любого линейного кода существует эквивалентный систематический код. Подставляя (7.10) в (7.9), можно получать п—k уравнений вида (7.11) Единицы в любой j-й строке подматрицы Р, входящей в проверочную матрицу (7.10), указывают, какие информационные символы участвуют в формировании j-го проверочного символа. Очевидно, что линейный (п, k) код можно построить, используя уравнения проверки (7.11). При этом первые k символов кодовой комбинации информационные, а остальные п-k символов - проверочные, образуемые в соответствии с (7.11). Заметим, что строки проверочной матрицы линейно независимые. Поэтому проверочную матрицу можно использовать в качестве порождающей для некоторого другого линейного кода (п, п-k), называемого двойственным. Кодирующее устройство для линейного (п,k) кода (рис. на предыдущей стр.) состоит из k -разрядного сдвигающего регистра и r =п-k блоков сумматоров по модулю 2. Информационные символы одновременно поступают на вход регистра и на выход кодирующего устройства через коммутатор К. С поступлением k-го информационного символа на выходах блоков сумматоров в соответствии с уравнениями (7.11) формируются проверочные символы, которые затем последовательно поступают на выход кодера. Процесс декодирования сводится к выполнению операции Действительно, где Ввектор, соответствующий передаваемой кодовой комбинации. При S =0 декодер принимает решение об отсутствии ошибок, а при S O - о наличии ошибок. По конкретному виду синдрома можно в пределах корректирующей способности кода указать на ошибочные символы и их исправить. Декодер линейного кода (рис. на следующей стр.) состоит из k - разрядного сдвигающего регистра, (п-k) блоков сумматоров по модулю 2, схемы сравнения, анализатора ошибок и корректора. Регистр служит для запоминания информационных символов принятой кодовой последовательности, из которых в блоках сумматоров формируются проверочные символы. Анализатор ошибок по конкретному виду синдрома, получаемого в результате сравнения формируемых на приемной стороне и принятых проверочных символов, определяет места ошибочных символов. Исправление информационных символов производится в корректоре. Заметим, что в общем случае при декодировании линейного кода с исправлением ошибок в памяти декодера должна храниться таблица соответствий между синдромами и векторами ошибок. С приходом каждой кодовой комбинации декодер должен перебрать всю таблицу. При небольших значениях (п-k) эта операция не вызывает затруднений. Однако для высокоэффективных кодов длиной п, равной нескольким десяткам, разность (п-k) принимает такие значения, что перебор таблицы оказывается практически невозможным. Например, для кода (63, 51), имеющего кодовое расстояние d =5 , таблица состоит из 2^12 = 4096 строк. Следует заметить, что до сих пор общие методы синтеза оптимальных линейных кодов не разработаны. Циклические коды. Циклические коды относятся к классу линейных систематических. Поэтому для их построения в принципе достаточно знать порождающую матрицу. Можно указать другой способ построения циклических кодов, основанный на представлении кодовых комбинаций многочленами b (х) вида: Поэтому на практике в основном применяется следующий метод нахождения многочлена b (x) . Многочлен имеет следующую структуру: первые n - k членов низшего порядка равны нулю, а коэффициенты остальных совпадают с соответствующими коэффициентами информационного многочлена а (х) . Многочлен с (х) имеет степень меньше n - k . Таким образом, в найденном многочлене b (x) коэффициенты при х в степени n - k и выше совпадают с информационными символами, а коэффициенты при остальных членах, определяемых многочленом с (х) , совпадают с проверочными символами. На основе приведенных схем умножения и деления многочленов и строятся кодирующие устройства для циклических кодов. В качестве примера приведена схема кодера и декодера для кода (см. рис.) с порождающим многочленом: Принятая кодовая комбинация одновременно поступает в буферный регистр сдвига, служащий для запоминания кодовой комбинации и для ее циклического сдвига, и на устройство деления на многочлен р (х) для вычисления синдрома. В исходном состоянии ключ находится в положении 1. После семи тактов буферный регистр оказывается загруженным, а в регистре устройства деления будет вычислен синдром. Если вес синдрома больше единицы, то декодер начинает производить циклические сдвиги комбинации в буферном регистре при отсутствии новой комбинации на входе и одновременно вычислять их синдромы s ( x ) x i modp ( x ) в устройстве деления. Если на некотором 1-м шаге вес синдрома окажется меньше 2, то ключ переходит в положение 2, обратные связи в регистре деления разрываются. При последующих тактах ошибки исправляются путем подачи содержимого регистра деления на вход сумматора по модулю 2, включенного в буферный регистр. После семи тактов работы декодера в автономном режиме исправленная комбинация в буферном регистре возвращается в исходное положение (информационные символы будут занимать старшие разряды). Существуют и другие, более универсальные, алгоритмы декодирования. К циклическим кодам относятся коды Хэмминга, которые являются примерами немногих известных совершенных кодов. Они имеют кодовое расстояние d =3 и исправляют все одиночные ошибки. Среди циклических кодов широкое применение нашли коды БоузаЧоудхуриХоквингема (БЧХ). Сверточные коды Методы описания сверточных кодов. Кодер СК содержит регистр памяти для хранения определенного числа информационных символов и преобразователь информационной последовательности в кодовую последовательность. Процесс кодирования производится непрерывно. Скорость кода R = k / n , где k - число информационных символов, одновременно поступающих на вход кодера, n - число соответствующих им символов на выходе кодера. Схема простого кодера показана на рис. 1.1а. Символы a (1) и a (2) на его выходе образуют импульсный отклик h = 00111011 00... Таким образом, если на входе кодера действует произвольная информационная последовательность и, то последовательность на его выходе есть сумма по модулю 2 всех импульсных откликов, обусловленных действием смещенных во времени символов 1. Сверточный кодер, как автомат с конечным числом состояний, может быть описан диаграммой состояний. Диаграмма представляет собой направленный граф и описывает все возможные переходы кодера из одного состояния в другое, а также содержит символы выходов кодера, которые сопровождают эти переходы. Процесс построения диаграммы заканчивается когда будут просмотрены все возможные переходы из одного состояния во все остальные. Решетчатая диаграмма является разверткой диаграммы состояний во времени. На решетке состояния показаны узлами, а переходы соединяющими их линиями. После каждого перехода из одного состояния в другое происходит смещение на один шаг вправо. Решетчатая диаграмма дает наглядное представление всех разрешенных путей, по которым может продвигаться кодер при кодировании. Каждой информационной последовательности на входе кодера соответствует единственный путь по решетке. Построение решетки производится на основе диаграммы состояний. Исходное состояние S (1) S (2) =0. С поступлением очередного символа u =0 либо 1 возможны переходы в состояния 00 либо 10, обозначаемые ветвями 00 и 11. Процесс следует продолжить, причем через три шага очередной фрагмент, решетки будет повторяться. Пунктиром показан путь 11100001..., соответствующий поступлению на вход кодера информационной последовательности 1011... Элементами этих матриц двоичных кодов являются символы 0 и 1. Как при использовании блоковых кодов, процесс кодирования может быть представлен в матричной форме: A = UG (1.4) ,где U - полубесконечная матрица входных информационных символов, Аполубесконечная матрица символов на выходе кодера. Декодирование сверточных кодов. Алгебраические методы декодирования основаны на использовании алгебраических свойств кодовых последовательностей. В ряде случаев эти методы приводят к простым реализациям кодека. Такие алгоритмы являются неоптимальными, так как используемые алгебраические процедуры декодирования предназначены для исправления конкретных (и не всех) конфигураций ошибок в канале. Алгебраические методы отождествляют с поэлементным приемом последовательностей, который для кодов с избыточностью, как известно, дает худшие результаты, чем прием в целом. Вероятностные методы декодирования значительно ближе к оптимальному приему в целом, так как в этом случае декодер оперирует с величинами, пропорциональными вероятностям, оценивает и сравнивает вероятности различных гипотез и на этой основе выносит решения о передаваемых символах. Пороговое декодирование. Вероятностные методы декодирования достаточно сложны в реализации, хотя и обеспечивают высокую помехоустойчивость. Наряду с ними широко применяют более простые алгоритмы. Для этой цели используют класс СК, допускающих пороговое декодирование. |