Архивы: по дате | по разделам | по авторам

Компрессия звуковых данных

Архив
автор : ДМИТРИЙ СИМАНЕНКОВ    18.08.1998

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

Возможно, название статьи выглядит несколько неблагозвучно. Однако мне не удалось придумать лучший эквивалент общепринятому выражению "audio data compression". Обычно различают компрессию без потерь, подразумевающую возможность абсолютно точного восстановления исходных данных, и компрессию с потерями. Компрессия без потерь известна практически каждому пользователю ПК. Все мы пользуемся программами-архиваторами ARJ, ZIP и другими. К сожалению, применение подобных алгоритмов к файлам, содержащим оцифрованный звук в 16-битном формате, не позволяет в общем случае получить сжатие более чем в 1,5-2 раза.

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

Адаптивная разностная компрессия

Адаптивная разностная компрессия (Adaptive Differential Pulse Code Modulation, ADPCM) в основном используется для сжатия оцифрованных речевых сигналов. Для музыкальных сигналов этот алгоритм мало подходит из-за вносимых им заметных на слух искажений. Обычный коэффициент сжатия от 4:1 до 8:1. ADPCM вносит искажения и в речевой сигнал, но их характер мало влияет на разборчивость восстановленной речи и узнаваемость диктора, что и определило широкое применение этого алгоритма в цифровой телефонии. Реально, адаптивная разностная компрессия позволяет сжать 1 секунду исходного речевого сигнала до 16 кбит, или до 2 Кбайт. Более высокая степень компрессии приводит к очень сильным и субъективно хорошо заметным искажениям и редко используется на практике. Многие из общедоступных программ Интернет-телефонии используют именно ADPCM в различных вариациях и с разными усовершенствованиями. Поэтому для полноценного использования широко распространенных программ Интернет-телефонов требуется весьма хорошая связь с провайдером, недоступная для подавляющего числа пользователей Интернета, проживающих не в Москве и не в Петербурге. Например, автор статьи живет в Петродворце, что в 30 км от Петербурга, но даже применение модема Courier Pro не обеспечивает стабильной связи на скоростях, больших 7200 бит/с, а значит, невозможно использовать Интернет-телефонию, основанную на ADPCM.

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

Во-вторых, чтобы точнее передать скачки уровня громкости сигналов и устранить эффект пропорционального увеличения числа бит, необходимого для представления разности величин соседних отсчетов при увеличении громкости низкочастотных компонент при неизменном спектральном составе, применяется адаптация. Предположим, исходный сигнал был представлен 16-битными отсчетами с частотой дискретизации 8 кГц. При использовании коэффициента сжатия 4:1 для кодирования разности соседних отсчетов выделяется 4 бита. Несложные расчеты позволяют определить, что для кодирования разности двух отсчетов оцифрованного синусоидального сигнала с частотой 200 Гц (вполне обычная частотная составляющая в речевом сигнале) и "цифровой амплитудой" 2048 как раз и потребуются все 4 бита. Другими словами, максимальная разность соседних отсчетов оцифрованной синусоиды с описанными выше параметрами достигнет 16. Однако максимальная амплитуда при 16-битном представлении равна 32767. Соответственно, и максимальная разность для "нашей" синусоиды с такой амплитудой будет равна 255, и для ее представления потребуется 8 бит. Очевидно, 8 бит > 4 бит. Вот тут то и начинаются потери. Необходимо каким-то образом в четырех битах закодировать информацию, которая содержится в восьми битах.

Хочу отметить, что возможны различные подходы к решению этой проблемы и существует множество разновидностей ADPCM. Например, в Windows 95 в секции компрессии звуковых файлов вы можете найти, по крайней мере, два разных варианта ADPCM. На самом деле их гораздо больше. Однако все они имеют некую общую черту, а именно: кодирование (квантование) разности соседних отсчетов производится с учетом уровня громкости и динамики изменения уровня громкости (амплитуды) оцифрованного речевого сигнала и его спектрального состава. Этот "учет", или отслеживание изменений характеристик сигнала, и называется адаптацией.

В простейшем случае шаг квантования разности величин соседних отсчетов пропорционален средней (или максимальной) амплитуде сигнала на данном временном отрезке. В другом варианте ADPCM шаг квантования увеличивается, если несколько раз подряд разность достигала 16 (при выделении 4 бит для квантования разности), и уменьшается, если разность несколько раз подряд была меньше чем, скажем, 4. В современных ADPCM часто применяется нойз-шейпинг, рассмотренный в статье об АЦП/ЦАП. Качество звука адаптивной разностной компрессии читатели могут оценить, ведя обычный телефонный разговор по межгороду, так как при этом голос кодируется ADPCM 16 кбит/с.

