Автор работы: Пользователь скрыл имя, 23 Ноября 2013 в 15:57, реферат
История кодирования, контролирующего ошибки, началась в 1948 г. публикацией знаменитой статьи Клода Шеннона. Шеннон показал, что с каждым каналом связано измеряемое в битах в секунду и называемое пропускной способностью канала число С, имеющее следующее значение. Если требуемая от системы связи скорость передачи информации R (измеряемая в битах в секунду) меньше С, то, используя коды, контролирующие ошибки, для данного канала можно построить такую систему связи, что вероятность ошибки на выходе будет сколь угодно мала.
В самом деле, из шенноновской теории информации следует тот важный вывод, что построение слишком хороших каналов является расточительством; экономически выгоднее использовать кодирование.
Введение. 3
1. Обнаружение ошибок. 4
2. Коррекция ошибок. 6
3. Циклические коды. 11
4. Линейные блочные коды. 15
Заключение 18
Литература. 19
В результате через канал передается n-битовое кодовое слово (n>k). Конкретная реализация алгоритма FEC характеризуется комбинацией (n,k). Применение FEC в Интернет регламентируется документом RFC-3452. Коды FEC могут исключить необходимость обратной связи при потере или искажении доставленных данных (запросы повторной передачи). Особенно привлекательна технология FEC при работе с мультикастинг-потоками, где ретрансмиссия не предусматривается.
В 1974 году Йозеф Оденвальдер (Joseph Odenwalder) объединил возможности алгебраического кодирования и метода свертки. Хорошего результата можно добиться, введя специальную операцию псевдослучайного перемешивания бит (interleaver).
В 1993 году группой Клода Берроу (Claude Berrou) был разработан турбо код. В кодеке, реализующем этот алгоритм, содержатся кодировщики как минимум двух компонент (реализующие алгебраический метод или свертку). Кодирование осуществляется для блоков данных. Здесь также используется псевдослучайное перемешивание бит перед передачей. Это приводит к тому, что кластеры ошибок, внесенных при транспортировке, оказываются разнесенными случайным образом в пределах блока данных.
Обобщением кодов Хэмминга являются циклические коды BCH (Bose-Chadhuri-Hocquenghem). Циклические коды являются частным случаем линейных и представляют собой наиболее разработанную часть последних. Основным их достоинством является простота технической реализации, благодаря чему они и обратили на себя внимание специалистов. Ценным свойством таких кодов является способность обнаруживать не только одиночные ошибки, но и пакеты ошибок. Пакетом ошибок длиной L называют число разрядов сообщения, искаженных подряд.
Свое название циклические коды получили из-за следующего свойства: если комбинация an-1an-2 ... a1a0 относится к коду, то комбинация, полученная путем циклического сдвига элементов, т.е. комбинация an-2 ... a1a0an-1, также относится к коду. Направление сдвига не имеет значения. Один сдвиг в одном направлении эквивалентен n-1 сдвигам в другом направлении.
Математической основой
построения циклических кодов
является представление
an-1an-2 ... a1a0
представляется многочленом
an-1xn-1 + an-2xn-2 + ... + a1x + a0
Пример. Многочлен кодовой комбинации 01001 имеет вид x3 + 1.
При построении и исследовании циклических кодов приходится производить сложение, умножение и деление многочленов. Они выполняются обычным образом, надо учитывать только особенности самих операций:
Кодовый полином.
Циклический код строится с помощью, так называемого порождающего многочлена g(x) степени r. Признаком принадлежности n-разрядной комбинации данному коду является делимость соответствующего ей многочлена на порождающий. Если многочлен принятой комбинации делится на порождающий, то считается, что она совпадает с посланной. Если деление происходит с остатком, то принятая комбинация к коду не относится, т.е. произошло наложение ошибки. Вид остатка при достаточной избыточности позволяет указать место ошибки.
Свойства циклических кодов:
При передаче сигнала через любой канал связи возможно возникновение ошибок, которые могут приводить к искажению переносимой информации. Существует много методов для исправления подобных ошибок, но прежде чем исправлять, необходимо эти ошибки обнаружить.
Для этого также существуют определенные методы, основанные на избыточности передаваемой информации, что позволяет не только выявлять наличие факта искажения информации, но и в ряде случаев устранять эти искажения. Наиболее известные из методов обнаружения ошибок передачи данных являются:
символов. Но этот метод обладает практически теми же недостатками, что и предыдущие, самый главный из которых — нечувствительность контрольной суммы к четному числу ошибок в одной колонке и самому порядку следования символов в блоке.
Циклический избыточный код (CRC) — алгоритм вычисления контрольной суммы, предназначенный для проверки целостности передаваемых данных. Алгоритм CRC обнаруживает все одиночные ошибки, двойные ошибки и ошибки в нечетном числе битов.
Понятие циклических кодов достаточно широкое, однако на практике его обычно используют для обозначения только одной разновидности, использующей циклический контроль (проверку) избыточности. В связи с этим в англоязычной литературе CRC часто расшифровывается как Cyclic
Redundancy Check. CRC некоторой последовательности вычисляется на основании другой (исходной) битовой последовательности. Главная особенность (и практическая значимость) значения CRC состоит в том, что оно однозначно идентифицирует исходную битовую последовательность и поэтому используется в различных протоколах связи, а также для проверки целостности блоков данных, передаваемых различными устройствами. Благодаря относительной простоте алгоритм вычисления CRC часто реализуется на аппаратном уровне.
Основная идея вычисления CRC заключается в следующем. Исходная последовательность битов, которой могут быть и огромный файл, и текст размером несколько слов и даже символов, представляется единой последовательностью битов. Эта последовательность делится на некоторое
фиксированное двоичное число (полином, CRC-полином, генераторный полином, англ. generator polinomial). Интерес представляет остаток от этого деления, который и является значением CRC. Все, что теперь требуется, — это некоторым образом запомнить его и передать вместе с исходной последовательностью. Приемник данной информации всегда может таким же образом выполнить деление и сравнить его остаток с исходным значением CRC. Если они равны, то считается, что исходное сообщение не повреждено, и т. д. Степенью CRC-полинома W называют позицию самого старшего единичного бита.
Например, степенью полинома 100112 равна 4. Для вычисления CRC используют специальную т.н. полиномиальную арифметику.
Вместо представления делителя, делимого (сообщения), частного и остатка в виде положительных целых чисел, можно представить их в виде полиномов с двоичными коэффициентами или в виде строки бит, каждый из которых является коэффициентом полинома.
Линейный код — это важный тип блокового кода, использующийся в схемах определения и коррекции ошибок. Линейные коды, по сравнению с другими кодами, позволяют реализовывать более эффективные алгоритмы кодирования и декодирования информации.
В процессе хранения данных и передачи информации по сетям связи неизбежно возникают ошибки. Контроль целостности данных и исправление ошибок — важные задачи на многих уровнях работы с информацией.
В системах связи возможны несколько стратегий борьбы с ошибками:
Блоковые коды. Пусть кодируемая информация делится на фрагменты длиной k бит, которые преобразуются в кодовые слова длиной n бит. Тогда соответствующий блоковый код обычно обозначают (n,k) . При этом число R= k/n называется скоростью кода.
Если исходные k бит код оставляет неизменными, и добавляет n-k проверочных, такой код называется систематическим, иначе несистематическим. Задать блоковый код можно по-разному, в том числе таблицей, где каждой совокупности из k информационных бит сопоставляется n бит кодового слова.
Пример линейного блочного кода (6, 3).
Код (6, 3) состоит из 2k = 23 = 8 векторов сообщений, т.е. восьми кодовых слов. В векторном пространстве V6 имеется 2n = 26 = 64 6-кортежей. Восемь кодовых слов, показанных в таблице 1, образуют в V6 подпространство (имеется нулевой вектор, сумма любых двух кодовых слов дает кодовое слово этого же подпространства). Таким образом, эти кодовые слова представляют линейный блочный код. Возникает вопрос о соответствии кодовых слов и сообщений для этого кода (6, 3). Однозначного соответствия для отдельных кодов (n, k) не существует.
Таблица 1. Соответствие кодовых слов и сообщений
Вектор сообщения |
Кодовое слово |
000 |
000000 |
100 |
110100 |
010 |
011010 |
110 |
101110 |
001 |
101001 |
101 |
011101 |
011 |
110011 |
111 |
000111 |
Порождающая матрица (матрица генератора). Реализация таблицы соответствия кодера при больших значениях k становится слишком громоздкой. Например, для кода (127, 92) существует 292 или приблизительно кодовых векторов. Если с помощью простой таблицы соответствия выполняется кодирование, то нужно большое количество памяти для такого огромного числа кодовых слов. Эту задачу можно значительно упростить, по мере необходимости генерируя необходимые кодовые слова, вместо того чтобы хранить их в памяти постоянно.
Так как множество кодовых слов, составляющих линейный блочный код, является k–мерным подпространством n–мерного двоичного векторного пространства, то всегда можно найти такое множество п–кортежей (с числом элементов, меньшим 2k), которое может генерировать все 2k кодовых слова подпространства. Генерирующее множество векторов охватывает все подпространство. Наименьшее линейно независимое множество, охватывающее подпространство, называется базисом подпространства, а число векторов в этом базисном множестве называется размерностью подпространства. Пусть V1, V2, ..., Vk любое базисное множество k линейно независимых п–кортежей. Тогда это базисное множество можно использовать для генерации нужных векторов линейного блочного кода, поскольку каждый вектор кода является линейной комбинацией V1, V2, ..., Vk. Другими словами, каждое из множества 2k кодовых слов U можно представить следующим образом:
U = m1 V1 + т2 V2 + ... + тk Vk ,
где тi – это цифры сообщения 0 или 1, а i = 1, ... , k.
Кодирование линейного блочного (n, k) – кода задается порождающей матрицей Gn,k, которая определяется как массив размером k п [2, 3]:
Gn,k =
.
Кодовые векторы представляются векторами-строками, таким образом, последовательность k бит сообщения, т.е. сообщение m, представляется как вектор-строка: т = т1, т2, ... , тk.