Андроид. Windows. Антивирусы. Гаджеты. Железо. Игры. Интернет. Операционные системы. Программы.

Динамический диапазон сжатый или стандартный. Компрессия звука: принцип и настройка. Сужение динамического диапазона

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

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

Как мы уже говорили в предыдущей главе, звук представляет собой ни что иное, как колебания воздуха, частота которых лежит в диапазоне частот, воспринимаемых человеком. У разных людей точные границы диапазона слышимых частот могут изменяться, однако считается, что звуковые колебания лежат в диапазоне 16-20 000 Гц.

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

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

Можно также разделить микрофоны по назначению. Есть студийные микрофоны, которые можно держать в руке или закрепить на подставке, есть радиомикрофоны, которые можно закрепить на одежде, и так далее.

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

Рис. 2-1. Головные телефоны с микрофоном

Как же выбрать из всего многообразия микрофонов тот, что лучше всего подходит для систем распознавания речи?

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

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

В чем тут проблема?

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

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

Поэтому при работе с системами распознавания речи наилучшие результаты будут достигнуты, если использовать микрофон, прикрепленный к головным телефонам, как это показано на рис. 2-1. При использовании такого микрофона расстояние между ртом и микрофоном будет постоянным.

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

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

На рис. 2-2 мы показали осциллограмму звукового сигнала, получившуюся при произнесении долгого звука а . Эта осциллограмма была получена с помощью программы GoldWave , о которой мы еще расскажем в этой главе книги, а также с помощью звукового адаптера Sound Blaster и микрофона, аналогичного показанному на рис. 2-1.

Рис. 2-2. Осциллограмма звукового сигнала

Программа GoldWave позволяет растягивать осциллограмму по оси времени, что позволяет разглядеть мельчайшие детали. На рис. 2-3 мы показали растянутый фрагмент упомянутой выше осциллограммы звука а .

Рис. 2-3. Фрагмент осциллограммы звукового сигнала

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

Если бы во входном сигнале присутствовала только одна частота (то есть если бы звук был «чистым»), форма сигнала, полученного от микрофона, была бы синусоидальной. Однако, как мы уже говорили, спектр звуков человеческой речи состоит из набора частот, в результате чего форма осциллограммы речевого сигнала далека от синусоидальной.

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

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

Оцифровка звукового (и любого аналогового) сигнала выполняется с помощью специального устройства, называемого аналогово-цифровой преобразователь АЦП (Analog to Digital Converter , ADC ). Это устройство находится на плате звукового адаптера и представляет собой обычную с вида микросхему.

Как работает аналогово-цифровой преобразователь?

Он периодически измеряет уровень входного сигнала, и выдает на выходе числовое значение результата измерений. Этот процесс иллюстрируется на рис. 2-4. Здесь прямоугольниками серого цвета отмечены значения входного сигнала, измеренные с некоторым постоянным интервалом времени. Набор таких значений и есть оцифрованное представление входного аналогового сигнала.

Рис. 2-4. Измерения зависимости амплитуды сигнала от времени

На рис. 2-5 мы показали подключение аналого-цифрового преобразователя к микрофону. При этом на вход x 1 подается аналоговый сигнал, а с выходов u 1 -u n снимается цифровой сигнал.

Рис. 2-5. Аналого-цифровой преобразователь

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

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

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

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

К счастью, правильный выбор частоты преобразования (частоты дискретизации) сделать достаточно просто. Для этого достаточно обратиться к теореме Котельникова, известной специалистам в области цифровой обработки сигналов. Теорема гласит, что частота преобразования должна быть в два раза выше максимальной частоты спектра преобразуемого сигнала. Следовательно, для оцифровки без потери качества звукового сигнала, частота которого лежит в диапазоне 16-20 000 Гц, нужно выбрать частоту преобразования, не меньшую, чем 40 000 Гц.

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

А какая частота преобразования нужна для оцифровки звука человеческой речи?

Так как звуки человеческой речи лежать в диапазоне частот 300-4000 Гц, то минимально необходимая частота преобразования составляет 8000 Гц. Однако многие компьютерные программы распознавания речи используют стандартную для обычных звуковых адаптеров частоту преобразования 44 000 Гц. С одной стороны, такая частота преобразования не приводит к чрезмерному увеличению потока цифровых данных, а другой - обеспечивает оцифровку речи с достаточным качеством.

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

Аналого-цифровой преобразователь представляет входной аналоговый сигнал в виде потока чисел ограниченной разрядности. Обычные звуковые адаптеры содержат 16-разрядные блоки АЦП, способные представлять амплитуду входного сигнала в виде 216 =65536 различных значений. Устройства АЦП в звуковой аппаратуре высокого класса могут быть 20-разрядными, обеспечивая большую точность представления амплитуды звукового сигнала.

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

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

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

Расскажем обо всем этом по порядку.

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

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

Частотные фильтры бывают разные:

· фильтры нижних частот;

· фильтры верхних частот;

· пропускающие полосовые фильтры;

