Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

839

.pdf
Скачиваний:
3
Добавлен:
13.02.2021
Размер:
2.09 Mб
Скачать

190

кодов. Так строится, например, итеративный код из двух линейных систематических кодов (n1, k1) и (n2, k2). Минимальное кодовое расстояние для двумерного итеративного кода d = d1d2, где d1 и d2 — соответственно минимальные кодовые расстояния для кодов 1-й и 2-й ступеней.

На итеративный код похож каскадный код, но между ними имеется существенное различие. Первая ступень кодирования в каскадном коде является линейным систематическим двоичным кодом (внутренний код), каждая комбинация которого рассматривается как один символ недвоичного кода второй ступени (внешнего). При приеме сначала декодируются (с обнаружением или исправлением ошибок) все строки (блоки) внутреннего кода, а затем декодируется блок внешнего m-ичного кода, причем исправляются ошибки и стирания, оставшиеся после декодирования внутреннего кода. В качестве внешнего кода используют обычно m-ичный код Рида—Соломона, который является подклассом кодов БЧХ и обеспечивает наибольшее возможное d при заданных n2 и k2, если n2 < m. Каскадные коды во многих случаях наиболее перспективны среди известных блочных помехоустойчивых кодов.

Метод перемежения. Для каналов с группированием оши-

бок часто применяют метод перемежения символов, или декор-

реляции ошибок. Он заключается в том, что символы, входящие в одну кодовую комбинацию, передаются не непосредственно друг за другом, а перемежаются символами других кодовых комбинаций. Если интервал между символами, входящими в одну комбинацию, сделать больше максимально возможной длины группы ошибок, то в пределах комбинации группирования ошибок не будет. Группа ошибок распределится в виде одиночных ошибок на группу комбинаций. Одиночные ошибки будут легко обнаружены (и исправлены) декодером.

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

191

связь) и только часть пропускной способности каждого из каналов используют для передачи дополнительных данных, предназначенных для повышения верности.

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

Системами с информационной обратной связью (ИОС) на-

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

повторить ошибочно принятые отрезки сообщения;

изменить применяемый код (передав предварительно соответствующий условный сигнал и убедившись в том, что он принят);

прекратить передачу при плохом состоянии канала до его улучшения.

В системах с управляющей обратной связью (УОС) прием-

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

Наиболее распространены системы с УОС при использовании одновременно с обнаружением ошибок. Такие системы часто называют системами с автоматическим запросом ошибок (ARQ, Automatic Repeat reQuest).

4.6 Алгоритмы сжатия

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

192

ны. Для этого используются специальные алгоритмы сжатия (компрессии), уменьшающие избыточность.

Основными техническими характеристиками процессов сжатия и результатов их работы являются:

степень сжатия (compress rating) или отношение (ratio)

объемов исходного и результирующего потоков;

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

качество сжатия — величина, показывающая, на сколько сильно упакован выходной поток.

Степень сжатия оценивают коэффициентом сжатия

Kn , q

где n — число минимально необходимых символов для передачи сообщения (практически это число символов на выходе эталонного алгоритма сжатия); q — число символов в сообщении, сжатом данным алгоритмом. Так, при двоичном кодировании n равно энтропии источника информации. Часто степень сжатия оценивают отношением длин кодов на входе и выходе алгоритма сжатия.

Все способы сжатия можно разделить на две категории: об-

ратимое (сжатие без потерь) и необратимое (с потерями) сжа-

тие (рис. 4.32).

 

 

 

 

 

Компрессия

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обратимая

 

 

Сжатие с потерями

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Словарные методы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Статистические методы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.32 — Методы сжатия

Под необратимым сжатием подразумевают такое преобразование входного потока данных, при котором происходит потеря малосущественной информации. В зависимости от формата

193

сжимаемых данных (изображение, звук или видеоряд), в выходном потоке невосстановимо отбрасывается часть информации. Обычно это невоспринимаемые человеческим глазом оттенки изображения на рисунках, искусственное сужение звукового канала до речевого диапазона в звукозаписи, ухудшение разрешения видео за счет движения и т.п. Кроме степени или величины сжатия, в таких алгоритмах возникает понятие качества, т.к. исходное изображение в процессе сжатия изменяется, то под качеством можно понимать степень соответствия исходного и результирующего изображения. Качество оценивается субъективно, исходя из формата информации, хотя имеются и соответствующие интеллектуальные алгоритмы и программы.

Обратимое сжатие всегда приводит к снижению объема выходного потока информации без изменения его информативности, т.е. — без потери информации. Более того, из выходного потока, при помощи восстанавливающего или декомпрессирующего алгоритма, можно получить входной, а процесс восстановления называется декомпрессией или распаковкой и только после процесса распаковки данные пригодны для обработки в соответствии с их внутренним форматом.

Методы обратимой компрессии делятся на статистические и словарные. Словарные методы заключаются в том, чтобы в случае встречи подстроки, которая уже была найдена раньше, кодировать ссылку, которая занимает меньше места, чем сама подстрока. Классическим словарным методом является метод Лем- пела—Зива (LZ). Все используемые на сегодняшний день словарные методы являются лишь модификациями LZ.

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

