ГОСТ Р 54711—2011
На вход цикла Уровня IIIпоступают:
а) вектор амплитуд коэффициентов преобразования
хг(
0... 575):
б) xmyj(sb) — вектор допустимых уровней искажений в полосах масштабных коэффициентов:
xmin
=
ration{sb)
* ел
(sb)tbw{sb):
в)
window_Swrtcbing_flag
— вместе с
mixed_block_flag
и
block_type
определяет количество полос масштабных
коэффициентов;
г)
mean_bits
— (биты, доступные для кодирования методом Хаффмана икодирования масштабных коэффи
циентов):
д)
more_bits
— количество битов в дополнение к среднему числу битов, требуемых из психоакустической
энтропии для гранулы:
more_bits
= 3,1 * ре — среднее число битов.
На выходе цикла Уровня IIIимеются:
а) вектор квантованных значений
>х
(0... 575):
б)
scatefac_l{sb
) или
scalafac_s(sb)
в зависимости or
window_switcbing_flag. biock_type
и
mixed_block_flag;
в)
gtobal_gain
(информация о размере шага квантователя):
global_gain
=
qquant
+
system_constant;
system_conslant
включает все операции масштабирования кодера исмещение для достижения корректного
вывода процесса декодирования, описанного в основной части;
г) число неиспользованных битов, доступныхдля дальнейшего использования;
д)
preflag
(предкоррекция в циклах вкл/выкл);
е) информация о коде Хаффмана:
-
big_values
(число пар Хафмана. исключая «соил<7»);
-
count1table_select
(таблица значений кода Хаффмана, по модулю <= 1 в верхней части спектра);
-
tabie_select
(0... 2J (таблица областей кода Хаффмана);
-
regionO_count, region1_count
(используется для расчета границ между областями);
-
part2_3Jength.
В.1.5.4.2 Предварительные шаги
В.1.5.4.2.1 Сброс всех переменных цикла
Масштабные коэффициенты разделов sca/e/ac_/lsb] или sca/e/ac_stsb] обнуляются.
Счетчик
qquant
размера шага квантователя сбрасывается в ноль.
Preftag
сбрасывается в ноль.
Scalefacscaie
сбрасывается в ноль.
Начальное значение
quantanf
устанавливается следующим образом:
quantanf
= system_cor>s( *
In(sfm),
где
sfm
— мера пологости спектра, и
quantanf
зависит от программной реализации кодера.
Мера пологости спектра
sfm
sfm -
± n£ xr{i)2
n 1-0
Значение
system_consl
выбирается так. чтобы для всех сигналов первая итерация внутреннего цикла воз
вращала суммарное количество битов, превышающее требуемое. Этим обеспечивается получение после первого
внутреннего цикла результата, при котором используется столько доступных битов, сколько возможно. Для про
должительности вычисления желательно минимизировать число итераций путем адаптирования значения
quantanf
к
скорости передачи и сигнальной статистике.
В.1.5.4.2.2 Управление резервуаром битов
Если для кодирования одной гранулы требуется количество битов меньшее, чем
mean_bits.
то отставшиеся
биты сохраняются в резервуаре. Если биты сохраняются для фрейма, значение
main_data_end
соответственно
увеличивается (см. рисунок А.7а).
Количество битое, доступными для
main_data
(называемое
max_bits),
получается из фактической оценки
порога (ре на основе психоакустического расчета), среднего количества битое
{mean_bits)
и фактического содер
жимого резервуара. Число байтов в резервуаре указывается
main_data_end.
Правила для управления резервуаром битов:
- если количество байтов, доступных во внутреннем итеративном цикле, не используется для кодирования
методом Хаффмана или другим
main_data.
то оно добавляется к резервуару битов:
- если резервуар битое более чем на 80 % превышает максимальный допустимый объем резервуара, все
байты, превышающие этот обьем. делаются доступными для
main_data
(в дополнение к
mean_bits):
-
если
more_bits
больше чем 100 битов, то max(more_Ms/8, 0.6*ma/n_da/a_end) байтов берутся из резервуа
ра битов и делаются доступными для
main_data
(в дополнение к
mean_bHs):
-
после того как вычисления внутри циклов были завершены, число байтов, не используемых для
main_data,
добавляется к резервуару битов;
109