· заграждающие полосовые фильтры.

Фильтры нижних частот (low -pass filter ) удаляют из спектра входного сигнала все частоты, значения которых находятся ниже некоторой пороговой частоты, зависящей от настройки фильтра.

Так как звуковые сигналы лежат в диапазоне 16-20 000 Гц, то все частоты меньше 16 Гц можно отрезать без ухудшения качества звука. Для распознавания речи важен частотный диапазон 300-4000 Гц, поэтому можно вырезать частоты ниже 300 Гц. При этом из входного сигнала будут вырезаны все помехи, частотный спектр которых лежит ниже 300 Гц, и они не будут мешать процессу распознавания речи.

Аналогично, фильтры верхних частот (high -pass filter ) вырезают из спектра входного сигнала все частоты выше некоторой пороговой частоты.

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

Пропускающий полосовой фильтр (band -pass filter ) можно представить себе в виде комбинации фильтра нижних и верхних частот. Такой фильтр задерживает все частоты, ниже так называемой нижней частоты пропускания , а также выше верхней частоты пропускания .

Таким образом, для системы распознавания речи удобен пропускающий полосовой фильтр, который задерживает все частоты, кроме частот диапазона 300-4000 Гц.

Что же касается заграждающих полосовых фильтров (band -stop filter ), то они позволяют вырезать из спектра входного сигнала все частоты, лежащие в заданном диапазоне. Такой фильтр удобен, например, для подавления помех, занимающих некоторую сплошную часть спектра сигнала.

На рис. 2-6 мы показали подключение пропускающего полосового фильтра.

Рис. 2-6. Фильтрация звукового сигнала перед оцифровкой

Надо сказать, что обычные звуковые адаптеры, установленные в компьютере, имеют в своем составе полосовой фильтр, через который проходит аналоговый сигнал перед оцифровкой. Полоса пропускания такого фильтра обычно соответствует диапазону звуковых сигналов, а именно 16-20 000 Гц (в разных звуковых адаптерах значения верхней и нижней частоты могут изменяться в небольших пределах).

А как добиться более узкой полосы пропускания 300-4000 Гц, соответствующей наиболее информативной части спектра человеческой речи?

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

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

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

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

Рассказывая об аналогово-цифровом преобразователе, мы отметили такую его важную характеристику, как количество уровней квантования. Если в звуковом адаптере установлен 16-разрядный аналого-цифровой преобразователь, то после оцифровки уровни звукового сигнала могут быть представлены в виде 216 =65536 различных значений.

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

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

Это иллюстрируется графиком зависимости амплитуда выходного сигнала от амплитуды входного сигнала, показанным на рис. 2-7.

Рис. 2-7. Нелинейное усиление перед оцифровкой

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

Чем все это может помочь создателям систем распознавания речи?

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

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

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

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