Компрессия на основе моделирования звукоизвлекающего аппарата человека

Экспериментально установлено, что каждому информативному звуку большинства человеческих языков соответствует определенная амплитудно-частотная характеристика (АЧХ) голосового аппарата человека. Как правило, это АЧХ фильтра низких или высоких частот с достаточно острыми резонансными всплесками - формантами. В принципе голосовое звукоизвлечение похоже на процессы, происходящие в аналоговом синтезаторе. Возбуждающему генератору соответствуют голосовые связки. Человек может также "генерировать" почти белый шум при произношении шипящих звуков. Фильтрам, управляемым напряжением (Voltage Controled Filters), соответствует весь голосовой тракт. Можно сказать, что это многорезонансный фильтр, управляемый мозгом. Звукоизвлечение осуществляется человеком путем генерации периодических или шумовых возбуждающих звуков и их последующей фильтрации при прохождении по голосовому тракту. Из этой аналогии и родился способ уменьшения объема информации, необходимой для представления речевого сигнала.

Сначала по отсчетам небольшого отрезка оцифрованного сигнала (несколько меньшего по времени, чем самый короткий звук, встречающийся в обычной речи) вычисляется АЧХ голосового тракта. Далее вычисляются коэффициенты рекурсивного (многорезонансного) цифрового фильтра, имеющего АЧХ, максимально близкую к полученной на предыдущем шаге амплитудно-частотной характеристике голосового тракта. Этот цифровой фильтр и является моделью голосового тракта. Затем устанавливаются характеристики и вид (шумовой или периодический) возбуждающего сигнала. В простейшем случае сначала определяется - шипящий или вокализованный (периодический) звук содержится в оцифрованных отсчетах. Потом для вокализованного звука вычисляется высота или фундаментальная частота. Все вышеописанные вычисления периодически проводятся через небольшие интервалы времени. Таким образом, исходный сигнал в виде ряда последовательности отсчетов сигнала с частотой дискретизации (обычно 8 кГц) представляется как цифровая модель речеобразующего тракта человека, параметры которой (коэффициенты фильтра и характеристики возбуждающей функции) относительно медленно меняются во времени. То есть вместо самих отсчетов сигнала можно сохранять или передавать по цифровым линиям связи только параметры модели.

Обычно цифровой моделирующий фильтр имеет от 5 до 20 коэффициентов, которые кодируют в виде 5-16-битных чисел. Частота основного тона кодируется 10-16-битным числом. Громкость звука - 5-10-битным числом. Частота вычисления параметров модели речевого тракта может быть от 20 до 50 Гц. Таким образом, примерный объем цифровых данных, необходимых для представления одной секунды речи данным методом, составит от 1000 бит и более. Как видно, компрессия на основе моделирования звукоизвлекающего аппарата человека обеспечивает коэффициент сжатия в несколько раз больший, чем ADPCM при удовлетворительном качестве восстановленного звука.

Дальнейшее развитие компрессии методом моделирования шло по пути более тщательного анализа и имитации сигнала (функции) возбуждения. Дело в том, что реальные колебания голосовых связок не являются строго периодическими и, соответственно, для их качественной и количественной характеристики недостаточно вычислить только усредненную частоту основного тона. Кроме того, в обычной речи редко встречаются чисто шумовые или вокализованные звуки, и, следовательно, четкая классификация на шум и периодическое колебание недостаточно хорошо отражает реальные процессы звукоизвлечения. Результаты работы более совершенных методов сжатия речевых сигналов на основе тщательного моделирования как процессов фильтрации, так и возбуждающего сигнала вы можете прослушать при разговоре по сотовому телефону стандарта GSM 9600 бит/с. К сожалению, мне неизвестны программы Интернет-телефонов, реально работающие с использованием компрессии на основе моделирования звукоизвлекающего аппарата человека на скоростях до 2400 бит/с (может, читатели подскажут?). А ведь только такие скорости (или около того) передачи информации доступны подавляющему большинству российских пользователей Интернета, живущих в провинциальных городах. Возможно, высокие требования к скорости передачи цифровых данных и есть основное препятствие для широчайшего распространения Интернет-телефонии по всей России.

Компрессия с использованием свойств человеческого слуха

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

