Digital Dynamic Range Compressor (1 онлайн

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
Почему бы не начать с какой-нибудь простенькой реализации smooth min, например, с такой:
Попробовал реализовать нечто подобное. Получилось вот так
Реализация колена через степенную функцию, но главное не это - главное то что я примерно понял куда грести. Попробую теперь реализовать через параболу или гиперболу какую-нибудь.
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
например, с такой:
Я сделал что-то своё, но получилось практически копия твоего, за исключением того что при Ratio=1 колено не становится бесконечным и не отслаивается от "ноги"
Мало того, сделал реализацию колена не только парабалой, но и другими порядками. Самое что интересное, чем выше порядок - тем больше эта реализация тяготеет к показательной функции.
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
@Rst7, Дима, ты прям как наставник. Как препод по практическим работам. Если бы не ты, я бы...
В общем ситуация такая: колено придумали, но оно получается в логарифмической шкале +- х дБ. Теперь надо придумать как реализовать сглаживание в разовой шкале.
--
Размышления: если в логарифмической шкале колено прибавлялось (в минус), то в разовой должен быть множитель. Также и с шириной колена. Вправо умножаем, влево делим на коэффициент ширины колена.
Ну и решить вопрос реализации приближения показательной функции с аргументом показательной функции.
 

Rst7

Well-Known Member
10 Янв 2010
2.167
2.156
113
50
Kharkiv-city
Теперь надо придумать как реализовать сглаживание в разовой шкале.
Все точно так же, воспользоваться тем, что логарифм мало отличается от самого числа при малых изменениях.

Т.е. просто выкинув логарифмы ;)
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
Пока ещё не избавился от одной степенной функции отвечающей за Ratio. Надо подумать как её реализовать через выше изученные приближения.
теперь про вычисление произвольной степени:
Пять дней на размышления и решение пришло после погружения (в прямом смысле) под воду. ))
Проблема заключается в куче операций log10 и 10^x. На каждый семпл такое. А операции эти крайне медленные.

Тут важно определиться вот с чем.

Обычно в компрессорах в RC-фильтре болтается уже сигнал, который gout в терминологии Вашего исходника, т.е. непосредственно множитель. А не его значение в дБ (т.е логарифм), как это сделано у Вас.

Является ли именно этот момент, так сказать, mojo данного компрессора? Мое мнение - сомнительно. Дело в том, что в пределах 6дБ разница между логарифмом сигнала и собственно сигналом всего-то 4% (log2(x+1) примерно равно x).

И так как тут все обсуждают типичный GR порядка 3дБ, то явно не эти 4% играют рояль.

Да, для очень больших изменений управляющего сигнала, поведение будет заметно отличаться.

В общем, я бы для теста перешел бы из дБ в разы (как это и сделано в, пожалуй, абсолютном большинстве компрессоров) и выбросил из секции @ sample все логарифмы и степени, оставил бы только +-* (еще бы, конечно, и корень прибить, но это не так напряжно, как логарифмы/степени). После этого надо сравнить поведение. Я не думаю, что что-то на слух изменится, но зато производительность заметно возрастет.
Эта инфа не давала покоя. Пять дней на размышления и решение пришло после погружения (в прямом смысле) под воду. ))
С учётом того что в пределах 6 дБ передаточная функция логарифма примерно равно выражению X/R то с чем мы столкнёмся если использовать именно её? В пределах 6 дБ всё будет схоже, но потом проявится "недожим"
Передаточная функция в линейной шкале. Сплошная линия - ратио в дБ, пунктир - в разах.

Передаточная функция в логарифмической шкале.
Зелёный - Ратио в логарифмах, синий в разах.

При использовании DDR1 я помню что на большИх GR он пережимал сигнал больше чем хотелось. Позже я решил этот вопрос использованием подмешиванием сухого сигнала. Так в этом графике добавим слайдер Mix (m)
здесь микс установлен уже на 90% (0.9). В целом передаточные функции условно сравнялись, но на сверх высоком GR поведение всё равно разное и если добавить ещё сухого сигнала, то тогда пострадает компрессия на малых GR.
А почему бы вообще тогда не отказаться от компрессия в логарифмической шкале в пользу линейной? Надо пробовать...
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
А почему бы вообще тогда не отказаться от компрессия в логарифмической шкале в пользу линейной?
Это позволит избавиться от степенной функции в сэмпэльной части.
В общем задачка оказалась вообще не из легких, но я её решил. А вот задачу с двухконтурным компрессором решить было ещё сложнее, но и её приговорил.
218680

218681

218682

Потребление ресурсов на 100 инстанций упало до 3.2% против 4.3 в предыдущей версии на i7-4700HQ
Напомню, DDR2 отъедал 11.6%
 
Последнее редактирование:

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
@Rst7, использовал выражение (Xrms-Treshold)/Ratio + Treshold
и столкнулся с проблемой - если Ratio выставить на 2:1, то GR максимально получается в 6 дБ. Если 4:1 - то 12, если 8 - то 18
Не знаю, хорошо это или плохо.
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
@Rst7, использовал выражение (Xrms-Treshold)/Ratio + Treshold
и столкнулся с проблемой - если Ratio выставить на 2:1, то GR максимально получается в 6 дБ. Если 4:1 - то 12, если 8 - то 18
Не знаю, хорошо это или плохо.
Версия без таблицы поправок:
218528
Применил линейной приближение, т.е. сделал 4 плеча через каждые 6 дБ (величина изменяемая) - получился значительно больший GR.
процедура min(a,b,c,d) наудивление подъедала много ресурсов. Заменил на древо инструкций по типу IF-THEN-ELSE. С ним потребление осталось на тех же 3.2% на 100 инстанций.
218716

Заметны ошибки приближения. Думаю, оставить как есть или дожать.
Ну и колено надо приделать.
Вообще конечно @Rst7 спасибо тебе за этюд и умственную разминку.
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
Вынес коэффициенты входного и выходного сигнала из область @Sample в область @slider.
Теперь потребление ресурсов 2.8 вместо 3.2 у предыдущей версии.
Сделал длину хорды приближения к степенной функции зависимой от Ratio, теперь форма передаточной функции стала похожа на C1.
Осталось решить вопрос с коленом.
Ну и скин
--
218738


Уже даже не знаю что можно оптимизировать что бы ещё сократить ресурсы )))
 

Vladimir_l00

New Member
31 Авг 2022
2
0
1
33
Добрый день! Скачал архив - подскажите как установить в рипер? Спасибо!
 

Vladimir_l00

New Member
31 Авг 2022
2
0
1
33
Подскажите как установить ddr compressor v2.41 - архив скачал а как установить в рипер не понимаю. Спасибо!
 

fakeitback

Super Moderator
Команда форума
6 Май 2005
14.453
15.338
113
42
Москва
Володь, чисто технический момент — на бусти теги есть или ссылки внутри поста? Выходит пост с обновлением и приходится возвращаться и мотать ленту вниз в поисках поста
 

Сейчас онлайн (Пользователей: 0, Гостей: 1)