Коды.pptx
- Количество слайдов: 18
Структурная классификация кодов
Блочный код - код, кодирующий последовательности из набора символов алфавита S в кодовые слова, преобразуя каждый символ из S отдельно. Пусть последовательность натуральных чисел, каждое меньше |S|. Если и некоторое слово W из алфавита S записано как , тогда кодовым словом, соответствующим W, а именно, C(W), будет: Он увеличивает избыточность сообщения так, чтобы в приемнике можно было расшифровать его с минимальной (теоретически нулевой) погрешностью, при условии, что скорость передачи информации (количество передаваемой информации в битах в секунду) не превысила бы канальную производительность. Главная характеристика блочного кода состоит в том, что это – канальный код фиксированной длины (в отличие от такой схемы кодирования источника данных, как кодирование Хаффмана, и в отличие таких методов канального кодирования, как конволюционное кодирование ( «сверточное» кодирование) ). Обычно, система блочного кодирования получает на входе k-значное кодовое слово W, и преобразовывает его в n-значное кодовое слово C(W). Это кодовое слово и называется блоком. Блочное кодирование было главным типом кодирования, используемого в ранних системах мобильной коммуникации.
Сверточный код Сверточные коды относятся к непрерывным рекуррентным кодам. Они называются непрерывными, так как последовательность информационных символов при кодировании не разбивается на блоки. Теоретически проверочные символы могут зависеть от неограниченно удаленных информационных. Это позволяет считать сверточные коды обобщением блочных. Рекуррентными эти коды называются потому, что соотношения, связывающие проверочные символы с информационными, справедливы для любого участка информационной последовательности. В сверточных кодах так же, как и в блочных, выделяют классы систематических и несистематических кодов. Напомним, что в словах систематического кода известны позиции с информационными и проверочными символами. Термин «сверточные коды» объясняется тем, что кодовое слово можно рассматривать как свертку отклика линейной системы (кодера) и входной информационной последовательности. Поэтому сверточные коды являются линейными, для которых сумма любых кодовых последовательностей также является кодовой последовательностью. Структура слова систематического сверточного кода схематично изображена на рисунке.
Не заштрихованные участки отмечают позиции, на которых расположены информационные символы (кадры), а заштрихованные – позиции с проверочными символами. Таким образом, кодовое слово состоит из элементарных блоков длиной с информационными символами, что обеспечивает скорость . При анализе сверточных кодов удобно считать, что информационные символы, стоящие на одинаковых позициях в элементарных блоках, принадлежат одной информационной последовательности. Таким образом, при использовании кода производится кодирование информационных последовательностей, которые формируются, например, путем периодического подключения источника информации на входных шин кодера. Стрелками на рис. условно показаны связи между проверочными и информационными символами. Эти связи имеют место для любого участка кодовой последовательности. Поскольку технически реализация кодеров возможна при ограниченном объеме запоминающих устройств, то влияние информационного символа на проверочные распространяется также на конечное число позиций. На практике используются различные определения длин сверточных кодов. Следуя [3], назовем длиной кодового ограничения величину , где – число кадров, хранящихся в кодере. Число позиций между информационным и максимально удаленным зависимым от него проверочным символом
Вследствие того, что проверочный символ зависит от информационных из кадров, для построения хороших сверточных кодов не требуется увеличивать длину элементарного блока. Вывод в том, что это определяет основное отличие сверточных кодов от блочных и их достоинства. Так, кодеры и декодеры сверточных кодов, исправляющих однократные ошибки и пакеты ошибок, имеют меньшую сложность реализации.
Код Хаффмана Алгоритм Хаффмана — адаптивный жадный алгоритм оптимального префиксного кодирования алфавита с минимальной избыточностью. Был разработан в 1952 году аспирантом Массачусетского технологического института Дэвидом Хаффманом при написании им курсовой работы. В настоящее время используется во многих программах сжатия данных. Этот метод кодирования состоит из двух основных этапов: 1. Построение оптимального кодового дерева. 2. Построение отображения код-символ на основе построенного дерева. Идея алгоритма состоит в следующем: зная вероятности символов в сообщении, можно описать процедуру построения кодов переменной длины, состоящих из целого количества битов. Символам с большей вероятностью ставятся в соответствие более короткие коды. Коды Хаффмана обладают свойством префиксности (т. е. ни одно кодовое слово не является префиксом другого), что позволяет однозначно их декодировать.
Классический алгоритм Хаффмана имеет ряд существенных недостатков. Во-первых, для восстановления содержимого сжатого сообщения декодер должен знать таблицу частот, которой пользовался кодер. Следовательно, длина сжатого сообщения увеличивается на длину таблицы частот, которая должна посылаться впереди данных, что может свести на нет все усилия по сжатию сообщения. Кроме того, необходимость наличия полной частотной статистики перед началом собственно кодирования требует двух проходов по сообщению: одного для построения модели сообщения (таблицы частот и Н-дерева), другого для собственно кодирования. Во-вторых, избыточность кодирования обращается в ноль лишь в тех случаях, когда вероятности кодируемых символов являются обратными степенями числа 2. Втретьих, для источника с энтропией, не превышающей 1 (например, для двоичного источника), непосредственное применение кода Хаффмана бессмысленно. Сжатие данных по Хаффману применяется при сжатии фото- и видеоизображений (JPEG, стандарты сжатия MPEG), в архиваторах (PKZIP, LZH и др. ), в протоколах передачи данных MNP 5 и MNP 7.
Код Айкена очень похож на прямой двоичный код. Он отличается лишь весом старшего бита (вес старшего бита равен не 8, а 2). Это отличие делает его удобным при определении, находится ли число в верхней половине диапазона от 0 до 9 либо в нижней (достаточно проверить состояние старшего бита). 0 1 2 3 4 5 6 7 8 9 Веса позиций Таблица перевода 0000 0001 0010 0011 0100 1011 1100 1101 1110 1111 2421 Перевод в прямом направлении Если цифра больше 4, то нужно прибавить к ней 6, после чего перевести в прямой двоичный код, если же меньше, то нужно просто перевести ее в прямой двоичный код. Перевод в обратном направлении Нужно найти прямой целочисленный эквивалент числа. Если он больше либо равен 10, то нужно вычесть 6, в противном случае результат готов.
Код Грея — система счисления, в которой два соседних значения различаются только в одном разряде. Наиболее часто на практике применяется рефлексивный двоичный код Грея, хотя в общем случае существует бесконечное множество кодов Грея для систем счисления с любым основанием. В большинстве случаев, под термином «код Грея» понимают именно рефлексивный бинарный код Грея Изначально предназначался для защиты от ложного срабатывания электромеханических переключателей. Сегодня коды Грея широко используются для упрощения выявления и исправления ошибок в системах связи, а также в формировании сигналов обратной связи в системах управления. • Название рефлексный (отражённый) двоичный код происходит от факта, что вторая половина значений в коде Грея эквивалентна первой половине, только в обратном порядке, за исключением старшего бита, который просто инвертируется. Если же разделить каждую половину ещё раз пополам, свойство будет сохраняться для каждой из половины и т. д. • Код получил имя исследователя лабораторий Bell Labs Фрэнка Грея. Он запатентовал и использовал этот код в своей импульсной системе связи (патент № 2632058).
Коды Грея часто используются в датчиках-энкодерах. Их использование удобно тем, что два соседних значения шкалы сигнала отличаются только в одном разряде. Также они используются для кодирования номера дорожек в жёстких дисках. Код Грея можно использовать также и для решения задачи о Ханойских башнях. Широко применяются коды Грея и в теории генетических алгоритмов для кодирования генетических признаков, представленных целыми числами. Код Грея используется для генерации сочетаний методом вращающейся двери В некоторых компьютерных играх (например, Duke Nukem 3 D) для успешного прохождения уровня требуется подобрать нужную комбинацию положений Использование кодов Грея основано прежде всего на том, что он минимизирует нескольких переключателей. Для минимизации числа переключений при эффект ошибок при преобразовании аналоговых сигналов в цифровые переборе вариантов следует использовать код Грея. (например, во многих видах датчиков). Фрагмент главной страницы патента Грея (Сверху)
Круговой энкодер с трёхбитным кодом грея Преобразование двоичного кода в код Грея Коды Грея легко получаются из двоичных чисел путём побитовой операции «Исключающее ИЛИ» с тем же числом, сдвинутым вправо на один бит. Следовательно, i-й бит кода Грея Gi выражается через биты двоичного кода где – операция «исключающее Bi следующим образом: ИЛИ» ; биты нумеруются справа налево, начиная с младшего. Ниже приведён алгоритм преобразования из двоичной системы счисления в код Грея, записанный на unsigned int grayencode(unsigned int g) языке «C» {return g ^ (g >> 1); }
Код Штибица Для внутреннего представления отрицательного числа -х в информатике традиционно используется дополнительный код, который облегчает выполнение арифметических операций над отрицательными числами (это будет рассмотрено далее). Код Штибица (или код плюс-3) используется для кодирования десятичных чисел для простого перехода от двоичного значения числа к его дополнению. Для построения кода Штибица используется понятие прямого целочисленного эквивалента двоичного кода – это десятичное число, соответствующее двоичному коду. Тогда код Штибица – это сдвинутый на 3 прямой код: чтобы получить представляемое данным двоичным кодом число, надо из прямого целочисленного эквивалента вычесть 3. В таблице приведены значения кода Штибица для десятичных цифр (для В этом коде используется понятие взаимно сравнения также указан их прямой код). дополнительных пар чисел: это такие числа, при сложении двоичных значений которых получается двоичное число, состоящее только из единиц. Примером таких пар чисел могут служить 0 и 9, 1 и 8 и т. д.
Код Бергера, код - у которого проверочные символы представляют двоичную запись числа единиц в последовательности информационных символов. Например, таким является код: 00000; 00101; 01001; O 111 O; 10001; 10110; 11010; 11111. Коды Бергера применяются в асимметричных каналах. В симметричных каналах они обнаруживают все одиночные ошибки и некоторую часть многократных.
Код Голея Двоичный код Голея — один из двух тесно связанных друг с другом исправляющих ошибки линейных кодов: совершенный двоичный код Голея— совершенный двоичный код с параметрами [23, 12, 7] расширенный двоичный код Голеяполучающийся из совершенного добавлением бита контроля чётности и имеющий параметры [24, 12, 8]. Свойства: Совершенный код Голея исправляет 3 ошибки. Расширенный код Голея дважды чётен (норма любого вектора делится на 4), и унимодулярен (размерность равна половине размерности пространства). Минимальная норма ненулевого вектора расширенного кода Голея равна 8. Размерность 24 — первая, в которой дважды чётный унимодулярный код может не иметь вектора длины 4. Группа автоморфизмов расширенного кода Голея — гуппа Матьё. Наборы единиц векторов нормы 8 расширенного кода Голея образуют систему Штейнера.
Инверсный код Правильность принятых комбинаций в кодах определяется подсчетом числа единиц и если, например, в коде принято не три единицы, то при передаче произошла ошибка. Код обнаруживает любые одиночные искажения, а также многие двойные, тройные и другие искажения. В инверсном коде исходная n-разрядная двоичная комбинация дополняется другой также n-разрядной, составленной по определенному правилу. В линию посылается удвоенное число импульсов (2 п). Правило образования кода следующее: если в исходной комбинации четное число единиц, то добавляемая комбинация повторяет исходную, а если нечетное, то в добавляемых п разрядах все нули превращаются в единицы, а единицы в нули. Таким образом комбинация 0101 в инверсном коде будет передана, как 0101, а комбинация 1000 — как 10000111. Коэффициент избыточности этого кода /СИЗО = 0, 5. При приеме кодовой комбинации выполняются две операции. Сначала суммируются единицы, содержащиеся в первых п элементах Если их число оказывается четным, то вторая группа из п элементов принимается без изменения, если нечетной, то вторая группа символов инвертируется (0 ->-1 и 1 -» -0). После этого обе зафиксированные комбинации сравниваются поэлементно и при выявлении хотя бы одного несовпадения делается вывод о наличии искажения. Ошибка в данном коде будет обнаружена только в том случае, если одновременно исказятся два элемента в исходной комбинации и соответствующие им два элемента в повторяемой комбинации.
Корреляционный код В корреляционном коде каждый элемент исходного кода преобразуется в два, при этом 1 преобразуется в 10, а 0 в 01. Так, например, комбинация 0110 исходного кода в корреляционном коде запишется, как 01101001 У корреляционного кода так же, как и у инверсного, Кизб=: 0, 5. На приеме ошибка обнаруживается в том случае, если в парных элементах будут содержаться одинаковые символы, т. е. 00 или 11. Этот код обладает высокой помехоустойчивостью, ошибка не будет обнаружена только в том случае, если искажениям подвергнутся два рядом стоящих символа, соответствующие одному элементу исходного кода.
Код Рида — Соломона (англ. Reed–Solomon codes) — недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида — Соломона, работающие с байтами (октетами) В настоящее время широко используется в системах восстановления данных с компакт-дисков, при создании архивов с информацией для восстановления в случае повреждений, в помехоустойчивом кодировании. Схема кодирования с использованием кодирующих устройств Структура систематического кодового слова Рида — Соломона
• • • Кодирование с помощью кода Рида — Соломона может быть реализовано двумя способами: систематическим и несистематическим. При несистематическом кодировании информационное слово умножается на некий неприводимый полином в поле Галуа. Полученное закодированное слово полностью отличается от исходного и для извлечения информационного слова нужно выполнить операцию декодирования и уже потом можно проверить данные на содержание ошибок. Такое кодирование требует большие затраты ресурсов только на извлечение информационных данных, при этом они могут быть без ошибок. При систематическом кодировании к информационному блоку из k символов приписываются 2 t проверочных символов, при вычислении каждого проверочного символа используются все k символов исходного блока. В этом случае нет затрат ресурсов при извлечении исходного блока, если информационное слово не содержит ошибок, но кодировщик/декодировщик должен выполнить k(n-k) операций сложения и умножения для генерации проверочных символов. Кроме того, так как все операции проводятся в поле Галуа, то сами операции кодирования/декодирования требуют много ресурсов и времени. Быстрый алгоритм декодирования, основанный на быстром преобразовании Фурье, выполняется за время порядка
Коды.pptx