Помехоустойчивое кодирование

Автор работы: Пользователь скрыл имя, 26 Декабря 2012 в 19:21, курсовая работа

Описание работы

Аналитический обзор по помехоустойчивому кодированию. Классификация помехоустойчивых кодов и сравнение характеристик методов коррекции ошибок.

Содержание работы

История кодирования, контролирующего ошибки 2
Приложения 5
Общие сведения о кодах и системах кодированной связи 7
Мешающие влияния в каналах связи 13
Основные принципы помехоустойчивого кодирования 18
Пример. 21
Краткая классификация 23
Практика кодирования 31
Код Хэмминга 40

Файлы: 1 файл

Помехоустойчивое кодирование.docx

— 115.10 Кб (Скачать файл)

В приведенном примере код не является хорошим, так как он не позволяет  исправлять много конфигураций ошибок. Желательно выбирать коды так, чтобы  каждое кодовое слово по возможности  больше отличалось от каждого другого  кодового слова; в частности, это  желательно в том случае, когда  длина блока велика.

Mожет показаться, что достаточно определить требования к "хорошему коду" и затем предпринять машинный поиск по множеству всех возможных кодов. Но сколько кодов существует для данных n и k? Каждое кодовое слово представляет собой последовательность n двоичных символов, и всего имеется 2таких слов; следовательно, код описывается n2двоичными символами. Всего существует 2n2k способов выбора этих двоичных символов; следовательно, число различных (n,k)-кодов равно этому числу. Конечно, очень многие из этих кодов не представляют интереса (как в случае, когда два кодовых слова равны), так что надо либо проверять это по ходу поиска, либо развить некоторую теорию, позволяющую исключить такие коды.

Например, выберем (n,k) = (40,20) - код, весьма умеренный по современным стандартам. Тогда число таких кодов превзойдет величину 1010000000 - невообразимо большое число! Следовательно, неорганизованные процедуры поиска бессильны.

В общем случае блоковые коды определяются над произвольным конечным алфавитом, скажем над алфавитом из q символов {0, 1, 2, ..., q - 1}. На первый взгляд введение алфавитов, отличных от двоичного, может показаться излишним обобщением. Из соображений эффективности, однако, многие современные каналы являются недвоичными, и коды для этих каналов должны быть недвоичными. На самом деле коды для недвоичных каналов часто оказываются достаточно хорошими, и сам этот факт может служить причиной для использования недвоичных каналов. Двоичные данные источника тривиальным образом представляются символами q-ичного алфавита, особенно если q равно степени двойки, как это обычно и бывает на практике.