Компрессия это одна из наиболее опутанных мифами тем саундпродакшна. Говорят, Бетховен даже пугал ей соседских детей:(

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

Что такое компрессия звука

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

Так вот, компрессия это сжатие динамического диапазона . Да, просто сжатие динамического диапазона, ну или другими словами понижение уровня громких частей сигнала и увеличение громкости тихих . Не более того.

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

Задачи, которые решает компрессия

Ответы на подобные вопросы лежат в плоскости понимания роли компрессии в работе со звуком. А она позволяет:

  1. Подчёркивать атаку звука, делать его более выраженным;
  2. «Усаживать» в микс отдельные партии инструментов , добавляя им мощности и «веса»;
  3. Делать группы инструментов или весь микс более цельным , таким единым монолитом;
  4. Решать конфликты между инструментами с помощью sidechain ;
  5. Исправлять огрехи вокалиста или музыкантов , выравнивая их динамику;
  6. При определённой настройке выступать в качестве художественного эффекта .

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

Основные параметры компрессора

Не смотря на огромное количество программных и аппаратных моделей компрессоров, вся «магия» компрессии происходит при правильной настройке основных параметров: Threshold, Ratio, Attack и Release. Рассмотрим их подробнее:

Threshold или порог срабатывания, dB

Этот параметр позволяет установить значение, с которого компрессор будет работать (то есть сжимать аудиосигнал). Так, если мы установим в threshold -12dB, компрессор будет срабатывать только в тех местах динамического диапазона, которые превышают это значение. Если весь наш звук тише -12db, компрессор просто пропустит его через себя, никак на него не влияя.

Ratio или коэффициент сжатия

Параметр ratio определяет насколько сильно будет сжиматься сигнал, превышающий threshold. Немного математики для полноты картины: допустим, мы настроили компрессор с threshold -12dB, ratio 2:1 и подали на него барабанный луп , в котором громкость бочки равна -4dB. Каким в этом случае будет результат работы компрессора?

В нашем случае уровень бочки превышает threshold на 8dB. Эта разница в соответствии с ratio будет сжата до 4dB (8dB / 2). В сумме с необработанной частью сигнала это приведёт к тому, что после обработки компрессором громкость бочки составит -8db (threshold -12dB + сжатый сигнал 4dB).

Attack, ms

Это время, спустя которое компрессор будет реагировать на превышение порога срабатывания. То есть, если время атаки выше 0ms — компрессор начинает сжатие превышающего threshold сигнала не мгновенно, а спустя указанное время.

Release или восстановление, ms

Противоположность атаке — значение данного параметра позволяет указать спустя какое время с момента возврата уровня сигнала ниже threshold компрессор прекратит сжатие .

Прежде чем мы двинемся дальше, настоятельно рекомендую взять хорошо знакомый семпл, повесить на его канал любой компрессор и 5-10 минут поэкспериментировать с вышеперечисленными параметрами для надёжного закрепления материала

Все остальные параметры опциональны . Они могут отличаться в разных моделях компрессоров, отчасти поэтому продюсеры и применяют различные модели для каких-либо определённых целей (например, один компрессор для вокала, другой на группу ударных, третий — на мастер-канале). Я не стану подробно останавливаться на этих параметрах, а лишь дам общую информацию для понимания что это вообще такое:

  • Колено или излом (Hard/Soft Knee) . Этот параметр определяет как быстро будет применяться коэффициент сжатия (ratio): жестко по кривой или плавно. Отмечу, что в режиме Soft Knee компрессор срабатывает не прямолинейно, а начинает плавно (насколько это может быть уместно когда мы говорим о миллисекундах) поджимать звук уже перед значением threshold . Для обработки групп каналов и общего микса чаще используется именно soft knee (так как работает незаметно), а для подчёркивания атаки и других особенностей отдельных инструментов — hard knee;
  • Режим реагирования: Peak/RMS . Режим Peak оправдан когда нужно жёстко лимитировать всплески амплитуды, а также на сигналах со сложной формой, динамику и читаемость которых нужно полностью передать. Режим RMS очень бережно влияет на звук, позволяя уплотнить его, сохранив атаку;
  • Предусмотрительность (Lookahead) . Это время, за которое компрессор будет знать что ему предстоит. Своего рода предварительный анализ входящих сигналов;
  • Makeup или Gain . Параметр, позволяющий компенсировать понижение громкости в результате работы компрессии.

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

Я абсолютно серьёзен. Если ты внимательно прочёл эту запись, поэкспериментировал со штатным компрессором твоей DAW и одним-двумя плагинами , но так и не понял в каких случаях нужно устанавливать большие значения атаки, какой коэффициент ratio применять и в каком из режимов обрабатывать исходный сигнал — то так и будешь дальше искать в интернете готовые рецепты, применяя их бездумно куда попало.

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

Действуй!

Уровень звука одинаковый на протяжении всей композиции, имеется несколько пауз.

Сужение динамического диапазона

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

1) Достижение единого уровня громкости на протяжении всей композиции (или партии инструмента).

2) Достижение единого уровня громкости композиций на протяжении альбома/радио передачи.

2) Повышение разборчивости, в основном при компрессии определённой партии (вокал, бас бочка).

Как же происходит сужение динамического диапазона?

Компрессор анализирует уровень звука на входе сравнивая его с задаваемым пользователем значением Threshold (Порог).

Если уровень сигнала ниже значения Threshold – то компрессор продолжает анализировать звук не изменяя его. Если уровень звука превышает значение Threshold – то компрессор начинает своё действие. Так как роль компрессора заключается в сужении динамического диапазона, то логично предположить то что он ограничивает наиболее большие и наиболее маленькие значения амплитуды (уровня сигнала). На первом этапе происходит ограничение наиболее больших значений, которые понижаются с определённой силой, которая называется Ratio (Отношение). Посмотрим на пример:

Зелёные кривые отображают уровень звука, чем больше амплитуда их колебаний от оси X – тем больше уровень сигнала.

Жёлтая линия – это порог (Threshold) срабатывания компрессора. Делая значение порога Threshold выше – пользователь отдаляет его от оси X. Делая значение порога Threshold ниже – пользователь приближает его к оси Y. Понятно то что чем ниже значение порога – тем чаще будет срабатывать компрессор и наоборот, чем выше – тем реже. Если значение Ratio очень велико – то после достижения уровня сигнала Threshold весь последующий сигнал будет подавлен компрессором до тишины. Если значение Ratio очень мало – то ничего не произойдёт. О выборе значений Threshold и Ratio речь пойдёт позже. Сейчас же нам следует задать себе следующий вопрос: Какой же смысл подавлять весь последующий звук? Действительно, в этом смысла нет, нам нужно избавиться только от значений амплитуды (пиков), которые превышают значение Threshold (на графике отмечены красным). Именно для решения этой проблемы и существует параметр Release (Затухание), которым задаётся время действия компрессии.

На примере видно то что первый и второй превышения порога Threshold длятся меньше чем третье превышение порога Threshold. Так, если параметр Release настроить на первые два пика – то при обработке третьего может остаться необработанная часть (так как превышение порога Threshold длится дольше). Если же параметр Release настроить на третий пик – то при обработке первого и второго пика за ними образуется нежелательное понижение уровня сигнала.

