Немножко можно. Я задался вопросом: "Как регулировать громкость в цифре с минимальными потерями в качестве сигнала?
Изменение громкости - логарифмическая величина. Логарифмы чаще всего не укладываются в натуральный ряд чисел.
Проще всего изменить громкость на 6 дБ. То есть, уменьшить в два раза. В двоичной системе это можно сделать, сдвинув число на один разряд вправо.
Изменить на 1 дБ труднее, но можно изменить число не точно на 1 дб, а на величину, близкую к нему, чтобы это число было равно сумме частных слагаемых - входному числу, сдвинутому на один или несколько разрядов.
Например, -1дБ примерно равно 0,890625. Это равно 1/2 + 1/4 + 1/8 + 1/64 от входного числа. Сдвигая и складывая входной отсчёт сам с собой, я получаю логарифмическую шкалу громкости с точностью 0,02 дБ. При этом я не использую операцию умножения на дробное иррациональное число.
Выходной сигнал увеличивается в разрядности с 16 до 24 бит, чтобы избежать ошибки округления.
В общих чертах так.
на самом деле выходной сигнал у тебя плавающей разрядности получается и все равно есть ошибки округления (но не всегда):
Например, -1дБ примерно равно 0,890625. Это равно 1/2 + 1/4 + 1/8 + 1/64 от входного числа. - Вот сразу и добавили 6 бит. Итого 16+6=22
А, к примеру, -19 дБ по такому методу - это уже добавка 9 бит. (3 сдвига вправо + 6 бит) Итого 16+9=25
Так что если вдуматься надо округлять до 24 и добавлять генератор дитеринга... Я сделал вывод из того что ты написал, но возможно что-то не договорил

В дизайне Агеева, что у меня на плате алу 32 битное, округление в зависимости от переключателя на платке 16 или 24 бит с дитерингом.
MB GLS 350D штатка + адаптер MOST150-to-Toslink (NAV-TV ZEN-M) + CarDSP Hybrid 5X10 MK2
ВЧ: BlieSMa T25S, СЧ: ETON 3-400/A8/25 MG, НЧ: 2х22W/4534G00, "sub": 2х22W/4534G00