Для маскирования важнее не абсолютная громкость звуков, а отношение мощности громкого сигнала к мощности тихого. Как же используется это свойство для компрессии? Очень просто! Замаскированный, неслышимый сигнал не сохраняется и не передается через системы связи. Например, громкий щелчок продолжительностью в 0,1 с может замаскировать тихие последующие звуки на 0,5 с, а значит, их не надо сохранять. То есть для субъективно точного воспроизведения отрезка сигнала со щелчком достаточно проиграть только малую часть от исходного сигнала, а именно сам щелчок (оставшаяся часть все равно не слышна). Таким образом, коэффициент компрессии в этом примере достигает 6:1.

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

Как же используется маскирование в частотной области при компрессии данных? Для начала сигнал из временного ряда цифровых отсчетов преобразуется (с помощью быстрого преобразования Фурье - БПФ, ДКП, квадратурно-зеркальных фильтров, perfect reconstruction filters bank, wavelet или других методов) в последовательность спектров. В случае применения БПФ это действительно спектры. Для других методов затрудняюсь подобрать название. Может быть, обобщенный спектр?

Рассмотрим для простоты применение БПФ. Исходный сигнал разбивается на блоки, состоящие из N дискретов. Каждый блок подвергается БПФ размерностью N. Получаем последовательность спектров. Причем если для 16-битных входных данных каждый частотный компонент спектра также кодировать 16-битным числом, то объем данных не изменится. Компрессирование в частотной области может заключаться в том, что замаскированные и нулевые (с нулевой амплитудой) компоненты не запоминаются и не передаются через системы связи. Допустим, N=32, сигнал состоит из синусоиды с частотой, точно совпадающей с опорной частотой БПФ32, и замаскированной синусоиды с малой амплитудой и частотой, близкой к частоте первой синусоиды. Спектр такого сигнала будет иметь линию на опорной частоте БПФ (N=1) и одну (или несколько, см. подробнее о свойствах БПФ в статье о синтезаторах музыкальных звуков) "маленькую" линию, соответствующую замаскированной синусоиде. Сохранять и передавать будем только одну (не нулевую и не замаскированную) 16-битную амплитуду (для математиков поясняю - комплексную). Таким образом, коэффициент компрессии в этом примере может достигнуть 32:1. Сделав обратное БПФ, получим сигнал, субъективно звучащий почти так же, как исходный.

При компрессии в частотной области обычно используют и еще одно парадоксальное свойство человеческого слуха. Оказывается, ухо во много раз менее чувствительно к частотным искажениям, чем к искажениям формы сигнала, характерным для квантования с сильно ограниченной точностью. Проще говоря, обычный 8-битный цифровой сигнал (например, wav-файл) звучит ужасно, а вот сигнал, полученный применением обратного БПФ к спектрам, у которых амплитуды частотных составляющих представлены 8-битными (в среднем, см. ниже) числами, субъективно звучит почти неотличимо от 16-битного оригинала. А ведь это уже двукратная компрессия!

Все это выглядит весьма странно, поэтому попробую еще более просто проиллюстрировать это свойство нашего слуха. Попробуйте отличить на слух два сигнала. Пусть первый сигнал (оригинал) состоит из двух синусоид, а второй (копия) - из таких же двух синусоид, но у одной из них амплитуда увеличена на 1%, а у другой уменьшена на 1%. Очевидно, что субъективно, на слух, отличить в этом случае копию от оригинал практически невозможно. Другими словами, в спектральной области для субъективно неискаженной передачи сигнала достаточно представлять частотные компоненты с точностью 1%, что и означает их квантование и представление 7-битными числами (128 уровней). С другой стороны, то же 7-битное квантование во временной области того же сигнала из двух синусоид дает весьма заметные на слух искажения. Кроме того, экспериментально установлено, что наш слух значительно менее чувствителен к ошибкам квантования в частотной области на краях диапазона слышимых частот. То есть в диапазонах частот 20-200 Гц и 14-20 кГц допустимо более грубое квантование (требуется меньшее число бит) амплитуд (комплексных в случае БПФ) частотных составляющих, чем в диапазоне средних частот. При компрессии это свойство используется так. До компрессии для кодирования каждой из N частотных составляющих одного блока выделяется 16 бит (16-битное число). Всего для кодирования одного блока потребуется 16N бит. Допустим, мы хотим сжать объем данных в два раза при минимально субъективно заметных искажениях. То есть на один блок будет выделено в два раза меньше бит. Можно сказать, что теперь в среднем для кодирования одного частотного отсчета выделяется 8 бит. А всего потребуется 8N бит. Для максимального сохранения субъективного качества сигнала в среднем диапазоне частот амплитуды кодируются 16 битами, а на краях, там, где ухо менее чувствительно к искажением, - шестью и даже четырьмя битами (тут любители hi-fi должны возмутиться). Распределение количества бит на отсчет в зависимости от частоты подбирается с учетом свойств слуха, заданной степени компрессии и эффекта маскирования в частотной области.