Сжатие данных осуществляется либо на прикладном уровне с помощью программ сжатия, таких, как ARJ, ZIP, RAR, либо с помощью устройств защиты от ошибок (УЗО) непосредственно в составе аппаратуры ОКД — окончания канала данных, например, модемов по протоколам типа V.42bis.

194

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

Методы обратимой компрессии

Очевидный способ сжатия числовой информации, представленной в коде ASCII, заключается в использовании сокращенного кода с четырьмя битами на символ вместо восьми, так как передается набор, включающий только 10 цифр, символы точка, за-

пятая и пробел.

Алгоритмы RLE (Run Length Encoding). Суть методов данного типа состоит в замене цепочек или серий повторяющихся байтов или их последовательностей на один кодирующий байт и счетчик числа их повторений.

Пример:

44 44 44 11 11 11 11 11 01 33 FF 22 22

— исходная последовательность,

03 44 04 11 00 03 01 33 FF 02 22

— сжатая последовательность.

Первый байт указывает сколько раз нужно повторить символ (следующий байт). Если первый байт равен 00, то затем идет счетчик, показывающий сколько за ним следует неповторяющихся данных.

Данные методы, как правило, достаточно эффективны для сжатия растровых графических изображений (BMP, PCX, TIF, GIF), т.к. последние содержат достаточно много длинных серий повторяющихся последовательностей байтов. Недостатком метода RLE является довольно низкая степень сжатия.

Метод Шеннона—Фано

Данный метод так же довольно прост. Берутся исходные сообщения Si и их вероятности появления Pi. Этот список делится на две группы с примерно равной интегральной вероятностью.

195

Каждому сообщению из группы 1 присваивается 0 в качестве первой цифры кода. Сообщениям из второй группы ставятся в соответствие коды, начинающиеся с 1. Каждая из этих групп делится на две аналогичным образом и добавляется еще одна цифра кода. Процесс продолжается до тех пор, пока не будут получены группы, содержащие лишь одно сообщение. Каждому сообщению в результате будет присвоен код S c длиной — lg(P(S)). Это справедливо, если возможно деление на подгруппы с совершенно равной суммарной вероятностью. Если же это невозможно, некоторые коды будут иметь длину — lg(P(S))+1. Алгоритм Шенно- на—Фано не гарантирует оптимального кодирования.

Арифметическое кодирование

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

Предполагаемая требуемая последовательность символов, при сжатии методом арифметического кодирования, рассматривается как некоторая двоичная дробь из интервала [0, 1). Результат сжатия представляется как последовательность двоичных цифр из записи этой дроби.

Идея метода состоит в следующем: исходный текст рассматривается как запись этой дроби, где каждый входной символ является цифрой с весом, пропорциональным вероятности его появления. Этим объясняется интервал, соответствующий минимальной и максимальной вероятностям появления символа в потоке.

Каждому слову во входном алфавите соответствует некоторый подинтервал из интервала [0, 1) а пустому слову соответствует весь интервал [0, 1). После получения каждого следующего символа интервал уменьшается с выбором той его части, которая соответствует новому символу. Кодом цепочки является интервал, выделенный после обработки всех ее символов, точнее, двоичная запись любой точки из этого интервала, а длина полученного интервала пропорциональна вероятности появления кодируемой цепочки.

196

Пример

Пусть алфавит состоит из двух символов: 1 и 0 с вероятностями соответственно 0,75 и 0,25. Применим данный алгоритм для кодирования цепочки 1 1 0 1 0. Разобьем наш интервал вероятностей [0, 1) на части, длина которых пропорциональна вероятностям символов. В нашем случае это [0; 0,75) для символа 1 и

[0,75; 1) для 0.

Так как первый символ 1, то оставляем для дальнейшего анализа левый интервал [0; 0,75), а правый отбрасываем. Разбиваем теперь вновь полученный интервал на части, пропорциональные вероятностям символов: [0; 0.5625) и [0.5625; 0.75), второй символ так же 1, так что отбрасываем снова правый, а оставляем левый интервал — [0; 0.5625). Для третьего символа, равного 0, отбрасываем левый интервал [0; 0.421875), а оставляем правый — [0.421875; 0.5625). Повторяем эту операцию для всех символов кодируемого сообщения (см. табл. 4.1).

Таблица 4.1

Шаг

Символ

Интервал

 

Полученный код

0

 

[0; 1)

 

 

 

 

 

1

1

[0; 0.75)

1

 

 

 

 

2

1

[0; 0.5625)

1

1

 

 

 

3

0

[0.421875; 0.5625)

1

1

0

 

 

4

1

[0.421875; 0.52734375)

1

1

0

1

 

5

0

[0.5009765625; 0.52734375)

1

1

0

1

0

Границы k-того интервала [ak, bk) позволяют рассчитать длину lk k-того интервала lk bk ak . Затем, в зависимости от ко-

