66
масштабный коэффициент не существует (но инициализируется в нуль, чтобы иметь определенное значение в массиве).
Следующий псевдокод описывает декодирование масштабных коэффициентов sf [g] [sfb]: last_sf = globalgain;
for (g = 0; g <num_window_groups; g + +) { for (sfb = 0; sfb <max_sfb; sfb ++) {
if (sfb_cb [g] [sfb]! = ZEROHCB && sfb_cb [g] [sfb]! = INTENSITY_HCB
&& sfb_cb [g] [sfb]! = INTENSITYHCB2) {
dpcm_sf = decode_huffman () - index_offset;/*CM. раздел 7*/
sf [g] [sfb] = dpcm_sf + last_sf;
last_sf = sf [g] [sfb];
}
else {
sf [g] [sfb] = 0;
}
}
}
Следует учесть, что масштабные коэффициенты sf[g] [sfb], должны быть в пределах диапазона 0.. .255 включительно.
- Использование масштабных коэффициентов
Спектральные коэффициенты всех полос масштабных коэффициентов должны повторно масштабироваться в соответствии с их масштабными коэффициентами. В случае последовательности окон, которая состоит из группы коротких окон, все коэффициенты в сгруппированных полосах масштабных коэффициентов окна должны масштабироваться с использованием того же самого масштабного коэффициента.
В случае window_sequences из одного окна полосы масштабных коэффициентов их соответствующие коэффициенты расположены в порядке возрастания частоты. В случае EIGHT_SHORT_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_group_len [g]; win ++) {; win = get_scale_factor_gain (sf [g] [sfb]); for (k = 0; k <width; k + +) {
x rescal [g] [window] [sfb] [k] = x invquant [g] [window] [sfb] [k] * gain;
}
}
}
}
Функция get_scale_factor_gain (sf [g][sfb]) возвращает коэффициент усиления, который соответствует масштабному коэффициенту. Возвращаемое значение получается из уравнения
gain = 2°25'(sf \g][s/b]-SF_OFFSET).
Постоянная SF_OFFSET должна быть установлена равной 100.
Следующий псевдокод описывает эту операцию: get_scale_factor_gain (sf [g] [sfb]) {
SF_OFFSET = 100;
gain = 2 Л (0.25 * (sf [g] [sfb] - SF_OFFSET)); return(gain);
}