ГОСТ Р 53556.4—2013
escape_sequence 1000000 как 32. а 1011111 как 63. и так далее. Для кодовых комбинаций Хаффмана escape
упорядочивание элементов данных является кодовой комбинацией Хаффмана, сопровождаемой от 0 до 2
знаковыми битами и от0 до 2 escape-последовательностей.
Когда pulse_data_present равен 1 (импульсный escape используется), один или несколько квантован
ных коэффициентов были замененны в кодере коэффициентами с меньшими амплитудами. Число заменен
ных коэффициентов указывает number_pulse. В восстановлении квантованных спектральных коэффициен
тов x_quantэта замена компенсируется добавлением pulse_amp или вычитаем pulse_amp из ранее опреде
ленных коэффициентов, индексы частоты которых указываются pulse_start_sfb и pulse_offset. Импульсный
метод escape недопустим для блока. window_sequence которого является EIGHT_SHORT_SEQUENCE. Про
цесс декодирования определяется в следующем псевдокоде С:
if (pulse_data_present) {
9 = 0; “
win = 0.
к = swb_offset[pulse_start_sfb]:
for (I = 0:j< number_pulse*1;j++) {
к = pu!se_offsetfjJ:
/* translaie_pulse_parameters(); 7
for (sfb = pulse_start_sfb; sfb<num_swb:sfb++) {
if (k < swb_offset[sfb+‘\]) {
bin = к - swb_offset[sfb];
break:
}
}
/* restore coefficients 7
if (x_quant[g][win)[sfb][bin) > 0 )
x_quant[g)[win][sfb][bin] ♦= pulse_amp[jj:
else
x_quant[g][win][sfb)[bin] -= pulse_amp[j].
}
}
Несколько инструментов декодера (TNS. filterbank) получаютдоступ к спектральным коэффициентам
нечередующимся способом, то есть все спектральные коэффициенты упорядочиваются согласно номеру
окна и частоте в пределах окна. Это указывается путем использования нотации specfw][к], а не x_quant[g]
[w] [sfb] [bin].
Следующий псевдокод С указывает на соответствие между четырехмерной иличередующейся струк
турой массива x_quant [Ш И П * двумерной или без чередования структурой spec[][] массива. В послед
нем массиве первый индекс постепенно увеличивается по отдельным окнам в последовательности окон, и
второй индекс увеличивается по спектральным коэффициентам, которые соответствуют каждому окну, где
коэффициенты линейно проходят от низкойдо высокой частоты.
quant_to_spec() {
к = 0;
for (д = 0:д < num_window_groups: д*+) {
j - 0;
for (sfb = 0; sfb < num_swb; sfb ++) {
width = swb_offset[sfb-И/ - swb_offset[sfb).
for(win =0; win < window_group_length[g]: win+♦) {
for (bin=0; bin < width: bin++) {
spec[win*k][bin+j] = x_quant[g][win][sfb)[bin];
}
}
j+-width:
}
k+=window_group_length[gj:
}
}
127