- •В.Г. Шахов основы информационных технологий
- •Введение
- •Глава 1 Теоретические основы информационных технологий
- •1.1. Теория сигналов и спектральный анализ
- •1.2. Управление колебаниями
- •1.3. Теория информации
- •1.4. Дискретизация и квантование
- •Глава 2 Сжатие информации
- •2.1. Адаптивная дискретизация, разностная и дельта-модуляция.
- •2.2. Статистическое сжатие
- •2.3 Сжатие динамического диапазона.
- •2.4. Эффективное кодирование
- •2.5. Модификации кодов Хафмана
- •2.6. Алгоритмы Лемпеля – Зива
- •2.7. Сжатие графических изображений
- •2.8. Видеостандарт mpeg
- •Глава 3 Многоканальная передача и уплотнение линий связи
- •3.1. Сравнение и анализ основных методов разделения каналов
- •3.3. Адресное разделение каналов
- •3.4. Разделение каналов на основе псевдослучайных последовательностей
- •3.5. Комбинированное разделение каналов
- •Глава 4 Случайные процессы и их приложения
- •4.1. Основы теории случайных событий и величин
- •4.2 Основы теории случайных процессов
- •Глава 5 Основы цифровой обработки сигналов
- •5.1. Дискретные экспоненциальные функции (дэф)
- •5.2. Быстрое преобразование Фурье (бпф)
- •5.3. Применение теории чисел в цифровой обработке сигналов
- •5.5. Основы цифровой фильтрации
- •Глава 6 Борьба с помехами
- •6.1. Энергетические методы
- •6.2. Методы импульсной модуляции гармонической несущей
- •6.2. Простейшие методы приема импульсных сигналов
- •6.3. Помехоустойчивый прием модулированных колебаний при импульсной огибающей
- •6.3.1 Некогерентный ам-прием
- •6.3.2 Когерентный чм-прием
- •.3.3 Когерентный фм-прием.
- •6.4.Корректирующие коды.
- •6.4.1. Основные определения корректирующих кодов.
- •6.4.2. Алгебраические коды
- •6.4.3. Матричная запись линейных корректирующих кодов
- •6.4.4. Коды Рида - Маллера I рода
- •6.4.5. Полиномиальные коды
- •6.4.6. Итеративные коды
- •6.5. Непрерывные коды
- •6.5.1. Рекуррентные коды
- •6.5.2 Сверточное кодирование
- •6.5.3. Каскадные коды
- •6.5.4. Нелинейные коды
- •6.6. Системы с обратными связями
- •6.7. Комплексные решения помехоустойчивого приема.
- •Глава 7 Пример расчета параметров информационной системы
- •7.1. Основные сведения о системах телеизмерения
- •7.2. Содержание курсовой работы и исходные данные
- •7.3. Определение полосы занимаемых частот и построение спектральной диаграммы
- •7.3.1 Определение периода опроса
- •7.3.2. Определение верхней частоты спектра импульсной последовательности
- •7.3.3. Варианты модуляции
- •7.3.4. Выбор несущих и построение спектральной диаграммы
- •7.4. Определение максимального уровня помех в канале связи
- •7.4.1. Помехоустойчивость передачи импульсно-модулированных сигналов
- •7.4.2. Помехоустойчивость передачи кодовых посылок
- •7.5. Определение количества информации одного сообщения и скорости передачи информации.
- •7.6. Вычисление эффективности передачи
- •Заключение по курсовой работе
- •Общее заключение по учебному пособию
- •Библиографический список
- •Содержание
- •Глава 7 278
2.6. Алгоритмы Лемпеля – Зива
Это наиболее часто используемые в настоящее время алгоритмы сжатия. Они используются в большинстве программ-архиваторов (например, PKZIP. ARJ, LHA). Сущность алгоритмов состоит в том, что некоторая совокупность символов заменяется при архивировании её номером в специально формируемом словаре. Например, часто встречающаяся в деловой переписке фраза «На ваше письмо исходящий номер...» может занимать в словаре позицию 121; тогда вместо передачи или хранения упомянутой фразы (30 байт) можно хранить номер фразы (1,5 байта в двоично-десятичной форме или 1 байт в двоичной).
Алгоритмы названы в честь авторов, впервые предложивших их в 1977 году. Из них первый – LZ77. Для архивирования создается так называемое скользящее по сообщению окно, состоящее из двух частей. Первая часть, большего формата, служит для формирования словаря и имеет размер порядка нескольких килобайт. Во вторую, меньшую часть (обычно размером до 100 байт) принимаются текущие символы просматриваемого текста. Алгоритм пытается найти в словаре совокупность символов, совпадающую с принятыми в окно просмотра. Если это удаётся, формируется код, состоящий из трёх частей: смещение в словаре относительно его начальной подстроки, длина этой подстроки, следующий за этой подстрокой символ. Например, выделенная подстрока состоит из символов «прилож» (всего 6 символов), следующий за ней символ – «е». Тогда, если подстрока имеет адрес (место в словаре) 45, то запись в словарь имеет вид «45, 6. е». После этого содержимое окна сдвигается на позицию, и поиск продолжается. Таким образом формируется словарь.
Достоинством алгоритма является легко формализуемый алгоритм составления словаря. Кроме того, возможно разархивирование и без первоначального словаря (желательно при этом иметь тестовую последовательность) – словарь формируется по ходу разархивирования.
Недостатки алгоритма появляются при увеличении размера словаря – увеличивается время на поиск. Кроме того, если в текущем окне появляется строка символов, отсутствующая в словаре, трёхэлементным кодом записывается каждый символ, т. е. получается не сжатие, а растяжение.
Лучшие характеристики имеет алгоритм LZSS, предложенный в 1978г. В нём есть отличия в поддержании скользящего окна и выходных кодах компрессора [49]. Помимо окна, алгоритм формирует двоичное дерево, аналогичное дереву Хафмана для ускорения поиска совпадений: каждая подстрока, покидающая текущее окно, добавляется в дерево в качестве одного из детей. Такой алгоритм позволяет дополнительно увеличить размер текущего окна (желательно, чтобы его величина равнялась степени двойки: 128, 256 и т.д. байт). По-другому формируются и коды последовательностей: дополнительно вводится 1-битный префикс для различения незакодированных символов от пар «смещение, длина».
Ещё большая степень сжатия получается при использовании алгоритмов типа LZW. Описанные ранее алгоритмы имеют фиксированный размер окна, что приводит к невозможности занесения в словарь фраз длиннее размера окна. В алгоритмах LZW (и их предшественнике LZ78) просмотровое окно имеет неограниченный размер, а словарь накапливает фразы (а не совокупность символов, как ранее). Словарь имеет неограниченную длину, а кодер (декодер) работают в режиме ожидания фразы. Когда фраза, совпадающая со словарём, сформирована, выдаётся код совпадения (т. е. код этой фразы в словаре) и код следующего за ней символа. Если по мере накопления символов образуется новая фраза, она также заносится в словарь, как и более короткая. В результате образуется рекурсивная процедура, обеспечивающая быстрое кодирование и декодирование.
Дополнительную возможность компрессии обеспечивает сжатое кодирование повторяющихся символов. Если в последовательности некоторые символы следуют подряд (например, в тексте это могут быть символы «пробел», в числовой последовательности – подряд идущие нули и т.д.), то имеет смысл заменять их парой «символ; длина» или «признак, длина». В первом случае в коде указывается признак, что будет осуществляться кодирование последовательности (обычно 1 бит), потом код повторяющегося символа и длина последовательности. Во втором случае (предусмотренном для наиболее часто встречающихся повторяющихся символов) в префиксе указывается просто признак повторов.