Тоже самое касается параметра Ratio. Если параметр Ratio настроить на первые два пика – то третий не будет достаточно подавлен. Если же параметр Ratio настроить на обработку третьего пика – то обработка первых двух пиков будет слишком завышенной.

Эти проблемы можно решить двумя способами:

1) Заданием параметра атаки (Attack) – частичное решение.

2) Динамической компрессией – полное решение.

Параметр а таки (Attack) предназначен для задания времени, по истечению которого компрессор начнёт свою работу после превышения порога Threshold. Если параметр близок к нулю (равен нулю в случае параллельной компрессии, смотри соотв. статью) – то компрессор начнёт подавлять сигнал сразу же, и будет работать кол-во времени, задаваемое параметром Release. Если же скорость атаки велика – то компрессор начнёт своё действие по истечении определённого промежутка времени (это нужно для придания чёткости). В нашем случае можно настроить параметры порога (Threshold), затухания (Release) и уровня компрессии (Ratio) на обработку первых двух пиков, а значение атаки (Attack) поставить близким к нулю. Тогда компрессор подавит первые два пика, и при обработке третьего будет его подавлять до окончания превышения порога (Threshold). Однако это не гарантирует качественной обработки звука и близко к лимиттингу (грубый срез всех значений амплитуды,в этом случае компрессор называется лимиттером).

Посмотрим на результат обработки звука компрессором:

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

Нам осталось рассмотреть последний параметр компрессии, это Gain (Усиление). Усиление предназначено для увеличения амплитуды всей композици и, по сути, эквивалентно другому инструменту звуковых редакторов – нормалайзу. Посмотрим на конечный результат:

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

Динамическая компрессия

Отличие динамической компрессии от не динамической заключается в том, что при первой уровень подавления сигнала (Ratio) зависит от уровня входящего сигнала. Динамические компрессоры есть во всех современных программах, управлением параметрами Ratio и Threshold осуществляется с помощью окна (каждому параметру соответствует своя ось):

Единого стандарта отображения графика нету, где-то по оси Y отображается уровень входящего сигнала, где-то наоборот, уровень сигнала после компрессии. Где-то точка (0,0) находится в верхнем правом углу, где-то в нижнем левом. В любом случае, при перемещении курсора мыши по этому полю изменяются значения цифр, которые соответствуют параметрам Ratio и Threshold. Т.е. Вы задаёте уровень компресии для каждого значения Threshold, благодаря чему можно очень гибко настроить компрессию.

Сайд чейн (Side Chain)

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

Часть вторая – Этапы компрессии

Существует три этапа компрессии:

1) Первый этап – компрессия отдельных звуков (singleshoots).

Тембр любого инструмента имеет следующие характеристики: Атака (Attack), Держание (Hold), Спад (Decay), Период удержания (Delay) Уровень(Sustain), Затухание (Release).

Этап компрессии отдельных звуков подразделяется на две части:

1.1) Компрессия отдельных звуков ритмических инструментов

Часто составляющие бита требуют отдельной компрессии для придания им чёткости. Многие обрабатывают бас бочку отдельно от других ритмических инструментов, как на этапе компрессии отдельных звуков, так и на этапе компрессии отдельных партий. Связано это с тем, что она находится в низкочастотной области, где кроме неё обычно присутствует только бас. Под чёткостью бас бочки понимается наличие характерного щелчка (у бас бочки очень короткое время атаки и держания). Если щелчка нет – то нужно обработать её компрессором, задавая порог равным нулю а время атаки от 10 до 50 мс. Спад (Realese) компрессора должен закончиться до нового удара бас-бочки. Последнюю проблему можно решить с помощью формулы: 60 000 / BPM , где BPM – темп композиции. Так, например) 60 000/137=437,96 (время в миллисекундах до новой сильной доли 4-х размерной композиции).

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

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

В отличие от ритмических инструментов, партии гармонических инструментов довольно редко составляются из отдельных звуков. Однако из этого не следует то что их не следует обрабатывать на уровне компрессии звуков. В случае если Вы используете семпл с записанной партией – то это второй уровень компрессии. К этому уровню компрессии относятся только синтезируемые гармонические инструменты. Это могут быть семплеры, синтезаторы использующие различные методы синтеза звука (физическое моделирование, FM, аддитивный, субтрактивный и др.). Как Вы наверное уже догадались – речь идёт о программировании настроек синтезатора. Да! Это тоже компрессия! Практически у всех синтезаторов есть программируемый параметр envelope (ADSR), что в переводе означает огибающая. С помощью огибающей задаётся время Атаки (Attack), Спада (Decay), Уровеня держания (Sustain), Затухания (Release). И если Вы мне скажите то что это не компрессия каждого отдельного звука – Вы мой враг на всю жизнь!

2) Второй этап – Компрессия отдельных партий.

