Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

1.8.2Сжатие звука

Как мы уже говорили в разделе 1.4, одна секунда музыкального звучания, оцифрованная с частотой дискретизации 44 100 отсчетов в секунду, требует более одного миллиона битов в памяти. Такие требования допустимы для музыкальных записей, распространяемых на компакт-дисках, но попытка сочетать звук и изображение при записи фильмов бросает вызов возможностям технологий. Поэтому Экспертной группой по движущимся изображениям (The Motion Picture Experts Group), входящей в организацию ISO, был разработан метод сжатия данных, который значительно сокращает требования к памяти. Один из этих стандартов называется МРЗ (MPEG-1 Audio Layer-3) и позволяет достичь коэффициента сжатия от 12 до 1. При использовании стандарта МРЗ размер музыкальных записей может быть сведен к размеру, который может экономно передаваться по Сети. Эта возможность грозит коренным образом изменить индустрию звукозаписи.

Рассмотрим в качестве примера, как мы можем сжать сообщение, используя частный случай алгоритма Лемпеля-Зива, который называется LZ77. Начнем с простого цитирования начальной части сообщения. Затем представим оставшуюся часть сообщения в виде последовательности троек (содержащих два целых числа, за которым следует символ из сообщения). Каждая такая тройка описывает, как должна строиться следующая часть сообщения на основании предыдущей. Следовательно, словарь, из которого строится сообщение, состоит из самого сообщения.

Например, рассмотрим сжатое сообщение xyxxyzy (5. 4, х), состоящее из начального сегмента xyxxyzy, за которым следует тройка (5. 4, х). Цепочка xyxxyzy представляет собой часть сообщения, которая уже находится в развернутой форме. Для того чтобы развернуть оставшуюся часть сообщения, мы должны расшифровать тройку (5. 4, х), как показано на рис. 1.27. Первое число тройки показывает, на сколько символов нужно вернуться назад в развернутой цепочке. В нашем случае мы возвращаемся на пять символов назад до второго слева х. Теперь начинаем добавлять в конец развернутой цепочки символы, находящиеся в этой позиции. Второе число показывает, сколько символов из последовательности нужно добавлять. В нашем случае это число 4, поэтому мы дописываем символы xxyz в конец развернутой цепочки и получаем xyxxyzyxxyz. Наконец, добавляем в конец цепочки последний символ тройки. В нашем примере этот символ х, приписываем его в конец расшифрованной цепочки. В итоге получаем развернутое сообщение xyxxyzyxxyzx.

Теперь предположим, что нам нужно развернуть сообщение xyxxyzy (5. 4, х) (О, 0, w) (8. б. у). Начнем, как и раньше, с расшифровки первой тройки, получаем xyxxyzyxxyzx (0, 0, w) (8. 6, у). Теперь в результате разворачивания второй тройки получаем цепочку xyxxyzyxxyzxw (8, 6, у). Обратите внимание, что тройка (0, 0. w) использовалась потому, что символ w еще не встречался в сообщении. Наконец, расшифровываем последнюю тройку и получаем развернутое сообщение xyxxyzyxxyzxwzyxxyzy.

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

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