146
мальное квантованное значение, которое может быть закодировано в потоке битов, равное 8191. Во время итеративного процесса common_scalefac не должен стать меньше, чем start_common_scalefac.
- Scalefactor [sb] обнуляется для всех значений sb.
В.7.3 Управление резервуаром битов
Биты помещаются в резервуар, если для кодирования одного фрейма используется меньше, чем mean_bits. mean_bits = bit_rate * 1024 / sampling_rate.
Максимальное число битов, которые могут быть помещены в резервуар, называется max_bit_reservoir, которое вычисляется, используя процедуру в 6.2.3. Если резервуар заполнен, неиспользованные биты должны быть закодированы в потоке битов как fillbits. Максимальное количество битов, доступных для фрейма, является суммой mean_bits и битов, сохраненных в резервуаре.
Число битов, которые должны использоваться для кодирования фрейма, зависит от значения more_bits, которое вычисляется психоакустической моделью, и от максимального количества доступных битов. Самый простой способ управления резервуаром: if more_bits> 0:
available_bits = mean_bits + min (more_bits, bit_reservoir_state [frame]), if more_bits <0:
available_bits = mean_bits + max (more_bits, bit_reservoir_state [frame]
- max_bit_reservoir)
В.7.4 Квантование коэффициентов МДКП
Формула для квантования в кодере является инверсией формулы деквантования в декодере (см. также описание декодера):
x_quant = интервал ((abs (mdct_line) * (2 л (- * (sf_decoder - SF_OFFSET)))) л (3/4) + MAGIC_NUMBER) MAGIC NUMBER равно 0.4054, SF_OFFSET равно 100, а mdct_line — одно из спектральных значений МДКП. Эти значения также вызывают «коэффициентами». Масштабный коэффициент sf_decoder является тем же самым, что и sf [g] [sfb] в разделе 9.
Для использования в итеративных циклах масштабный коэффициент 'sf_decoder' разделяется на две переменные:
sf_decoder = common_scalefac - scalefactor + SF_OFFSET
Это следует из формулы, используемой в цикле управления искажениями:
x_quant = int ((abs (mdct_line) * (2 л (-1/4 * (scalefactor - common_scalefac)))) л (3/4) + MAGIC_NUMBER)
Знак масштабного коэффициента выбирается таким образом, чтобы положительное значение увеличивало величину x_quant и, таким образом, уменьшало искажения и увеличивало число используемых битов.
Знак mdct_line сохраняется отдельно и добавляется только для подсчета битов и кодирования потока
битов.
В.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))л(3/4) *2л(3/16 * scalefactor(sb)) end
do end do
В.7.4.2 Вызов внутреннего итеративного цикла
Для каждого внешнего итеративного цикла (цикл управления искажениями) вызывается внутренний итеративный цикл (цикл управления уровнем). Параметрами являются масштабированные значения в частотной области (mdct_scaled (0 ... 1023)), начальное значение common_scalefac и число битов, которые доступны циклу управления уровнем. Результатом является число используемых битов, квантованные частотные линии x_quant (i) и новый common_scalefac.
Формула для вычисления квантованных коэффициентов МДКП:
x_quant (i) = int((mdct_scaled (i) * 2 л (-3/16 * common_scalefac)) + MAGIC_NUMBER).
Число битов, необходимых для кодирования квантованных значений и служебной информации (масштабные коэффициенты и т. д.) определяется согласно синтаксису потока битов, описанному в разделе 7.
В.7.4.3 Аттенюация п олос масштабных коэффициентов, которые нарушают порог маскирования
Вычисление искажений (error_energy (sb)) в полосе масштабных коэффициентов выполняется следующим образом:
Do for each scalefactor sb: error_energy (сурьма) =0
Do from lower index to upper index i of scalefactor band error_energy (sb) = error_energy (sb) + (abs (mdct_line (i))
- (x_quant (i) л (4/3) * 2 л (j * (scalefactor (sb)-common_scalefac)))) A2 end do
end do
Все спектральные значения полос масштабных коэффициентов, у которых есть искажение, превышающее дозволенное искажение (xmin (sb)), ослабляются согласно формуле в В.7.4.1, новые