дируемого символа, вычисляются границы следующего интерва-

ла: при кодировании символа 1 — [ak 1 ak

; bk 1 ak

lk pk 1),

а при кодировании символа 0 — [ak 1 bk

lk pk 1; bk 1 bk ),

здесь pk+1 — вероятность k+1-го символа см. рис. 4.33.

 

197

0

1

1

0.75

1

0.5625

0

0.421875 0.5625

1

0.421875 0.52734375

0

0.5009765625 0.52734375

Рис. 4.33 — Арифметическое кодирование

В качестве кода можно взять любое число из интервала, полученного на последнем шаге, например, 0.51.

Алгоритм декодирования работает аналогично кодирующему: получив на входе 0.51, производится разбиение на интервалы соответствующих вероятностей и выбирается тот из них, в который попадает код. Продолжая этот процесс, мы однозначно декодируем все символы сообщения. Для того чтобы декодирующий алгоритм мог определить конец цепочки, мы можем либо передавать ее длину отдельно, либо добавить к алфавиту дополнительный уникальный символ — «конец цепочки».

Количество битов, необходимое для записи этого числа, примерно равно минус логарифму ширины интервала. Ширина интервала равна произведению вероятностей символов, т.е. вероятности p всего сообщения. Таким образом, длина кода равна — log(p), т.е. теоретическому пределу. На практике работают с переменными ограниченной длины, и точность вычислений будет ограничена, а значит, сжатие все же немного хуже.

Метод Хаффмана (Huffman code) или минимально-

избыточный префиксный код (minimum-redundancy prefix code)

относится к статистическим методам кодирования.

Обычно для хранения данных и передачи сообщений используются коды фиксированной длины, например, код ASCII. Множество символов представляется некоторым количеством кодовых слов равной длины, которая для кода ASCII равна 8 битам. При этом для всех сообщений с одинаковым количеством

198

символов требуется одинаковое количество битов при хранении и одинаковая ширина полосы пропускания при передаче.

Метод Хаффмана основан на кодировании более короткими кодовыми словами часто встречающиеся символы, а символы встречающиеся редко — более длинными. Подбирая кодовые последовательности таким образом, можно получить код с длиной, очень близкой к его энтропии (то есть информационной насыщенности). Кодовые слова при этом должны быть выбраны так, чтобы никакое из них не было префиксом другого кодового слова. Благодаря этому условию гарантируется возможность однозначного декодирования определенного закодированного текста.

Например, коде ASCII сообщение S = {DDABDECBCDBE} кодируется 96 битами следующим образом:

01000100-01000100-01000001-01000010-01000100- 01000101-01000011-01000010-01000011-01000100- 01000010-01000101.

Вто время как при использовании кода со следующим представлением символов: E — 00, D — 10, B — 11, C — 010, A — 011, то же самое сообщение можно закодировать, используя только 27 бит:

10-10-011-11-10-00-010-11-010-10-11-00.

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

Пусть A a1,a2,...,an — алфавит из n различных симво-

лов, P p1, p2,..., pn — соответствующий ему набор положи-

тельных весов (вероятностей).

Тогда набор бинарных кодов C c1,c2,...,cn , такой что:

(1) ci не является префиксом для cj, при i j;

n

(2)pi ci — минимальна

i 1

называется минимально-избыточным префиксным кодом

(minimum-redundancy prefix code) или иначе кодом Хаффмана.

199

Для создания кода Хаффмана должны быть известны, или рассчитаны, вероятности P p1, p2,..., pn появления символов исходного алфавита A a1,a2,...,an в кодируемом сообщении S.

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

Рассмотрим алгоритм Хаффмана на примере кодирования уже встречавшегося нам сообщения S = {DDABDECBCDBE}.

Составим список всех символов, встречающихся в исходном тексте, и определим количество появлений каждого символа в нем: символ A встречается 1 раз, B — 3, C — 2, D — 4 и E — 2 раза.

Алгоритм Хаффмана состоит из двух этапов — построения дерева вероятностей и построения кодов символов. На первом этапе составляется двоичный граф — дерево вероятностей, узлы которого строятся по простому правилу, а листьями являются символы, нуждающиеся в кодировании. На втором этапе ребра графа нумеруются символами 1 и 0, а затем выписываются коды вершин графа.

Составим список кодируемых символов (при этом будем рассматривать каждый символ как одноэлементное бинарное дерево, вес которого равен весу символа) как на рис. 4.34.

 

a

 

б

 

 

в

 

 

г

1

3

1

3

 

1

3

 

1

3

3

 

3

 

 

3

 

 

3

 

2

 

2

 

 

2

 

7

2

7

4

 

4

 

 

4

 

 

4

12

2

 

2

 

5

2

5

 

2

5

Рис. 4.34 — Этапы построения дерева Хаффмана

Из списка выберем два узла с наименьшим весом (на рис. 4.34(а) это листья А и С с вероятностями 1 и 2 соответственно).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]