ГОСТ Р 53556.4—2013
if(bT!= EIGHT SHORT_WINDOW){
bottom =NUM_QMF_SUBSAMPLES*(int)(bottonVNUM_QMF_SUBSAMPLES):
top =NUM_QMF_SUBSAMPLES‘(int)(top/NUM_QMF_SUBSAMPLES):
}
else{
bottom = (int)(NUM_QMF_SUBSAMPLESA’(int)(bottom’8MUM_QMF_SUBSAMPLES));
top = (int)(NUM_QMF_SUBSAMPLESfa’(int)(top‘8/NUM_QMF SUBSAMPLES)):
}
Г Apply gain factor 7
/* for (i = bottom: i < top: /*+)
spec[i] *= factor:
7
if(bT != EIGHT_SHORT_WINDOW){Г bt indicates the AAC window sequence for the current frame. 7
bottomQMF = bottom*32/FRAME_SIZE;
for0 = -NUM_QMF_SUBSAMPLES_2:j < NUMQMFSUBSAMPLES;j++){
alphaValue =0;
if(j+NUM_QMF_SUBSAMPLES_2 <NUM_QMF_SUBSAMPLES){
if(p->drc_interp_scheme == 0){
к = 1.Of/((float) NUM_QMF SUBSAMPLES):
alphaValue = (j+NUM_QMF_SUBSAMPLES_2)‘k;
}
else{
if(j+NUM_QMF_SUBSAMPLES_2 >= offsot[p->drc_interp_scheme -1))
alphaValue = 1;
}
}
else
alphaValue = 1;
for (i = bottomQMF: i < 64 ; i++) {
factorQMF[NUM_QMF_SUBSAMPLES +j ]fi] = alphaValue’factor ♦
(1 - alphaValue)"previousFactors{i];
}
}
}
else{
Г - StartSample и stopSample указывают на границы в подвыборках QMFдля текущих данных DRC.
Они получаются первым удалением всей целочисленной сети магазинов короткой длины окна. Всегда есть
32 аналитических поддиапазона QMFдля входного типа телосложения FRAME_SIZE. число подвыборок
QMF является FRAME_SIZEf32 (NUM_QMF_SUBSAMPLES) для каждого фрейма. Следовательно число
подвыборок QMF для короткого окна (NUM_QMF_SUBSAMPLES)IS. bottomQMF вычисляется от остатка,
когда целочисленная сеть магазинов короткой длины окна была удалена. Этот индекс в строке МОСТото
бражается на соответствующий поддиапазон в QMF, умножаясь на 32J(FRAME_SIZEi8). Если границы
между двумя короткими окнами пересекаются, то есть StartSample располагается в коротком окне л-1, и
stopSample располагается в коротком окне л. bottotnQMFдолжен быть обнулен, когда граница между фрей
мами пересекается.
Г
/* StartSample is truncated to the corresponding start subsample in the
QMF of the short window bottom is presentin.7
StartSample =floor((float)
bottom/(FRAME_SIZEfe.Ot)) ’(NUM_QMF_SUBSAMPLES)!8;
/* stopSample is rounded upwards to the nearest corresponding stop subsample in the QMF of the short
window top is presentin.7
stopSample = ceil((float) top/(FRAME_SIZEIW)y(NUM_QMF_SUBSAMPLES)i8:
bottomQMF = (bottom%>(FRAME_SIZEI8))*32/(FRAME_SIZEI8);
94