
- •1.1. Модель радиотехнической системы передачи информации
- •1.2. Источник информации
- •1.3. Теорема дискретизации
- •1.3.1. Практические вопросы дискретизации реальных сигналов
- •1.4. Дискретизация двумерных сигналов (изображений)
- •1.5. Квантование сообщений. Ошибки квантования
- •1.6. Количество информации, энтропия источника сообщений
- •1.6.1. Энтропия сложных сообщений, избыточность источника
- •2. Основы экономного кодирования
- •2.1. Цель сжатия данных и типы систем сжатия
- •2.1.1. Сжатие без потерь информации
- •2.1.2. Сжатие с потерей информации
- •2.2. Коды без памяти. Коды Хаффмена
- •2.2.1. Алгоритм Хаффмена
- •2.2.2. Границы энтропии для кода Хаффмена
- •2.3. Коды с памятью
- •2.4. Арифметическое кодирование
- •2.4.1. Кодирование
- •2.4.2. Декодирование
- •2.5. Словарные методы кодирования. Метод Зива-Лемпела
- •2.5.1. Кодирование
- •2.5.2. Декодирование
- •2.6. Кодирование длин повторений
- •2.7. Дифференциальное кодирование
- •2.8. Методы сжатия с потерей информации
- •2.8.1. Кодирование преобразований. Стандарт сжатия jpeg
- •Или же, в матричной форме,
- •2.8.2. Фрактальный метод
- •2.8.3. Рекурсивный (волновой) алгоритм
- •2.9. Методы сжатия подвижных изображений (видео)
- •2.10. Методы сжатия речевых сигналов
- •2.10.1. Кодирование формы сигнала
- •2.10.2. Кодирование источника
- •2.10.3. Гибридные методы кодирования речи
- •3. Основы помехоустойчивого кодирования
- •3.1. Основные принципы. Типы кодов
- •3.2. Линейные блочные коды
- •3.2.1. Код с проверкой на четность
- •3.2.2. Итеративный код
- •3.2.3. Порождающая матрица линейного блочного кода
- •3.2.4. Проверочная матрица
- •3.2.5. Дуальные коды
- •3.2.6. Синдром и обнаружение ошибок
- •3.2.7. Синдромное декодирование линейных блочных кодов
- •3.2.8. Мажоритарное декодирование линейных блочных кодов
- •3.2.9. Декодирование методом максимального правдоподобия
- •Поскольку
- •Если принятый сигнал дискретизован и Si – I-й отсчет принятого сигнала.
- •3.2.10. Вес и расстояние Хемминга. Способность кодов обнаруживать и исправлять ошибки
- •3.3. Полиномиальные коды
- •3.3.1. Циклические коды
- •1.3.2. Кодирование с использованием циклических кодов
- •3.3.3. Вычисление синдрома и исправление ошибок в циклических кодах
- •3.3.4. Неалгебраические методы декодирования циклических кодов
- •4. Сверточные коды
- •4.1. Кодирование с использованием сверточных кодов
- •4.2. Синдромное декодирование сверточных кодов
- •4.3. Кодовое дерево и решетчатая диаграмма
- •4.4. Декодирование сверточных кодов. Алгоритм Витерби
- •4.5. Алгоритмы поиска по решетке
- •5. Применение корректирующего кодирования в системах связи
- •5.1. Каскадные коды
- •5.2. Кодирование с перемежением
2.5. Словарные методы кодирования. Метод Зива-Лемпела
Практически все словарные методы кодирования пpинадлежат семье алгоритмов из работы двух израильских ученых - Зива и Лемпела, опубликованной в 1977 году. Сущность их состоит в том, что фразы в сжимаемом тексте заменяются указателем на то место, где они в этом тексте уже pанее появлялись.
Это семейство алгоритмов называется методом Зива-Лемпела и обозначается как LZ-сжатие. Этот метод быстpо пpиспосабливается к стpуктуpе текста и может кодировать короткие функциональные слова, так как они очень часто в нем появляются. Новые слова и фразы могут также формироваться из частей ранее встреченных слов.
Декодирование сжатого текста осуществляется напрямую - происходит простая замена указателя готовой фразой из словаря, на которую тот указывает. На практике LZ-метод добивается хорошего сжатия, его важным свойством является очень быстрая работа декодера. (Когда мы говорим о тексте, то предполагаем, что кодированию подвергается некоторый вектор данных с конечным дискретным алфавитом, и это не обязательно текст в буквальном смысле этого слова.)
Большинство словарных методов кодирования носят имя авторов идеи метода Зива и Лемпела, и часто считают, что все они используют один и тот же алгоритм кодирования. На самом деле разные представители этого семейства алгоритмов очень сильно различаются в деталях своей работы.
Все словарные методы кодирования можно разбить на две группы.
Методы, принадлежащие к первой группе, находя в кодируемой последовательности цепочки символов, которые ранее уже встречались, вместо того, чтобы повторять эти цепочки, заменяют их указателями на предыдущие повторения.
Словарь в этой группе алгоритмов в неявном виде содержится в обрабатываемых данных, сохраняются лишь указатели на встречающиеся цепочки повторяющихся символов.
Все методы этой группы базируются на алгоритме, разработанном и опубликованном, как уже отмечалось, сравнительно недавно - в 1977 году Абрахамом Лемпелем и Якобом Зивом, - LZ77. Наиболее совершенным представителем этой группы, включившим в себя все достижения, полученные в данном направлении, является алгоритм LZSS, опубликованный в 1982 году Сторером и Шимански.
Процедура кодирования в соответствии с алгоритмами этой группы иллюстрируется рис. 2.5.
Рис. 2.5
Алгоритмы второй группы в дополнение к исходному словарю источника создают словарь фраз, представляющих собой повторяющиеся комбинации символов исходного словаря, встречающиеся во входных данных. При этом размер словаря источника возрастает, и для его кодирования потребуется большее число бит, но значительная часть этого словаря будет представлять собой уже не отдельные буквы, а буквосочетания или целые слова. Когда кодер обнаруживает фразу, которая ранее уже встречалась, он заменяет ее индексом словаря, содержащим эту фразу. При этом длина кода индекса получается меньше или намного меньше длины кода фразы.
Все методы этой группы базируются на алгоритме, разработанном и опубликованном Лемпелем и Зивом в 1978 году, – LZ78. Наиболее совершенным на данный момент представителем этой группы словарных методов является алгоритм LZW, разработанный в 1984 году Терри Вэлчем.
Идею этой группы алгоритмов можно также пояснить с помощью рис. 2.6.
Рис. 2.6
Алгоритмы второй группы несколько проще в объяснении их работы, поэтому начнем рассмотрение принципа действия LZ-кодеров с алгоритма LZW.
Рассмотрим в самом общем виде работу LZW-кодера и декодера.