Под компрессией отдельных партий я понимаю сужение динамического диапазона ряда объединённых отдельных звуков. В этот этап входят и записи партий, в том числе вокал, который требует обработки компрессия для придания ему чёткости и разборчивости. При обработке компрессией партий нужно учитывать то что при сложении отдельных звуков могут появиться нежелательный пики, от которых и нужно избавиться на этом этапе, так как если это не сделать сейчас, то картина может усугубиться на этапе сведения всей композиции. На этапе компрессии отдельных партий нужно учитывать компрессию этапа обработки отдельных звуков. Если Вы добились чёткости бас бочки – то неправильная повторная обработка на втором этапе может всё испортить. Обработка всех партий компрессором не обязательна, также как и не обязательна обработка всех отдельных звуков. Я Вам советую поставить на всякий случай анализатор амплитуды чтобы определять наличие нежелательных побочных эффектов объединения отдельных звуков. Помимо компрессии на этом этапе необходимо следить за тем, чтобы партии были по возможности в разных частотных диапазонах, чтобы было выполнено квантование. Также полезно помнить то что у звука есть такая характеристика как маскировка (психоакустика):

1) Более тихий звук маскируется более громким, идущим перед ним.

2) Более тихий звук на низкой частоте маскируется более громким звуком на высокой частоте.

Так, например, если у Вас есть партия синтезатора, то часто ноты начинают играть до того как заканчивают своё звучание предыдущие ноты. Иногда это необходимо (создание гармонии, стиль игры, многоголосие), но порой вовсе нет – Вы можете обрезать их конец (Delay – Release) в случае если он слышен в solo режиме, но не слышен в режиме воспроизведения всех партий. Тоже самое относится к эффектам, например реверберации – она не должна длится до нового начала звучания источника звука. Вырезая и удаляя ненужный сигнал – вы делаете звучание чище, и это тоже может быть рассмотрено как компрессия – потому что Вы удаляете ненужные волны.

3) Третий этап – Компрессия композиции.

При компрессии всей композиции нужно учитывать то что все партии являются объединением множества отдельных звуков. Следовательно, при их объединении и последующей компрессии нужно следить за тем чтобы конечная компрессия не испортила то чего мы достигли на первых двух этапах. Также нужно разделять композиции в которых важен широкий или узкий диапазон. при компрессии композиций с широким динамическим диапазоном – достаточно поставить компрессор, который будет давить кратковременные пики, которые образовались в результате сложения партий между собой. При компрессии композиции, в которой важен узкий динамический диапазон, – всё гораздо сложнее. Тут компрессоры последнее время называются максимайзерами. Максимайзер – плагин, который совмещает в себе компрессор, лимиттер, граффический эквалайзер, энхайзер и прочие инструменты преобразования звука. При этом он должен обязательно обладать инструментами анализа звука. Максимайзинг, конечная обработка компрессором, во многом нужна для борьбы с допущенными ошибками на предыдущих этапах. Ошибки – не столько компрессии (впрочем, если Вы делаете на последнем этапе то что Вы могли сделать на первом этапе – это уже ошибка), сколько в изначальном выборе хороших семплов и инструментов, которые не мешали бы друг другу (речь идёт о частотных диапазонах). Именно для этого производится коррекция АЧХ. Часто бывает так, что при сильной компрессии на мастере нужно изменять параметры компрессии и сведения на более ранних этапах, так как при сильном сужении динамического диапазона вылазят тихие звуки, которые ранее маскировались, изменяется звучание отдельных компонентов композиции.

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

Далее в таблице даны практические советы по обработке отдельных партий. Однако в компрессии цифры и пресеты могут только подсказать нужную область, в округе которой нужно искать. Идеальные настройки компрессии зависят от каждого отдельного случая. Параметры усиления (Gain) и порога (Threshold) подразумевают нормальный уровень звука (логическое использование всего диапазона).

Часть третяя – Параметры компрессии

Краткая справка:

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

Атака (Attack) – определяет время, по истечению которого компрессор начнёт работать.

Уровень (ratio) – определяет стпень уменьшения значений амплитуды (по отношению к оригинальному значению амплитуды).

Спад (release) – определяет время, по истечению которого компрессор перестанет работать.

Усиление (Gain) – определяет уровень повышения входящего сигнала, после обработки компрессором.

Таблица компрессии:

Инструмент Threshold Attack Ratio Release Gain Описание
Вокал 0 ДБ 1-2 мс

2-5 mS

10 мсек

0.1 мс

0.1 мс

меньше 4:1

2,5: 1

4:1 – 12:1

2:1 -8:1

150 мс

50-100 mS

150 мсек

150 мс

0.5s

Компрессия при записи должна быть минимальна, требует обязательной обработки на этапе сведения для придания чёткости и разборчивости.
Духовые инструменты 1 – 5ms 6:1 – 15:1 0.3s
Бочка от 10 до 50 мс

10-100 mS

4:1 и выше

10:1

50-100 мс

1 mS

