ГОСТ Р 53556.4—2013
Так как полосы масштабного коэффициента и полосы кодирования являются основным элементом
алгоритма кодирования BSACf необходимы некоторые вспомогательные переменные и массивы, чтобы
описать процесс декодирования во всех инструментах, используя полосы масштабного коэффициента и
полосы кодирования. Эти переменные справки должны быть определены для декодирования BSAC. Эти
вспомогательные переменные зависят от samplingjrequency, window_sequence. scalefactor_grouping и
max_sfb и должны быть созданы для каждого bsac_raw_data_block. Псевдокод, показанный ниже, описы
вает:
- как определитьчисло окон num_windows в последовательности window_sequence:
- какопределить число групп num_window_groups в window_groups:
- как определить число окон в каждой группе window_group_length[д]:
- какопределитьобщее количество полосокна масштабного коэффициента num_swbдляфактическо
го типа окна;
- как определить swb_offset [г] [swb]. смещение первого коэффициента в полосе окна масштабного
коэффициента swb фактически используемого окна.
Длинное окно преобразования всегдаописывается как window_group. содержащее единственноеокно.
Поскольку число полос масштабного коэффицента и их ширина зависят от частоты дискретизации, пере
менные. на которые это влияет, индексируются с помощью sampling_frequencyjndex, чтобы выбрать соот
ветствующую таблицу.
fsjndex =samplingjrequencyJndex:
switch (window_sequence) {
case ONLY_LONG_SEQUENCE:
case LONG_START_SEQUENCE.
case LONG_STOP_SEQUENCE:
numjwmdows- 1:
num_window_groups = 1;
window_group_length[num_window_groupsAJ= 1.
num_swb - num_swb_k>rtg_window[fsJndex];
for (sfb = 0; sfb < max_sfb*1: sfb**) {
swb_offsotlO][sfb] = swb_offset_k>ng_window[fsjndex][sfb]:
}
break;
case EIGHT_SHORT_SEQUENCE.
num_windows =8:
num_window_groups =1;
window_group_length(num_witidow_groups-’\]= 1,
num_swb =num_swb_short_window[fsjndex];
for(i = 0; i < num_windows-1: f++) {
if (bit_sot(scale_factor_grouping.6 -i)) == 0 ) {
num_window_groups ♦= 1;
windov/_group_k)ngth[num_window_groups-1) = 1,
} else
{
window_group_length(num_wmdow_groupsA} += 1;
}
}
for (g =0. g <num_window^groups:
swb_offset[g][0] = 0;
for (sfb = 0; sfb < max_sfb+1: sfb**) {
for(g =0:g<num_window_grovps;g**) {
swb_offset[g][sfb] = swb_offset_short_window[fsjndex][sfb]:
swb_offset[g][sfb) = swb_offset[g)[sfb] * window_groupjongth[g);
}
}
break;
default:
break:
)
82