ГОСТ Р 54713—2011
start_common_scalefac = ceiling (16/3 ’ (log? ((max_mdcljine A(3/4))/MAX_QUANT)))
max_mdctjine является самым большим по абсолютому значению коэффициентом МДКП, а функция ceiling()
округляет аргумент до ближайшего целого в направлении положительной бесконечности. MAX_QUANT — макси
мальное квантованное значение, которое может быть закодировано в потоке битов, равное 8191. Во время
итеративного процесса common_scalefac не должен стать меньше, чем start_common_scalefac.
2 Scalefactor [sb] обнуляется для всех значений sb.
В.7.3 Управление резервуаром битов
Биты помещаются в резервуар, если для кодирования одного фрейма используется меньше, чем mean_bits.
mean_bits = bi!_rate * 1024 / sampling_rate.
Максимальное число битов, которые могут быть помещены в резервуар, называется max_bit_reservoir.
которое вычисляется, используя процедуру в 6.2.3. Если резервуар заполнен, неиспользованные биты должны
быть закодированы в потоке битов как Mbits. Максимальное количество битов, доступных для фрейма, является
суммой mean_bits и битов, сохраненных в резервуаре.
Число битов, которые должны использоваться для кодирования фрейма, зависит от значения more_bits,
которое вычисляется психоакустической моделью, и от максимального количества доступных битов. Самый про
стой способ управления резервуаром:
if more_bits> 0:
available_bits = mean_bits + min (more_bits, bit_reservoir_slate [frame]),
if more_bits <0:
available_bits = mean_bits + max (more_bits. bit_reservoir_state [frame]
- max_bit_reservoir)
B.7.4 Квантование коэффициентов МДКП
Формула для квантования в кодере является инверсией формулы деквантования в декодере (см. также
описание декодера):
x_quant = интервал <(abs (mdctjne) * (2 л(-] ’ (sf_decoder - SF_OFFSET)))) А(3/4) + MAGIC_NUMBER)
MAGIC_NUMBER равно 0.4054. SFOFFSET равно 100, a mdcljine — одно из спектральных значений
МДКП. Эти значения также вызывают «коэффициентами». Масштабный коэффициент sf_decoder является тем
же самым, что и sf[д] [sfb] в разделе 9.
Для использования в итеративных циклах масштабный коэффициент ’sf_decoder‘ разделяется на две
переменные:
sf^decoder = common_scalefac - scalefactor + SF_OFFSET
Это следует из формулы, используемой в цикле управления искажениями:
x_quant = int ((abs (mdcijtne) *
(2
Af-% * (scalefactor - common_scalefac)))) A(3/4) + MAGIC_NUMBER)
Знак масштабного коэффициента выбирается таким образом, чтобы положительное значение увеличива
ло величину x_quant и. таким образом, уменьшало искажения и увеличивало число используемых битое.
Знак mdcljine сохраняется отдельно и добавляется только для подсчета битов и кодирования потока
битов.
В.7.4.1 Внешний итеративный цикл (цикл управления искажениями)
Внешний итеративный цикл управляет шумами квантования, которые возникают в результате квантования
частотных линий в пределах внутреннего итеративного цикла. Окраска шума выполняется умножением линий в
пределах полос масштабных коэффициентов на значения масштабных коэффициентов перед квантованием.
Следующий псевдокод иллюстрирует умножение:
do for each scalefactor band sb:
do from lower index to upper index i of scalefactor band
mdct_scaled(i) = abs(mdct_line(i))f-(3/4) ‘2Л(3/16 ’ scalefactor(sb))
end
do end do
B.7.4.2 Вызов внутреннего итеративного цикла
Для каждого внешнего итеративного цикла (цикл управления искажениями) вызывается внутренний итера
тивный цикл (цикл управления уровнем). Параметрами являются масштабированные значения в частотной обла
сти (mdct_scaled (0 ... 1023)), начальное значение common_scalefac и число битое, которые доступны циклу
управления уровнем. Результатом является число используемых битов, квантованные частотные линии
x__quant (i) и новый common_scalefac.
Формула для вычисления квантованных коэффициентов МДКП:
x_quant (г) = int((mdct_scaled {/) * 2 А(-3/16 * common_scalef3C)) + MAGIC_NUMBER).
Число битов, необходимых для кодирования квантованных значений и служебной информации (масштаб
ные коэффициенты и т. д.) определяется согласно синтаксису потока битов, описанному в разделе 7.
139