Чем ниже Thrshold и чем больше Ratio и длиннее Attack , тем сильнее выражен щелчок вначале бочки.
Синтезаторы Зависит от типа волны (огибающих ADSR).
Рабочий барабан: 10-40 mS

1- 5ms

5:1

5:1 – 10:1

50 mS

0.2s

Хай-Хэт 20 mS 10:1 1 mS
Надголовные микрофоны 2-5 mS 5:1 1-50 mS
Ударные 5ms 5:1 – 8:1 10ms
Бас-гитара 100-200 mS

4ms to 10ms

5:1 1 mS

10ms

Струнные 0-40 mS 3:1 500 mS
Синт. бас 4ms – 10ms 4:1 10ms Зависит от огибающих.
Перкуссия 0-20 mS 10:1 50 mS
Акустическая гитара, Пианино 10-30 mS

5 – 10ms

4:1

5:1 -10:1

50-100 mS

0.5s

Электро-нитара 2 – 5ms 8:1 0.5s
Финальная компрессия 0.1 мс

0.1 мс

2:1

от 2:1 до 3:1

50 мс

0.1 мс

0 дБ на выходе Время атаки зависит от цели – нужно ли удалить пики или сделать трек более гладким.
Лимиттер после финальной компрессии 0 mS 10:1 10-50 mS 0 дБ на выходе Если нужен узкий динамический диапазон и грубый «срез» волн.

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

Эта группа методов основана на том, что передаваемые сигналы подвергаются нелинейным преобразованиям амплитуды, причем в передающей и приёмной частях нелинейности взаимообратны. Например, если в передатчике используется нелинейная функция Öu , в приемнике – u 2 . Последовательное применение взаимообратных функций приведет к тому, что в целом преобразование остается линейным.

Идея нелинейных методов сжатия данных сводится к тому, что передатчик может при той же амплитуде выходных сигналов передать больший диапазон изменения передаваемого параметра (то есть, больший динамический диапазон). Динамический диапазон - это выраженное в относительных единицах или децибеллах отношение наибольшей допустимой амплитуды сигнала к наименьшей:

; (2.17)
. (2.18)

Естественное желание увеличить динамический диапазон с помощью уменьшения U min ограничивается чувствительностью аппаратуры и возрастанием влияния помех и собственных шумов.

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

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

то есть, чувствительность очень нелинейна.

Для уменьшения этих недостатков обе функции модифицируют смещением и аппроксимацией. Например, для телефонных каналов аппроксимированная функция имеет вид (тип А,):

причем А=87,6. Выигрыш от сжатия при этом составляет 24дБ.

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

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

Эффективное кодирование

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

Ввиду неравномерности вводят среднюю длину кода. Средняя длина - математическое ожидание длины кода:

причем, l ср стремится к H(x) сверху (то есть l ср > H(x)).

Выполнение условия (2.23) усиливается при увеличении N.

Существует две разновидности эффективных кодов: Шеннона-Фано и Хафмана. Рассмотрим их получение на примере. Предположим, вероятности символов в последовательности имеют значения, приведенные в таблице 2.1.

Таблица 2.1.

Вероятности символов

N
p i 0.1 0.2 0.1 0.3 0.05 0.15 0.03 0.02 0.05

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

Таблица 2.2.

Кодирование по методу Шеннона-Фано

N P i
4 0.3 I
0.2 I II
6 0.15 I I
0.1 II
1 0.1 I I
9 0.05 II II
5 0.05 II I
7 0.03 II II I
8 0.02 II

Как видно из таблицы 2.2, первый символ с вероятностью p 4 = 0.3 участвовал в двух процедурах разбиения на группы и оба раза попадал в группу с номером I . В соответствии с этим он кодируется двухразрядным кодом II. Второй элемент на первом этапе разбиения принадлежал группе I, на втором - группе II. Поэтому его код 10. Коды остальных символов в дополнительных комментариях не нуждаются.

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

По графу ориентируются следующим образом: составляют маршрут для выделенного символа; количество разрядов для него равно количеству ребер в маршруте, а значение каждого разряда равно направлению соответствующего ребра. Маршрут составляется из исходной точки (на чертеже она помечена буквой А). Например, маршрут в вершину 5 состоит из пяти ребер, из которых все, кроме последнего, имеют направление 0; получаем код 00001.

Вычислим для этого примера энтропию и среднюю длину слова.

H(x) = -(0.3 log 0.3 + 0.2 log 0.2 + 2 0.1 log 0.1+ 2 0.05 log 0.05+

0.03 log 0.03 + 0.02 log 0.02) = 2.23 бит

l ср = 0.3 2 + 0.2 2 + 0.15 3 + 0.1 3 + 0.1 4 + 0.05 5 +0.05 4+

0.03 6 + 0.02 6 = 2.9 .

Как видно, средняя длина слова близка к энтропии.

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

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

В таблице 2.3 показано кодирование по алгоритму Хафмана. Как видно из таблицы, кодирование осуществлялось за 7 этапов. Слева указаны вероятности символов, справа - промежуточные коды. Стрелками показаны перемещения вновь образованных символов. На каждом этапе два последних символа отличаются только младшим разрядом, что соответствует методике кодирования. Вычислим среднюю длину слова:

l ср = 0.3 2 + 0.2 2 + 0.15 3 ++ 2 0.1 3 + +0.05 4 + 0.05 5 + 0.03 6 + 0.02 6 = 2.7

Это еще ближе к энтропии: код еще более эффективен. На рис. 2.12 приведено дерево кода Хафмана.

Таблица 2.3.

Кодирование по алгоритму Хафмана

N p i код I II III IV V VI VII
0.3 0.3 11 0.3 11 0.3 11 0.3 11 0.3 11 0.4 0 0.6 1
0.2 0.2 01 0.2 01 0.2 01 0.2 01 0.3 10 0.3 11 0.4 0
0.15 0.15 101 0.15 101 0.15 101 0.2 00 0.2 01 0.3 10
0.1 0.1 001 0.1 001 0.15 100 0.15 101 0.2 00
0.1 0.1 000 0.1 000 0.1 001 0.15 100
0.05 0.05 1000 0.1 1001 0.1 000
0.05 0.05 10011 0.05 1000
0.03 0.05 10010
0.02

Оба кода удовлетворяют требованию однозначности декодирования: как видно из таблиц, более короткие комбинации не являются началом более длинных кодов.

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

Эффект от внедрения таких кодов определяется в сравнении их с равномерным кодом:

(2.24)

где n - количество разрядов равномерного кода, который заменяется эффективным.

Модификации кодов Хафмана

Классический алгоритм Хафмана относится к двухпроходным, т.е. требует вначале набора статистики по символам и сообщениям, а потом описанных выше процедур. Это неудобно на практике, поскольку увеличивает время обработки сообщений и накопления словаря. Чаще используются однопроходные методы, в которых процедуры накопления и кодирования совмещаются. Такие методы называются ещё адаптивным сжатием по Хафману [ 46].

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

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

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

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

После прохождения последовательности (она называется также контрольной или тестовой) всем висячим вершинам присваиваются кодовые комбинации. Правило присвоения кодов аналогично вышеизложенному: количество разрядов кода равно количеству вершин, через которые проходит маршрут от исходной до данной висячей вершины, а значение конкретного разряда соответствует направлению от родителя к "ребёнку" (скажем, переход влево от родителя соответствует значению 1, вправо - 0).

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

Для повышения эффективности метода желательно увеличивать размер словаря; в этом случае коэффициент сжатия повышается. Практически размер словаря составляет 4 - 16 Кбайт памяти.


Проиллюстрируем приведённый алгоритм примером. На рис. 2.13 приведена исходная диаграмма (её называют также деревом Хафмана). Каждая вершина дерева показана прямоугольником, в котором вписаны через дробь две цифры: первая означает номер вершины, вторая - её вес. Как можно убедиться, соответствие весов вершин и их номеров выполняется.

Предположим теперь, что символ, соответствующий вершине 1, в тестовой последовательности встретился вторично. Вес вершины изменился, как показано на рис. 2.14, вследствие чего правило нумерации вершин нарушено. На следующем этапе меняем расположение висячих вершин, для чего меняем местами вершины 1 и 4 и перенумеровываем все вершины дерева. Полученный граф приведён на рис. 2.15. Далее процедура продолжается аналогично.

Следует помнить, что каждая висячая вершина в дереве Хафмана соответствует определённому символу или их группе. Родитель отличается от детей тем, что группа символов, ему соответствующая, на один символ короче, чем у его детей, а эти дети различаются последним символом. Например, родителю соответствуют символы "кар"; тогда у детей могут быть последовательности " кара " и " карп ".

Приведённый алгоритм не является академическим и активно используется в программах - архиваторах, в том числе и при сжатии графических данных (о них речь пойдёт ниже).

Алгоритмы Лемпеля – Зива

Это наиболее часто используемые в настоящее время алгоритмы сжатия. Они используются в большинстве программ - архиваторов (например, PKZIP. ARJ, LHA). Сущность алгоритмов состоит в том, что некоторая совокупность символов заменяется при архивировании её номером в специально формируемом словаре. Например, часто встречающаяся в деловой переписке фраза "На ваше письмо исходящий номер..." может занимать в словаре позицию 121; тогда вместо передачи или хранения упомянутой фразы (30 байт) можно хранить номер фразы (1,5 байта в двоично - десятичной форме или 1 байт - в двоичной).

Алгоритмы названы в честь авторов, впервые предложивших их в 1977 году. Из них первый - LZ77. Для архивирования создается так называемое скользящее по сообщению окно, состоящее из двух частей. Первая часть, большего формата, служит для формирования словаря и имеет размер порядка нескольких килобайт. Во вторую, меньшую часть (обычно размером до 100 байт) принимаются текущие символы просматриваемого текста. Алгоритм пытается найти в словаре совокупность символов, совпадающую с принятыми в окно просмотра. Если это удаётся, формируется код, состоящий из трёх частей: смещение в словаре относительно его начальной подстроки, длина этой подстроки, следующий за этой подстрокой символ. Например, выделенная подстрока состоит из символов " прилож " (всего 6 символов), следующий за ней символ - "е". Тогда, если подстрока имеет адрес (место в словаре) 45, то запись в словарь имеет вид "45, 6. е ". После этого содержимое окна сдвигается на позицию, и поиск продолжается. Таким образом формируется словарь.

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

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