Все три вышеописанные свойства слуха интенсивно эксплуатируются в современных системах компрессии звуковых данных Dolby Digital AC-3 и MPEG Audio. Эти две системы компрессии отличаются только в деталях. Кроме того, Dolby AC-3 - закрытая патентованная система, и мне доподлинно не известно, что в ней реально происходит. Тем более удивительно, что именно AC-3 захватила рынок DVD.

Система компрессии звука MPEG Audio полностью открыта для изучения, критики и усовершенствований. К сожалению, разработчики MPEG cо времен создания стандарта MPEG Audio 1 Layer 3, использующего маскирование в частотной и временной области и распределение бит в соответствии с кривой чувствительности уха (см. выше), двигались в сторону увеличения коэффициента компрессии, а не в сторону доведения качества звука до hi-fi при умеренном сжатии данных. Так, в новейшем стандарте MPEG 4 предусмотрено сжатие звуковых данных (музыки) до 4 кбит/с, а также применение алгоритмов на основе моделирования речевого тракта (вокодеров) для сжатия речевых данных вплоть до 2 кбит/с. А вот для компрессии с качеством звука, близким к CD, MPEG 4 фактически использует те же самые десятилетней давности алгоритмы MPEG 1 Layer 3. Следует отметить, что в Интернете большинство звуковых файлов с высоким качеством звука также записаны в MPEG 1 Layer 3.

Качество звука MPEG

Я провел множество экспериментов и опросов и выяснил, что для компрессии музыкальных сигналов до 256 кбит/с по стандарту MPEG 1 Layer 3 (а это, по моему глубокому убеждению, есть лучший алгоритм на сегодня) при сравнении качества оригинала (16 бит, 44,1 кГц) и восстановленного из mp3-файла сигнала на звуковоспроизводящей аппаратуре в составе колонок стоимостью до 150 долларов и усилителя ценой до 150 долларов подавляющее большинство людей не может достоверно отличить один от другого. Следует отметить, что при этом mp3-файл, содержащий одну рок- или поп-композицию, в среднем занимает 8 Мбайт. Но в Интернете, этом бездонном источнике пиратских mp3-файлов, в 99,9% случаев используется сжатие до 128 кбит/с. При этом искажения динамики сигнала и некоторая "звуковая грязь" отчетливо заметны даже при прослушивании на не очень дорогой аппаратуре. Видимо, это и породило в народных массах стойкое убеждение в плохом, не достойном hi-fi качестве звука, получаемого при применении MPEG-компрессии.

Кроме того, все доступные мне бесплатные или shareware-кодеры используют слегка разные алгоритмы с небольшими вариациями в качестве звука и, возможно, не используют в должной мере задокументированный в MPEG 1 Layer 3 метод резервирования битов. В "идеале" на каждый блок длиной N отсчетов входного сигнала при компрессии выделается K бит. Однако в некоторых блоках может не содержаться сигнала (тишина, пауза) или находиться легко компрессируемый сигнал (например, синусоида), требующие для качественной компрессии данного блока гораздо меньше бит, чем К. В этом случае MPEG 1 Layer 3 рекомендует кодировать такие блоки, используя минимально необходимое число битов, а оставшиеся биты резервировать и добавлять их в блоки со сложными, трудно компрессируемыми сигналами.

Таким образом, можно значительно улучшить качество воспроизводимого звука. Ведь в пределе наиболее сложные участки исходного сигнала могут вообще не сжиматься (при этом общий коэффициент компрессии все равно будет большим за счет более сильного сжатия "легких" участков), и, следовательно, гарантируется отсутствие искажений! А если "сложные" участки в исходном сигнале не встретились, то резервируемые биты вообще не сохраняются. В результате коэффициент компрессии возрастет без дополнительных потерь качества. Однако доступные мне MPEG-кодеры из исходных wav 16 бит 44,1 кГц файлов одинакового размера, но содержащих разные по характеру музыкальные произведения, создают mp3-файлы примерно одинакового размера. Возможно, это и означает недостаточную эффективность использования обычными общедоступными кодерами MPEG-алгоритма резервирования битов.

 

Стоит ли инвестировать в разработку программ компрессии звука?

