ГОСТ Р 54713—2011
В.7.4.3Аттенюация полос масштабных коэффициентов,которые нарушают порог маскирования
Вычисление искажений (еггог_епегду (sb)) в полосе масштабных коэффициентов выполняется следующим
образом:
Do for each scalefactor sb:
error_energy (сурьма) =0
Do from Iry/rer index to upper index i of scalefactor band
error_energy (sb) = error_energy (sb) + (abs (mdct_line (i))
- (x_quant (i) Л(4/3) ’ 2 A(j * (scalefactor (sb)-comman_scalefac)))) л2
end do
end do
Все спектральные значения полос масштабных коэффициентов, у которых есть искажение, превышающее
дозволенное искажение (xmin (sb)), ослабляются согласно формуле в В.7.4.1, новые масштабные коэффици
енты могут быть вычислены согласно этому псевдокоду:
Do for each scalefactor band sb
if (error_energy (sb)> xmin (sb)) then
scalefactor (sb) = scalefactor (sb) - 1
end if
end do.
B.7.4.4 Условия завершения обработки циклов
Обычно обработка циклов завершается, если отсутствуют полосы масштабных коэффициентов с искажени
ями, превышающими дозволенные значения. Однако это не всегда возможно. В этом случав есть другие условия
завершения внешнего цикла. Если:
- все полосы с энергией, превышающей xmin (sb). уже ослаблены, или
- различив между двумя соседними масштабными коэффициентами больше, чем 60.
Обработка цикла прекращается, и восстановленные сохраненные scalefactors(sb) поступают на выход.
Для реализации в реальном времени возможно третье условие, которое завершает цикл в случав нехватки
вычислительного времени.
Процедура, описанная выше, допустима только в том случае, когда число доступных битов равно числу
необходимых битов, соответствующих перцепционной энтропии. В случае, когда число доступных битов больше
или меньше, чем число необходимых битов, целью модуля циклов становится создание постоянного отношения
шумов квантования к порогу маскирования во всех полосах масштабных коэффициентов (постоянное отношение
шум-маска (NMR)). Это может быть реализовано за счет применения смещения к дозволенному искажению
xmin (sb). которое является одинаковым для всех полос масштабных коэффициентов до запуска модуля циклов.
В.7.4.5 Внутренний итеративный цикл (цикл управления уровнем)
Во внутреннем итеративном цикле вычисляется фактическое квантование данных частотной области
(mdct_scaled) по следующей функции, которая использует формулу из В.7.4.2:
quantize_spectrum (x_quant [] . mdct_scaled [] , common_scalefac):
do (oralt MDCTcoefficients i :
x_quant(i) = int ((mdct_scaled (i) * 2A(-3/16 * common_scalefac))
+ MAGIC_NUMBER)
end do
и затем вызывается функция bH_count Q. Эта функция подсчитывает число битов, требуемых для кодирования
фрейма потока битов согласно разделу 6.
Внутренний итеративный цикл может быть реализован на основе последовательного приближения:
innerjoopf):
if (outer_loop_count == 0)
common_scalefac = start_common_scalefac:
quantizer_change = 32;
else
quantizer_change = 1;
end if
do
quantize_spectrum Q;
counled_bits = bit_count():
if (counted_bits > available_bits) then
common_scalefac = common_scalefac + quant izer_change:
else
common_scalefac = common_scale(ac - quantizer_change;
end if
quantizer_change = int (quantizer_change /2):
140