Лучшие характеристики имеет алгоритм LZSS, предложенный в 1978г. В нём есть отличия в поддержании скользящего окна и выходных кодах компрессора . Помимо окна, алгоритм формирует двоичное дерево, аналогичное дереву Хафмана для ускорения поиска совпадений: каждая подстрока, покидающая текущее окно, добавляется в дерево в качестве одного из детей. Такой алгоритм позволяет дополнительно увеличить размер текущего окна (желательно, чтобы его величина равнялась степени двойки: 128, 256 и т.д. байт). По - другому формируются и коды последовательностей: дополнительно вводится 1- битный префикс для различения незакодированных символов от пар "смещение, длина".

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

Дополнительную возможность компрессии обеспечивает сжатое кодирование повторяющихся символов. Если в последовательности некоторые символы следуют подряд (например, в тексте это могут быть символы "пробел", в числовой последовательности - подряд идущие нули и т.д.), то имеет смысл заменять их парой "символ; длина" или "признак, длина". В первом случае в коде указывается признак, что будет осуществляться кодирование последовательности (обычно 1 бит), потом код повторяющегося символа и длина последовательности. Во втором случае (предусмотренном для наиболее часто встречающихся повторяющихся символов) в префиксе указывается просто признак повторов.

Задумаемся над вопросом - а зачем нам поднимать громкость? Для того чтобы слышать тихие звуки, которые не слышны в наших условиях (например, если нельзя слушать громко, если есть посторонние шумы в комнате и т.д.). А можно ли усилить тихие звуки, а громкие не трогать? Оказывается можно. Эта техника называется сжатием динамического диапазона (компрессия, Dynamic Range Compression, DRC). Для этого необходимо изменять текущую громкость постоянно - тихие звуки усиливать, громкие - нет. Самый простой закон изменения громкости - линейный, т.е. громкость изменяется по закону output_loudness = k * input_loudness, где k - коэффициент сжатия динамического диапазона:

Рисунок 18. Сжатие динамического диапазона.

При k = 1 никаких изменений не производится (выходная громкость равна входной). При k < 1 громкость будет увеличиваться, а динамический диапазон - сужаться. Посмотрим на график (k=1/2) - тихий звук, имевший громкость -50дБ станет громче на 25дБ, что значительно громче, но при этом громкость диалогов (-27дБ) повысится всего лишь на 13.5дБ, а громкость самых громких звуков (0дБ) вообще не изменится. При k > 1 - громкость будет уменьшаться, а динамический диапазон - увеличиваться.

Посмотрим на графики громкости (k = 1/2: сжатие ДД в два раза):

Рисунок 19. графики громкости.

Как видно в оригинале присутствовали как очень тихие звуки, на 30дБ ниже уровня диалогов, так и очень громкие - на 30дБ выше уровня диалогов. Т.о. динамический диапазон составлял 60дБ. После компрессии громкие звуки всего лишь на 15дБ выше, а тихие - на 15дБ ниже уровня диалогов (динамический диапазон теперь составляет 30дБ). Таким образом, громкие звуки стали значительно тише, а тихие - значительно громче. При этом переполнения не происходит!

Теперь обратимся к гистограммам:

Рисунок 20. Пример компрессии.

Как хорошо видно - при усилении до +30дБ форма гистограммы хорошо сохраняется, что означает, что громкие звуки остаются хорошо выраженными (не уходят в максимум и не обрезаются, как это происходит при простом усилении). При этом выделяются тихие звуки. Гистограмма это показывает плохо, однако разница очень заметна на слух. Недостаток метода - те же самые прыжки громкости. Однако механизм их возникновения отличается от скачков громкости возникающих при обрезании, а их характер отличен - они проявляются в основном при очень сильном усилении тихих звуков (а не при обрезании громких, как при обычном усилении). Чрезмерный уровень компрессии приводит к уплощению звуковой картины - все звуки стремятся к одинаковой громкости и невыразительности.

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

Рисунок 21. Увеличение громкости, без увеличения шума.

Т.е. на уровне громкости -50дБ происходит перегиб передаточной функции, и шумы будут усиливаться меньше (желтая линия). При отсутствии такого перегиба шумы будут значительно громче (серая линия). Такая простая модификация значительно снижает количество шумов даже при очень сильных уровнях сжатия (на рисунке - сжатие 1:5). Уровень “DRC” в фильтре задает уровень усиления для тихих звуков (на уровне -50dB), т.о. уровень компрессии 1/5, показанный на рисунке, соответствует уровню +40дБ в настройках фильтра.

Похожие публикации