ГОСТ Р 54713—2011
масштабный коэффициент используется для intensitystereo (см. раздел 7 и 10.2). В этом случае обычный
масштабный коэффициент не существует (но инициализируется в нуль, чтобы иметь определенное
значение в массиве).
Следующий псевдокод описывает декодирование масштабных коэффициентов sf[g][sfb]:
last_sf = global^gain;
for (g = 0: g <num_window_groups: g * * ) {
for (sfb = 0; sfb <max_sfb: sfb +♦,) {
if (sfb_cb [gj [sfb)! = ZERO_HCB && sfb_cb [g] [sfb)! - INTENSITY_HCB
&& sfb_cb [g] [sfb)! = INTENSITY_HCB2) {
dpcm_sf= decode_huffman () - index_offsetJ*CM. раздел 7V
sf [g] [sfb] = dpcm_sf + last_sf:
last_sf = sf [g] [sfb];
}
else {
sf [g] [sfb] = 0;
}
)
}
Следует учесть, что масштабные коэффициенты sf[g) [sfb). должны быть в пределах диапазона
0.. .255 включительно.
9.3.3 Использование масштабных коэффициентов
Спектральные коэффициенты всех полос масштабных коэффициентовдолжны повторно масштаби
роваться в соответствии с их масштабными коэффициентами. В случае последовательности окон, кото
рая состоит из группы коротких окон, все коэффициенты в сгруппированных полосах масштабных
коэффициентов окна должны масштабироваться с использованием того же самого масштабного коэффи
циента.
В случае window_sequences изодного окна полосы масштабных коэффициентов их соответствующие
коэффициенты расположены в порядке возрастания частоты. В случае EIGHT_SHORТ_SEQUENCEи груп
пировки спектральные коэффициенты сгруппированных коротких окон чередуются с полосами масштабных
коэффициентовокна.
Перемасштабирование выполняется согласно следующему псевдокоду:
for (g = 0: g <num_window_groups: g * * ) {
for (sfb = 0: sfb <max_sfb: sfb ++) {
width = (swb_offset [sfb+1] - swb_offset (sfb)):
for (win =0: win <window^groupjen (g); win +*) {;
win = got_scale_factor_gain (sf[g) [sfb]).
for (к = 0; к <width; к + +) {
x_roscal [g] [window][sfb] [k] = xjnvquant [g] [window] [sfb] [k] ’ gain:
}
}
}
}
Функция get_scale_factor_gain (sf[g)[sfb)) возвращает коэффициент усиления, который соответствует
масштабному коэффициенту. Возвращаемое значение получается из уравнения
gain =
2
°25■‘-’‘•"SF.
offs
e
t
).
Постоянная SF_OFFSETдолжна быть установлена равной 100.
Следующий псевдокодописывает эту операцию.
got_scale_factor_gain (sf[g] [sfb]) {
SF_OFFSET = 100;
gain = 2 Л(0.25 * (sf[g)[sfb]- SF_OFFSET));
retum(gain);
}
61