Определение. Блоковый код мощности М над алфавитом из q символов определяется как множество из М (q-ичных последовательностей длины q, называемых кодовыми, словами.

Если q = 2, то символы называются битами. Обычно М = qдля некоторого целого k, и мы будем интересоваться только этим случаем, называя код (n,k)-кодом. Каждой последовательности из k q-ичных символов можно сопоставить последовательность из n q-ичных символов, являющуюся кодовым словом.

Имеются два основных класса кодов: блоковые коды и древовидные коды; они иллюстрируются рис. 1.4. Блоковый код задает блок из k информационных символов n-символьным кодовым словом. Скорость R блокового кода определяется равенством R = k/n.(Скорость - величина безразмерная или, возможно, измеряемая в единицах бит/бит или символ/символ. Ее следует отличать от другого называемого тем же термином скорость понятия, измеряющего канальную скорость в бит/с. Используется и другое определение скорости: R = (k/n)logeq, единицей которого является нат/символ, где один нат равен log2e битов. Принято также определение R = (k/n) log2q, в котором скорость измеряется в единицах бит/символ.)

  
Рис. 5 — Основные классы кодов. 

Древовидный код более сложен. Он отображает бесконечную последовательность информационных символов, поступающую  со скоростью kсимволов за один интервал времени, в непрерывную последовательность символов кодового слова со скоростью nсимволов за один интервал времени. Сосредоточимы внимание на блоковых кодах.

Если сообщение состоит из большого числа битов, то в принципе лучше  использовать один кодовый блок большой  длины, чем последовательность кодовых  слов из более короткого кода. Природа  статистических флуктуаций такова, что  случайная конфигурация ошибок обычно имеет вид серии ошибок. Некоторые  сегменты этой конфигурации содержат больше среднего числа ошибок, а  некоторые меньше. Следовательно, при  одной и той же скорости более  длинные кодовые слова гораздо  менее чувствительны к ошибкам, чем более короткие кодовые слова, но, конечно, соответствующие кодер  и декодер могут быть более  сложными. Например, предположим, что 1000 информационных битов передаются с  помощью (воображаемого) 2000-битового двоичного  кода, способного исправлять 100 ошибок. Сравним такую возможность с передачей одновременно 100 битов с помощью 200-битового кода, исправляющего 10 ошибок на блок. Для передачи 1000 битов необходимо 10 таких блоков. Вторая схема также может исправлять 100 ошибок, но лишь тогда, когда они распределены частным образом - по 10 ошибок в 200-битовых подблоках. Первая схема может исправлять 100 ошибок независимо от того, как они расположены внутри 2000-битового кодового слова. Она существенно эффективнее.

Эти эвристические рассуждения  можно обосновать теоретически, но здесь мы к этому не стремимся. Мы только хотим обосновать тот факт, что хорошими являются коды с большой  длиной блока и что очень хорошими кодами являются коды с очень большой  длиной блока. Такие коды может быть очень трудно найти, а будучи найденными, они могут потребовать сложных  устройств для реализации операций кодирования и декодирования.

О блоковом коде судят по трем параметрам: длине блока n, информационной длине k и минимальному расстоянию d*. Минимальное  расстояние является мерой различия двух наиболее похожих кодовых слов. Минимальное расстояние вводится двумя  следующими определениями.

Определение. Расстоянием по Хэммингу между двумя q-ичными последовательностями х и у длины n называется число позиций, в которых они различны. Это расстояние обозначается через d(х, у).

Например, возьмем х = 10101 и у =01100; тогда имеем d (10101, 01100) = 3. В качестве другого примера возьмем х = 30102 и у = 21103; тогда d (30102, 21103) = 3.

Определение. Пусть C = {с, i = 0, ..., М - 1} - код. Тогда минимальное расстояние кода C равно наименьшему из всех расстояний по Хэммингу между различными парами кодовых слов, т. е. 
d* = min d(cij).

(n, k)-код с минимальным расстоянием  d* называется также (n, k, d*)-кодом.

В коде C, выбранном в примере, d (10101, 10010) =3, d (10010, 01110) = 3, d(10101, 01110) = 4, d(10010, 11111) == 3, d (10101, 11111) =2, d(01110, 11111) =2; следовательно, для этого кода d* = 2.

Предположим, что передано кодовое  слово и в канале произошла  одиночная ошибка. Тогда принятое слово находится на равном 1 расстоянии по Хэммингу от переданного слова. В  случае когда расстояние до каждого  другого кодового слова большe чем 1, декодер исправит ошибку, если положит, что действительно переданным словом было ближайшее к принятому кодовое слово.

В более общем случае если произошло t ошибок и если расстояние от принятого  слова до каждого другого кодового слова больше t, то декодер исправит эти ошибки, приняв ближайшее к  принятому кодовое слово в качестве действительно переданного. Это всегда будет так, если 
d* >= 2t + 1. 
Иногда удается исправлять конфигурацию из t ошибок даже тогда, когда это неравенство не удовлетворяется. Однако если d* < 2t + 1, то исправление любых t ошибок не может быть гарантировано, так как тогда оно зависит от того, какое слово передавалось и какова была конфигурация из t ошибок внутри блока.

 
  
Рис. 6 Сферы декодирования. 

 
В пространстве всех (q-ичных n-последовательностей выбрано некоторое множество n-последовательностей, объявленных кодовыми словами. Если d* - минимальное расстояние этого кода, а t - наибольшее целое число, удовлетворяющее условию d*>= 2t + 1, то вокруг каждого кодового слова можно описать непересекающиеся сферы радиуса t. Принятые слова, лежащие внутри сфер, декодируются как кодовое слово, являющееся центром соответствующей сферы. Если произошло не более t ошибок, то принятое слово всегда лежит внутри соответствующей сферы и декодируется правильно.

Некоторые принятые слова, содержащие более t ошибок, попадут внутрь сферы, описанной вокруг другого кодового слова, и будут декодированы неправильно. Другие принятые слова, содержащие более t ошибок, попадут в промежуточные  между сферами декодирования  области. В зависимости от применения последний факт можно ингерпретировать одним из двух способов.

Неполный декодер декодирует только те принятые слова, которые лежат  внутри сфер декодирования, описанных  вокруг кодовых слов. Остальные принятые слова, содержащие более допустимого  числа ошибок, декодер объявляет  нераспознаваемыми. Такие конфигурации ошибок при неполном декодировании  называются неисправляемыми. Большинство  используемых декодеров являются неполными  декодерами. Полный декодер декодирует каждое принятое слово в ближайшее  кодовое слово. Геометрически это  представляется следующим образом: полный декодер разрезает промежуточные  области на куски и присоединяет их к сферам так, что каждая точка  попадает в ближайшую сферу. Обычно некоторые точки находятся на равных расстояниях от нескольких сфер; тогда одна из этих сфер произвольно  объявляется ближайшей. Если происходит более t ошибок, то полный декодер часто  декодирует неправильно, но бывают и  случаи попадания в правильное кодовое  слово. Полный декодер используется в тех случаях, когда лучше  угадывать сообщение, чем вообще не иметь никакой его оценки. Можно  также рассматривать каналы, в  которых кроме ошибок происходят и стирания. Это значит, что конструкцией приемника предусмотрено объявление символа стертым, если он получен ненадежно или если приемник распознал наличие интерференции или сбой. Такой канал имеет входной алфавит мощности q выходной алфавит мощности q + 1; дополнительный символ называется стиранием. Например, стирание символа 3 в сообщении 12345 приводит к слову 12-45. Это не следует путать с другой операцией, называемой выбрасыванием, которая дает 1245.

B таких каналах могут использоваться коды, контролирующие ошибки. В случае когда минимальное расстояние кода равно d*, любая конфигурация из р стираний может быть восстановлена, если d* >= р + 1. Далее, любая конфигурация из v ошибок и р стираний может быть декодирована при условии, что 
d* >= 2v + 1 + р. Для доказательства выбросим из всех кодовых слов те р компонент, в которых приемник произвел стирания. Это даст новый код, минимальное расстояние которого не меньше d* - р; следовательно, v ошибок могут быть исправлены при условии, что выполняется выписанное выше неравенство. Таким образом, можно восстановить укороченное кодовое слово с р стертыми компонентами. Наконец, так как d* > р + 1, существует только одно кодовое слово, совпадающее с полученным в нестертых компонентах; следовательно, исходное кодовое слово может быть восстановлено. 

Код Хэмминга


Пусть нам предстоит закодировать текст, записанный на некотором языке, таком, что число букв в алфавите этого языка n = 2(m целое число), а появление в тексте тех или иных букв алфавита равновероятно и не зависит от того, какие буквы им предшествовали. Тогда имеем 
p(i) = p(j) = 1/n; H = log= m.  
Условия задачи таковы, что достичь оптимального кодирования можно самым незатейливым методом кодирования - побуквенным кодированием с постоянной длиной (l = m) кодовых наборов. При этом, однако, мы оказались бы лишенными какой-либо возможности обнаруживать, а тем более исправлять ошибки. Чтобы такая возможность появилась, необходимо отказаться от оптимальности кода, "раскошелиться" на несколько дополнительных двоичных символов на букву, т.е. умышленно ввести некоторую избыточность, которая смогла бы помочь нам обнаружить или исправить ошибки. Необходимое число дополнительно вводимых двоичных символов на одну букву обозначим через x, и тогда длина кодового набора станет равной l = m + x. Примем, что в результате помех (случайных или преднамеренных) лишь один или вовсе никакой из m + x двоичных символов может превращаться из единицы в нуль или, наоборот, из нуля в единицу. Примем далее, что 1 + m + x событий, заключающиеся в том, что ошибка вообще не произойдет, произойдет на уровне первого, второго, .... (m + x)-го символа кодового набора, равновероятны. Энтропию угадывания того, какое именно из этих 1 + m + x событий будет иметь место, в силу равновероятности этих событий можно определить по формуле Н = log(1 + m + х) бит. Таким образом, для обнаружения самого факта наличия одиночной ошибки и установления ее позиции необходимо заполучить информацию в количестве не менее Н = log2(1 + m + x) бит. Источником этой информации служат лишь дополнительно введенные x двоичных символов, так как остальные m символов из-за оптимальности кодирования до предела заняты описанием самого текста. Заметим, что x двоичных символов в лучшем случае могут содержать информацию в количестве x бит. Таким образом, при конструировании кода, обнаруживающего и исправляющего одиночную ошибку, следует учесть, что этого можно добиться лишь при значениях x, удовлетворяющих неравенству 
х>= log2(l+m+x), (1.1)  
или 2x-x-1>=m. (1.1а) 

 
Рис. 7 Зависимость нижней границы допустимых значений x от m (сплошная линия) и зависимость относительной избыточности от m (пунктирная линия).  

Р. Хэмминг разработал конкретную конструкцию кода. которая обеспечивает весьма элегантное обнаружение и исправление одиночных ошибок при минимально возможном числе дополнительно вводимых двоичных символов, т.е. при знаке равенства в (1.1). Проследим за построением этого кода, когда m = 4. Из рисунка следует, что при этом допустимое значение x равно трем, т.е. при числе основных (информационных) двоичных символов m = 4, число дополнительно введенных, т.е. контрольных символов должно быть не менее трех. Примем, что нам удалось "обойтись" именно тремя дополнительными символами, т.е. удалось сконструировать такой код, при котором каждый из дополнительно введенных трех символов дает нам максимально возможное количество информации, т.е. по одному биту. Тогда в расширенном кодовом наборе окажутся семь двоичных символов:

 

B1B2B3B4     B5B6B7

(информационные символы)       (контрольные символы)

Поскольку символы B1 - B4 заняты кодированием собственно текста, то управлять их значениями нам не дано. Что же касается символов B5 - B7, то они предназначены именно для обнаружения и исправления ошибок и поэтому их значения мы можем увязать со значениями информационных символов произвольными тремя функциями от аргументов B1 - B4:

B5=B5(B1,...,B4)      (1.11) 
B6=B6(B1,...,B4)      (1.12)

B7=B7(B1,...,B4)      (1.13)

 
такими, чтобы в последующем с помощью трех других функций от аргументов B1-B7 

e0=e0(B1-B7)      (1.14)

e1=e1(B1-B7)      (1.15)

e2=e2(B1-B7)      (1.16)

определить  значения e0,e1,eсодержащие информацию о том, произошла ли ошибка вообще и если да, то на уровне какого именно из семи символов. Очевидно, имеется множество различных вариантов при выборе функций (1.11)- (1.16). Р. Хэмминг поставил перед собой задачу выбора именно такой совокупности функций (1.11) - (1.16), чтобы набор значений e2e1eоказался двоичной записью позиции, где произошла ошибка. В случае же, когда ошибка не имела места, набор e2e1eдолжен указать на нулевую позицию, т.е. на несуществующий символ B0. Из двоичной записи этих позиций

000 (0)  1 0 0  (4)

001 (1)  1 0 1  (5)

010 (2)  1 1 0  (6)

011 (3)  1 1 1  (7)

легко уследить, что значение e"несет ответственность" за позиции B1, B3, B5 и B7 и поэтому в качестве функции (1.14) берется зависимость 

Информация о работе Помехоустойчивое кодирование