Теоретически рынок программных средств компрессии музыкальных звуковых файлов очень перспективен. По некоторым оценкам, около 40 млн. людей используют MPEG-плейеры и кодеры на персональных компьютерах. К тому же в результате некоторого перекоса современных программных разработок алгоритмов компрессии в сторону максимального сжатия исходных звуковых данных образовалась рыночная ниша, во многом аналогичная нише, занимаемой hi-end-аппаратурой. Сегодня в Интернете ощущается острый голод на программу компрессии 64-128 кбит/с с качеством звука 16 бит 44,1 кГц или хотя бы с качеством звука MPEG 1 Layer 3 256 кбит/с, но со сжатием до 128 кбит/с. Другое дело, будет ли данная программа разработана в России на деньги российских инвесторов.

Почему-то в России программные разработки, за редкими исключениями, не стали массовым бизнесом. А ведь предпосылки были хорошие. Взять хотя бы пресловутый многопроцессорный вычислительный комплекс "Эльбрус", для которого были написаны многопроцессорные многозадачные операционные системы, в том числе и реального времени, а также компиляторы практически всех языков программирования. И вот печальный итог. Программирования как индустрии в России не существует, да и не может существовать. В странах, подобных, например, Израилю, отсутствие природных ресурсов и узость локального рынка заставляет местных инвесторов и программистов объединяться для прорыва на большие внешние рынки. В России же деньги традиционно направляются в сферу торговых и финансовых спекуляций, добычу и продажу газа, угля и нефти. Об этом говорит и структура доходов бюджета. 25% дохода дает "Газпром" и 30% - таможня (налоги на торговлю). В этом проявляется одна из черт национального русского характера - "законное" желание получить прибыль, ничего не производя.

Даже семьдесят лет немецкого марксизма-коммунизма с ежедневными попытками внушить нам, что труд - это хорошо, что все должны работать, что труд должен быть первой потребностью любого цивилизованного человека, ни к чему не привели ("трудами праведными не заработаешь палат каменных"). Большие масштабы России и легкость (для директоров предприятий) операций типа создать дочернюю фирму, продать ей уголь, газ, нефть и тому подобное по сильно заниженной цене и перепродать по обычной, а огромную разницу взять себе, полностью исключает какое бы то ни было позитивное развитие российской экономики. Фактически, при такой схеме обогащения никаких инвестиций и развития производства не нужно. Достаточно одной удачной сделки, и всю оставшуюся жизнь можно либо загорать на Багамах, либо пять лет провести не в самых лучших условиях, а потом все равно загорать на Багамах (если дочерняя фирма была офшорной). Да и тривиальные торговые операции на огромном рынке страны с громадными перепадами цен в разных районах, по моим сведениям, все еще приносят нашим купцам до 10% прибыли ежемесячно (или 120% в год без учета реинвестирования).

Из всего этого вывод однозначен: никаких серьезных инвестиций в программирование в России никогда не будет. Российские программисты в массе своей тоже вырождаются. Теперь все свои силы, знания и умения принято направлять на поиск работы в банке, пенсионном фонде или фирме, имеющей хоть малейшее касательство к нефтегазовому комплексу или таможенному обслуживанию. Попав туда, русский программист моментально получает воплощение своей мечты, хорошую зарплату, тихую неспешную и не очень мешающую частной жизни работу. Кстати, вероятность попадания на такую синекуру составляет примерно 1:30 (150 млн. населения, из них в "хороших" отраслях работает около 5 миллионов), а это гораздо больше вероятности выигрыша в лотерею. С точки зрения здравого смысла стоит попробовать - авось повезет. Те же из русских программистов, кто сохранил созидательный потенциал, отличаются другой чертой национального характера. Ее суть в вопросе "что делать?" Подразумевается, что сделать-то они могут что угодно, да все уже запрограммированно (плохо или хорошо?) командой Била Гейтса.

Вообще-то, я встречал довольно много российских программистов высочайшей квалификации ("писателей" компиляторов, операционных систем и BIOS, драйверов и мощных баз данных). Но они действительно не понимают, что такое маркетинг рыночных ниш, и им недоступны серьезные инвестиции (при наличие которых и создание конкурента Windows не выглядело бы фантастикой - вспомните "Эльбрус"!). Самое смешное, что, переехав в Израиль, русский программист буквально преображается, начинает фонтанировать идеями и очень быстро осваивает технологию получения инвестиций. Климат, что ли, влияет?

И еще немного о российских инвесторах. Практически нет инвесторов "среднего размера". Концентрация капитала очень высока, и, соответственно, инвесторы располагают колоссальными суммами и интересуются только миллиардными "проектами века". А средний и малый бизнес нуждается в относительно небольших кредитах. Но это никому в России не интересно. Или я ошибаюсь?

© ООО "Компьютерра-Онлайн", 1997-2021
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.