Начало
 
 


НовостиОборудованиеСтатьиФорумФайлыОрганизацииСсылкиПрайс-листыРекламаСловарьПоиск

 
  Математика микширования

Александр ФЕДОРОВ
Музыкальное Оборудование
ноябрь 2000

В спецификациях современных DSP все чаще встречается фраза “внутренняя обработка 32-разрядная с плавающей запятой”. Микшеры таких программ, как Cubase VST, Cakewalk, WaveLab, CoolEdit также работают в этом формате. Напрашивается вопрос: а почему, собственно, 32 бита, да еще с плавающей запятой?

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

Для примера: в одном из тестов были взяты три программно сгенерированные синусоиды с частотами 400, 1000 и 6500 Гц соответственно и уровнем -6 дБ. В Cubase 3.7 импортировались три аудио файла с этими тестовыми сигналами разрешением 24 бита и частотой дискретизации 48 кГц. Затем все это микшировалось (при нулевых положениях фейдеров линеек и мастер-фейдеров) на одну дорожку с помощью команды Create File мастер-секции. Миксдаун (также с разрешением 24 бита и частотой дискретизации 48 кГц) звучал отвратительно, так, как будто сигнал был обработан эффектом Fuzz. В его спектре появлялось множество посторонних гармоник (рис. 21), расположение которых очень схоже с тем, какое наблюдается при превышении цифровым сигналом уровня 0 дБ.

Рис. 21

Я проделал подобный тест и в Cubase VST 32 5.0. При нулевых положениях фейдеров наблюдался тот же перегруз и та же невеселая спектральная картина. Затем я смикшировал эти синусоиды в CoolEdit 2000. Результат тот же. В WaveLab 3.0 (последовательной вставкой в начало файла в режиме Mix) — один в один. Все это навело меня на мысль: а, может, уровень микса данных сигналов действительно превышает 0 дБ? Для цифрового звука это превышение моментально приводит к многочисленным “клипам”, которые все и портят.

Из школьного курса физики известно, что мгновенная амплитуда гармонического колебания:

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

Чтобы не возиться с громоздкими числами, отражающими реальное значение семплов, примем максимально возможную амплитуду (соответствующую уровню 0 дБ) за единицу. Тогда амплитуда синусоиды с уровнем -6 дБ (как в нашем случае) будет равна 0,5:

а полная формула микса станет такой:

 
 
   

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

При большом увеличении волновой формы миксдауна в WaveLab эти цифры полностью подтверждаются. А посему вывод: для тестов алгоритма микширования указанные сигналы брать нельзя, так как без принудительного уменьшения их уровня перегрузка неизбежна. Это самое уменьшение уровня (в данном случае — на 4 дБ в мастер-секции либо на 2 дБ в каждом канале) позволяет получить замечательный миксдаун с посторонними гармониками на уровне порядка -150 дБ, возникающими вследствие дизеринга с 32 до 24 бит.

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

Вот тут-то и проявляются преимущества 32-разрядной обработки сигнала с плавающей запятой.

Для начала давайте разберемся, как представить отсчет сигнала (семпл) числом с плавающей запятой. С целым числом все понятно: при разрешении 24 бита максимально возможная положительная амплитуда равна: 224-1 = +8.388.608, а отрицательная, соответственно, -8.388.608. Преобразование в формат с плавающей запятой происходит по формуле:

В случае максимальной амплитуды отсчета (+/-8.388.608 при разрядности 24 бита) амплитуда в формате плавающей запятой будет равна +/-1,0. Из этого вытекают два важных следствия.

1. Числа с плавающей запятой могут представлять гораздо более мелкие изменения уровня, чем младший бит (LSB) 24-разрядного числа. Например, семпл со значением +4.000.000 преобразуется в “плавающий” формат со значением 0,47683716. А семпл +4.000.001 — в 0,47683728. Если при обработке сигнала получается число, скажем, 0,47683723, то для преобразования его в целое приходится производить округление и выбирать: +4.000.000 или +4.000.001. Хотя ясно, что реальное значение находится где-то между ними.

2. Числа с плавающей запятой могут представлять уровни, большие 0 дБ. Действительно, раз уровню 0 дБ соответствует значение +/- 1,0, то вполне допустимы (и реально получаются при вычислениях) значения больше этого, — например, +/-1,5 или +/-2,0. В последнем случае уровень поднимается до +6 дБ. Соответственно увеличивается и динамический диапазон.

Конечно, уровень больше 0 дБ допустим только на внутренних стадиях работы алгоритмов (или при передаче данных между программными модулями, соединенными в цепь). На выходе (при выводе 24-разрядных целых чисел) мы не можем получить уровни, большие 0 dBFS. Кстати, в программе WaveLab можно указать каталог для временных файлов, куда будут сбрасываться результаты внутренней работы алгоритмов мастер-секции в формате 32 бита с плавающей запятой, с уровнем, превышающим 0 дБ.

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

Напоследок хочется привести мнение, которое высказал авторитетный специалист в области цифровых технологий и мастеринга Bob Katz.

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

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

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

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

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

  Оценка статьи
Посещений: 34108 | Проголосовавших: 64 | Средняя оценка: 4.7

   

  Комментарии
