коды с исправлением ошибок алфавитное кодирование методы сжатия информации
4.3. Принципы кодирования, исправляющего ошибки
4.3.1. Коды, исправляющие ошибки
Помехоустойчивое кодирование передаваемой информации позволяет в приемной части системы обнаруживать и исправлять ошибки. Коды, применяемые при помехоустойчивом кодировании, называются корректирующими кодамиили кодами, исправляющими ошибки.
Если применяемый способ кодирования позволяет обнаружить ошибочные кодовые комбинации, то в случае приема изображения можно заменить принятый с ошибкой элемент изображения на предыдущий принятый элемент или на соответствующий элемент предыдущей строки или предыдущего кадра. При этом заметность искажений на экране телевизионного приемника существенно уменьшается. Такой способ называется маскировкой ошибки.
Более совершенные корректирующие коды позволяют не только обнаруживать, но и исправлять ошибки. Как правило, корректирующий код может исправлять меньше ошибок, чем обнаруживать. Количество ошибок, которые корректирующий код может исправить в определенном интервале последовательности двоичных символов, например, в одной кодовой комбинации, называется исправляющей способностью кода.
Основной принцип построения корректирующих кодов заключается в том, что в каждую передаваемую кодовую комбинацию, содержащую kинформационных двоичных символов, вводятрдополнительных двоичных символов. В результате получается новая кодовая комбинация, содержащаядвоичных символов. Такой код будем обозначать
. Доля информационных символов в нем характеризуетсяотносительной скоростью кода, определяемой соотношением
.
Количество возможных кодовых комбинаций кода равно
. Из них передаваться могут
кодовых комбинаций, называемых разрешенными. Остальные
кодовые комбинации являются запрещенными. Появление одной из этих запрещенных комбинаций в приемной части означает, что имеется ошибка.
Для оценки способности кода обнаруживать и исправлять ошибки используется понятие кодового расстояния(расстояния Хемминга). Кодовое расстояниемежду кодовыми комбинациями
и
определяется как число двоичных разрядов, в которых эти комбинации различаются. Например, кодовое расстояние между кодовыми комбинациями 0001 и 0011 равно 1, а между комбинациями 0000 и 1111 равно 4.
Если разрешенные кодовые комбинации выбраны таким образом, что при изменении любого двоичного символа разрешенная кодовая комбинация переходит в запрещенную, то корректирующий код позволяет обнаруживать одиночные ошибки в отдельных кодовых комбинациях.
Одиночная ошибка переводит исходную кодовую комбинацию в кодовую комбинацию, отстоящую от нее на d= 1. Следовательно, для обнаружения одиночных ошибок необходимо, чтобы кодовое расстояние между любыми двумя разрешенными кодовыми комбинациями корректирующего кода было не менее 2. Для обнаруженияr1ошибок в кодовой комбинации необходимо, чтобы кодовое расстояние между двумя разрешенными кодовыми комбинациями удовлетворяло неравенству.
Один из самых простых и известных примеров помехоустойчивого кодирования – проверка на четность. В каждую кодовую комбинацию вводится один дополнительный двоичный символ хр, называемый контрольным или проверочным битом. Этот бит устанавливается равным 1, если сумма единиц в исходной кодовой комбинации равна нечетному числу, и равным 0 в противоположном случае. Данное правило выражается соотношением
,
где – двоичные символы исходной кодовой комбинации.
Рис. 4.3.Схема обнаружения одной ошибки в кодовом слове
ля исправления одиночных ошибок необходимо, чтобы кодовое расстояние между любыми двумя разрешенными кодовыми комбинациями корректирующего кода было не менее 3. В этом случае принятая запрещенная кодовая комбинация заменяется ближайшей к ней разрешенной кодовой комбинацией. Так как ошибки одиночные, то переданная разрешенная кодовая комбинация отстоит от принятой запрещенной кодовой комбинации на 1, а остальные разрешенные кодовые комбинации – не менее чем на 2. В этом случае ошибка надежно исправляется. В общем случае для коррекцииr2ошибок в кодовой комбинации кодовое расстояниеdмежду любыми двумя разрешенными кодовыми комбинациями должно удовлетворять неравенству.
Для увеличения кодового расстояния между разрешенными кодовыми комбинациями необходимо увеличивать число рконтрольных символов в передаваемых кодовых комбинациях. Известно соотношение
,
где – минимальное кодовое расстояние между двумя разрешенными кодовыми комбинациями. Чтобы при этом относительная скорость кода не стала чрезмерно малой, необходимо в соответствии с увеличивать и числоkинформационных символов в кодовой комбинации.
Построение кода с заданными nиkможет осуществляться разными способами. Есть хорошо разработанные математические методы решения этой задачи и обширная литература. Для цифровых телевизионных систем большое значение имеет возможность коррекции пакетных ошибок, искажающих сразу несколько соседних двоичных символов. Кроме того, при выборе кода для системы цифрового телевидения необходимо обеспечить по возможности простой метод декодирования, так как декодер должен быть в каждом телевизионном приемнике.
Коды, исправляющие ошибки
Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.
Для обнаружения ошибок используют коды обнаружения ошибок, для исправления — корректирующие коды (коды, исправляющие ошибки, коды с коррекцией ошибок, помехоустойчивые коды).
Содержание
Способы борьбы с ошибками
В процессе хранения данных и передачи информации по сетям связи неизбежно возникают ошибки. Контроль целостности данных и исправление ошибок — важные задачи на многих уровнях работы с информацией (в частности, физическом, канальном, транспортном уровнях модели OSI).
В системах связи возможны несколько стратегий борьбы с ошибками:
Коды обнаружения и исправления ошибок
Корректирующие коды — коды, служащие для обнаружения или исправления ошибок, возникающих при передаче информации под влиянием помех, а также при её хранении.
Для этого при записи (передаче) в полезные данные добавляют специальным образом структурированную избыточную информацию (контрольное число), а при чтении (приёме) её используют для того, чтобы обнаружить или исправить ошибки. Естественно, что число ошибок, которое можно исправить, ограничено и зависит от конкретного применяемого кода.
С кодами, исправляющими ошибки, тесно связаны коды обнаружения ошибок. В отличие от первых, последние могут только установить факт наличия ошибки в переданных данных, но не исправить её.
В действительности, используемые коды обнаружения ошибок принадлежат к тем же классам кодов, что и коды, исправляющие ошибки. Фактически, любой код, исправляющий ошибки, может быть также использован для обнаружения ошибок (при этом он будет способен обнаружить большее число ошибок, чем был способен исправить).
По способу работы с данными коды, исправляющие ошибки делятся на блоковые, делящие информацию на фрагменты постоянной длины и обрабатывающие каждый из них в отдельности, и свёрточные, работающие с данными как с непрерывным потоком.
Блоковые коды
Пусть кодируемая информация делится на фрагменты длиной k бит, которые преобразуются в кодовые слова длиной n бит. Тогда соответствующий блоковый код обычно обозначают . При этом число
называется скоростью кода.
Если исходные k бит код оставляет неизменными, и добавляет n − k проверочных, такой код называется систематическим, иначе несистематическим.
Задать блоковый код можно по-разному, в том числе таблицей, где каждой совокупности из k информационных бит сопоставляется n бит кодового слова. Однако, хороший код должен удовлетворять, как минимум, следующим критериям:
Нетрудно видеть, что приведённые требования противоречат друг другу. Именно поэтому существует большое количество кодов, каждый из которых пригоден для своего круга задач.
Практически все используемые коды являются линейными. Это связано с тем, что нелинейные коды значительно сложнее исследовать, и для них трудно обеспечить приемлемую лёгкость кодирования и декодирования.
Линейные коды общего вида
Минимальное расстояние и корректирующая способность
Расстоянием Хемминга (метрикой Хемминга) между двумя кодовыми словами и
называется количество отличных бит на соответствующих позициях,
, что равно числу «единиц» в векторе
.
Минимальное расстояние Хемминга является важной характеристикой линейного блокового кода. Она показывает насколько «далеко» расположены коды друг от друга. Она определяет другую, не менее важную характеристику — корректирующую способность:
Коды Хемминга
Коды Хемминга — простейшие линейные коды с минимальным расстоянием 3, то есть способные исправить одну ошибку. Код Хемминга может быть представлен в таком виде, что синдром
, где
— принятый вектор, будет равен номеру позиции, в которой произошла ошибка. Это свойство позволяет сделать декодирование очень простым.
Общий метод декодирования линейных кодов
Любой код (в том числе нелинейный) можно декодировать с помощью обычной таблицы, где каждому значению принятого слова соответствует наиболее вероятное переданное слово
. Однако, данный метод требует применения огромных таблиц уже для кодовых слов сравнительно небольшой длины.
Для линейных кодов этот метод можно существенно упростить. При этом для каждого принятого вектора вычисляется синдром
. Поскольку
, где
— кодовое слово, а
— вектор ошибки, то
. Затем с помощью таблицы по синдрому определяется вектор ошибки, с помощью которого определяется переданное кодовое слово. При этом таблица получается гораздо меньше, чем при использовании предыдущего метода.
Линейные циклические коды
Несмотря на то, что декодирование линейных кодов уже значительно проще декодирования большинства нелинейных, для большинства кодов этот процесс всё ещё достаточно сложен. Циклические коды, кроме более простого декодирования, обладают и другими важными свойствами.
Циклическим кодом является линейный код, обладающий следующим свойством: если является кодовым словом, то его циклическая перестановка также является кодовым словом.
В дальнейшем, если не указано иное, мы будем считать, что циклический код является двоичным, то есть могут принимать значения 0 или 1.
Порождающий (генераторный) полином
С помощью порождающего полинома осуществляется кодирование циклическим кодом. В частности:
Коды CRC
Таким образом, вид полинома g(x) задаёт конкретный код CRC. Примеры наиболее популярных полиномов:
название кода | степень | полином |
---|---|---|
CRC-12 | 12 | x 12 + x 11 + x 3 + x 2 + x + 1 |
CRC-16 | 16 | x 16 + x 15 + x 2 + 1 |
CRC-x 16 + x 12 + x 5 + 1 | ||
CRC-32 | 32 | x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x + 1 |
Коды БЧХ
Коды Боуза — Чоудхури — Хоквингема (БЧХ) являются подклассом циклических кодов. Их отличительное свойство — возможность построения кода БЧХ с минимальным расстоянием не меньше заданного. Это важно, потому что, вообще говоря, определение минимального расстояния кода есть очень сложная задача.
Математически полинома g(x) на множители в поле Галуа.
Коды коррекции ошибок Рида — Соломона
Коды Рида — Соломона — недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида-Соломона, работающие с байтами (октетами).
Математически коды Рида — Соломона являются кодами БЧХ.
Преимущества и недостатки блоковых кодов
Хотя блоковые коды, как правило, хорошо справляются с редкими, но большими пачками ошибок, их эффективность при частых, но небольших ошибках (например, в канале с АБГШ), менее высока.
Свёрточные коды
Свёрточные коды, в отличие от блоковых, не делят информацию на фрагменты и работают с ней как со сплошным потоком данных.
Свёрточные коды, как правило, порождаются дискретной линейной инвариантной во времени системой. Поэтому, в отличие от большинства блоковых кодов, свёрточное кодирование — очень простая операция, чего нельзя сказать о декодировании.
Кодирование свёрточным кодом производится с помощью регистра сдвига, отводы от которого суммируются по модулю два. Таких сумм может быть две (чаще всего) или больше.
Декодирование свёрточных кодов, как правило, производится по алгоритму Витерби, который пытается восстановить переданную последовательность согласно критерию максимального правдоподобия.
Преимущества и недостатки свёрточных кодов
Свёрточные коды эффективно работают в канале с белым шумом, но плохо справляются с пакетами ошибок. Более того, если декодер ошибается, на его выходе всегда возникает пакет ошибок.
Каскадное кодирование. Итеративное декодирование
Преимущества разных способов кодирования можно объединить, применив каскадное кодирование. При этом информация сначала кодируется одним кодом, а затем другим, в результате получается код-произведение.
Например, популярной является следующая конструкция: данные кодируются кодом Рида-Соломона, затем перемежаются (при этом символы, расположенные близко, помещаются далеко друг от друга) и кодируются свёрточным кодом. На приёмнике сначала декодируется свёрточный код, затем осуществляется обратное перемежение (при этом пачки ошибок на выходе свёрточного декодера попадают в разные кодовые слова кода Рида — Соломона), и затем осуществляется декодирование кода Рида — Соломона.
Некоторые коды-произведения специально сконструированы для итеративного декодирования, при котором декодирование осуществляется в несколько проходов, каждый из которых использует информацию от предыдущего. Это позволяет добиться большой эффективности, однако, декодирование требует больших ресурсов. К таким кодам относят турбо-коды и LDPC-коды (коды Галлагера).
Оценка эффективности кодов
Эффективность кодов определяется количеством ошибок, которые тот может исправить, количеством избыточной информации, добавление которой требуется, а также сложностью реализации кодирования и декодирования (как аппаратной, так и в виде программы для ЭВМ).
Граница Хемминга и совершенные коды
Коды, удовлетворяющие этой границе с равенством, называются совершенными. К совершенным кодам относятся, например, коды Хемминга. Часто применяемые на практике коды с большой корректирующей способностью (такие, как коды Рида — Соломона) не являются совершенными.
Энергетический выигрыш
При передаче информации по каналу связи вероятность ошибки зависит от отношения сигнал/шум на входе демодулятора, таким образом при постоянном уровне шума решающее значение имеет мощность передатчика. В системах спутниковой и мобильной, а также других типов связи остро стоит вопрос экономии энергии. Кроме того, в определённых системах связи (например, телефонной) неограниченно повышать мощность сигнала не дают технические ограничения.
Поскольку помехоустойчивое кодирование позволяет исправлять ошибки, при его применении мощность передатчика можно снизить, оставляя скорость передачи информации неизменной. Энергетический выигрыш определяется как разница отношений с/ш при наличии и отсутствии кодирования.
Применение кодов, исправляющих ошибки
Коды, исправляющие ошибки, применяются:
Коды, обнаруживающие ошибки, применяются в сетевых протоколах различных уровней.
Автоматический запрос повторной передачи
Системы с автоматическим запросом повторной передачи (ARQ — Automatic Repeat reQuest) основаны на технологии обнаружения ошибок. Распространены следующие методы автоматического запроса:
Запрос ARQ с остановками (stop-and-wait ARQ)
Идея этого метода заключается в том, что передатчик ожидает от приемника подтверждения успешного приема предыдущего блока данных перед тем как начать передачу следующего. В случае, если блок данных был принят с ошибкой, приемник передает отрицательное подтверждение (negative acknowledgement, NAK), и передатчик повторяет передачу блока. Данный метод подходит для полудуплексного канала связи. Его недостатком является низкая скорость из-за высоких накладных расходов на ожидание.
Непрерывный запрос ARQ с возвратом (continuous ARQ with pullback)
Для этого метода необходим полнодуплексный канал. Передача данных от передатчика к приемнику производится одновременно. В случае ошибки передача возобновляется, начиная с ошибочного блока (то есть, передается ошибочный блок и все последующие).
Непрерывный запрос ARQ с выборочным повторением (continuous ARQ with selective repeat)
При этом подходе осуществляется передача только ошибочно принятых блоков данных.
См. также
Литература
Ссылки
Смотреть что такое «Коды, исправляющие ошибки» в других словарях:
Коды исправляющие ошибки — Обнаружение ошибок в технике связи действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) процедура восстановления информации после… … Википедия
Исправляющие ошибки Коды — Обнаружение ошибок в технике связи действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) процедура восстановления информации после… … Википедия
Коды Рида-Соломона — недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код Рида Соломона является … Википедия
КОРРЕКТИРУЮЩИЕ КОДЫ — коды, обнаруживающие и исправляющие ошибки при передаче и обработке информации в линиях связи или сложных информац. системах. В основе корректирования лежит использование избыточности сообщений, при к рой часть символов кодового слова можно… … Большой энциклопедический политехнический словарь
Корректирующие коды — помехоустойчивые коды, коды обнаружения и исправления ошибки, Коды, позволяющие по имеющейся в кодовой комбинации избыточности (См. Избыточность) обнаруживать и исправлять определённые ошибки, появление которых приводит к образованию… … Большая советская энциклопедия
Код Рида — Коды Рида Соломона (англ. Reed–Solomon codes) недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона,… … Википедия
Код коррекции ошибок Рида-Соломона — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия
Код Рида-Соломона — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия
РС код — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия
Код Боуза — Коды Боуза Чоудхури Хоквингхема (БЧХ коды) в теории кодирования это широкий класс циклических кодов, применяемых для защиты информации от ошибок (см. Обнаружение и исправление ошибок). Отличается возможностью построения кода с… … Википедия