ГОСТ Р 53556.4—2013
5.2.6.2.5 Уровень мелкоструктурной масштабируемости BSAC
BSACобеспечивает мелкоструктурную масштабируемость, которая имеет многоуровневый потокби
тов, один базовый уровень BSAC и различные уровни расширения. Базовый уровень BSAC составляется
изобщейдополнительной информации для всех мелкоструктурных уровней, специальной дополнительной
информации только для базового уровня и аудиоданных. Уровни расширения BSAC содержат дополни
тельную информацию уровня и аудиоданные.
Масштабируемая схема кодирования BSAC имеет масштабируемый предел полосы согласно мелко
структурному уровню. Прежде всего устанавливается базовый предел полосы. Базовый предел полосы
зависит от сигнала, который будет закодирован, и находится в элементе синтаксиса base_band. Фактичес ки
ограниченной линией спектра является 4‘base_band. если последовательность окон является SHORT_
WINDOW. Иначе ограниченной линией спектра будет 32"baseband. Чтобы обеспечить мелкоструктурную
масштабируемость, BSAC расширяет предел полосы согласно мелкоструктурному уровню. Предел поло сы
каждого уровня зависит от базового предела полосы, длин преобразования 1024 (960) и 128 (120) и
частоты дискретизации. Полоса спектра расширяется все больше и больше, поскольку число уровней
расширения увеличивается. Так, к каждому уровню добавляются новые спектральные компоненты.
Чтобы описать разрядно-модульный процессдекодированиядополнительной информации и спект
ральных данных в каждом мелкоструктурном уровне, BSAC необходимы некоторые вспомогательные пе
ременные и массивы. Эти вспомогательные переменные зависят от samplingJrequency. уровня, nch.
frameJength. top_layer. wMow_sequence и max_sfb и должны быть созданыдля каждого bsac_layer_element.
Псевдокод, показанный ниже, описывает:
- как определить slayer_size. число подуровней, на которых разделяется базовый уровень:
slayer_size = 0;
for(д =0. д < num_window_groups; д**) {
if(windowsequence ==EIGHT_SHORT_SEQUENCE) {
end_indox[g] =base_band *4 *window_group_longth[g).
if (fs == 44100 || fs == 48000J (if(endjndex(g]% 32>^6)
endjndexfg] - (int)(endJndexlg}/32)*32 +20;
else if (endJndex[g]%032 >=4)
endjndex[g] = (int)(endjndex[gy32)*32 +8.
else if (fs == 22050 || fs == 24000 || fs == 32000;
endjndexfg] = (int)(endjndex]gy16;*16;
else if (fs == 11025 || fs == 12000 || fs == 16000;
endjndexfg] = (int)(endJndex[g]/32)*32; else endjndex(g) = (int)(endjndex[gp64}*64. end_cband[g] =
(endjndex[g] * 3 i;/3 2 ;
;
else
end_cband[g] = base_band:
slayer_sizo ♦= end_cband[g]:
};
- как определить layer_group []. групповой индекс спектральных компонентов, которые будут вновь
добавлены в уровень масштабируемости:
layer = 0
for (д =0. д <num_window_groups: д*+)
for (cband =
1
;
cband <= end_cband[g]: layer**, cband**)
layer_grouppayer]=g:
layer = slayer_size;
for (g =0; g <num_window_groups: g*+)
for(w =0. w < window_groupJengthfg]: w**)
layer_group[layer**]= g;
for (layer=slayer_size*8; layer <(topJayer*slayer_size); layer**)
layer_groupflayer] =layer_grouppayer-8]:
- как определить layer_eiidjndex []. конечное смещение спектральных компонентов, которые будут
вновь добавлены в каждом уровне масштабируемости;
- какопределить layer_end_cband[]. конечную полосу кодирования, которая будет вновь добавлена в
каждом уровне масштабируемости;
8 3