20.02 07:42
Tim Matrosskin
в математике (особенно звуковой) не шибко силен :) но с проблеймой сталкивался на практике - два аудио трека с пиками на 0 в кубэйсе дают перегруз на мастер секции. искажения на выход карты не поступают, хотя индикатор шкалит. вывод - кубэйс чего то прячет. выход - поканальное уменьшение на пульте или (и) общего уровня на мастер секции. но по моему при поканальном перегрузе он тоже чего то прячет. спасибо за математические подтверждения догадок. greetz. tm.

12.05 07:40
Triode
А что уважаемый Автор скажет по поводу цифрового перегруза при миксдауне в Cakewalk? По-моему мнению, достаточно сложно подобрать уровни,при которых этого явления не наблюдается. В целом проблема актуальна и данная статья, ворзможно, будет одним из импульсов к экспериментам и поискам решения этой проблемы.

08.08 21:02
Eugene A. Petroff
По поводу циврового микса в Кейквоке/Сонаре можно не беспокоиться. Там имеется весьма солидный хидрум и клипирования не происходит. Проверено и выкладывалось в свое время в Русаудиопро...

17.10 04:18
LEO
У меня Yamaha SW60XG- очень шумит,сил нет! Начинаю обрабатывать в Cool Edit- шумыостаются! Научите получать чистый звук пожалуйста, только если можно малобюджетно.

12.06.03 21:37
Steinert
Мпасиба! для моей дипломной информация - пригодилась!

14.09.03 04:58

Да-с. Немного людей работают в музыке и имеют профессиональные знания в DSP. Поэтому доношу до сведения действительную информацию. Во ВСЕХ бинарных операциях с плавающей запятой происходит нормализация/денормализация операндов в разрядную сетку ВСЕГДА целочисленного сумматора или умножителя. Это означает то, что если результат операций нигде не выходит за пределы конечного поля 2**N, то целочисленная арифметика ВСЕГДА даст лучший результат при условии, что разрядность чисел с плавающей и фиксированной запятой близки (возможная разница разрядности для примерно идентичных результатов зависит от типа DSP и операций), Переход на плавающую запятую на PC дает лучший результат из-за того, что мантисса числа в этом случае - 24 бита вместо 16 прошлых лет, а внутренняя обработка идет с 80-разрядным представлением. Однако при корректной реализации в целочисленной арифметике с 32 разрядами (i386-686) результат будет НЕ ХУЖЕ, чем с плавающей запятой в формате float (не double)Особенно это хорошо отслеживается на накопительно/сверточных операциях, на которых во многом зиждется фильтрация и вообще DSP. Но для этого нужно очень хорошо программировать и работать с поблочно-плавающим представлением. А это не всегда делается. Проще просто перейти на float/double и почивать на лаврах... А ведь на fixed работало бы не в пример быстрее. Про откровенные ляпы я уже не буду рассказывать...

08.04.04 02:09

Короче, господа, пленка рулит:))

11.10.04 11:25
Константин
Хорошая статья. Бывает трудно понять, за что просят немалые деньги...

22.12.04 02:21
Вадим
Всё таки уточните пожалуйста если можно, после какого максимального значения амплитуды в ДБ начнет давать перегрузку 32 Bit Floating point. То есть понятно что искажений небудет при небольшом превышении 0 ДБ, но всё-таки какое именно максимальное значение ДБ возможно в 32 Bit Floating Point ?

24.02.05 17:08
NikDeev
Спасибо за актуальность темы! Хотелось бы побольше таких работ и более глубоких исследований. Спасибо!

10.09.07 23:03
alex_raider
от 14.09.03 04:58 вначале внимательно прочитал статью, возникли претензии. ..

затем, читая ниже, наткнулся на комментарий. человек от 14.09.03 04:58 написал очень правильно. так, что мне и сказать осталось нечего. моё уважение. всё верно.

float - дешевое средство. кроме того, разрядная сетка float - нелинейна и не сохраняет точность.


07.08.08 08:52
андрей
хы, крутые вы чюваки, я ни аднаво слова ни понял

ы


18.12.08 14:17
Кук
Пост от 14.09.03 04:58 - высосанная из пальца КУЙНЯ без каких-либо доказательный фактов. Подобного рода безапеляционный заявления должны быть ВСЕГДА доказательными не на пустом слове "всегда", которое неподписавшийся автор так активно употребляет в тексте, что говорит лишь о его некомпетентности в вопросе и потоке умного словоблудия.

19.12.08 13:03
jinek
зря статью засираете. есть конечно ляпы, но идея правильна. Очевидно, что имея плавающую запятую возможно сводить с одинаковым качеством как на большом, так и на маленьком уровнях

по поводу поста: ------------ если результат операций нигде не выходит за пределы конечного поля 2**N, то целочисленная арифметика ВСЕГДА даст лучший результат при условии, что разрядность чисел с плавающей и фиксированной запятой близки --------------- естественно не даст! лучший результат, при достаточно маленьком уровне целочисленная арифметика вообще ничего не даст, кроме тишины и покоя.))


15.03.09 11:18

а как же интерференция?

В связи с обилием спама размещение комментариев отключено. Пользуйтесь форумами.

РЕКЛАМА

 
       


Цены на рекламу


Музыкальное Оборудование
muzoborudovanie.ru
mail@muzoborudovanie.ru

© Агентство ДАТА