ГОСТ Р 54712―2011
70
- вычисление масштабных коэффициентов;
- вычисление SCFSI;
- квантование субполосных отсчетов;
- форматирование потока битов;
}
Следующее описание в стиле языка C является простым примером вычисления предсказания для случая,
когда каналы передачи T2, T3, T4 содержат C, LS и RS соответственно. Динамическое распределение каналов
не применяется, используется только предсказание нулевого порядка без компенсации задержки. Процедура воз-
вращает коэффициенты coe
f
_0, coe
f
_1, coe
f
_2, coe
f
_3 и соответствующую информацию о выборе предсказателя
predsi [0.. 3].
В данном примере sq
r
() соответствует операции возведения в степень 2, а sqr
t
() соответствует операции
извлечения квадратного корня.
Значения coef_0..coef_3:
pred_coef_C0 = coef_0;
pred_coef_C1 = coef_1;
pred_coef_LS = coef_2;
pred_coef_RS = coef_3.
В других случаях процедура аналогична:
for (sbgr=0; sbgr<12; sbgr++){
/* расчет дисперсий и функций корреляции с помощью кратковременных оценок/
st1 = st2 = sc = sls = srs = 0; ct1c = ct2c = ct1t2 = ct1ls = ct2rs = 0;
numsb=((sbgr==11)?sblimit:sbgr_min[sbgr+1]) — sbgr_min[sbgr];
for (sb=sbgr_min[sbgr]; sb<sbgr_min[sbgr]+numsb; sb++)
for (gr=0; gr<3; gr++)
for (i=0; i<12; i++){
st1 += sqr(sb_sample[0][gr][i][sb]);
st2 += sqr(sb_sample[1][gr][i][sb]);
sc += sqr(sb_sample[2][gr][i][sb]);
sls += sqr(sb_sample[3][gr][i][sb]);
srs += sqr(sb_sample[4][gr][i][sb]);
ct1c+= sb_sample[0][gr][i][sb]*sb_sample[2][gr][i][sb];
ct2c+= sb_sample[1][gr][i][sb] * sb_sample[2][gr][i][sb];
ct1t2+= sb_sample[0][gr][i][sb] * sb_sample[1][gr][i][sb];
ct1ls+=sb_sample[0][gr][i][sb] * sb_sample[3][gr][i][sb];
ct2rs+=sb_sample[1][gr][i][sb] * sb_sample[4][gr][i][sb];
}
st1 = sqrt (st1/(3*12*numsb));
st2 = sqrt (st2/(3*12*numsb));
sc= sqrt (sc/(3*12*numsb));
sls = sqrt (sls/(3*12*numsb)); srs = sqrt (srs/(3*12*numsb));
st1 = (st1>MIN_S)?st1:MIN_S;
/* во избежание деления на 0/
st2 = (st2>MIN_S)?st2:MIN_S;
sc = (sc>MIN_S)?sc:MIN_S;
sls = (sls>MIN_S)?sls:MIN_S;
srs = (srs>MIN_S)?srs:MIN_S;
ct1c = ct1c / (st1*sc);
ct2c = ct2c / (st2*sc);
ct1t2 = ct1t2 / (st1*st2);
ct1ls = ct1ls / (st1*sls);
ct2rs = ct2rs / (st2*srs);
/* расчет коэффициентов предсказания/
coef_0 = sc / st1 * ct1c;
coef_1 = sc / st2 * ct2c;
coef_x0 = sc / st1 * (ct1c – ct2c*ct1t2) / (1– sqr(ct1t2));
coef_x1 = sc / st2 * (ct2c – ct1c*ct1t2) / (1– sqr(ct1t2));
coef_2 = sls / st1 * ct1ls;
coef_3 = srs / st2 * ct2rs;
/* расчет уровней усиления/
/* проблема: если sbоr состоит более чем из одной субполосы/
/* усиление в субполосах может различаться!!!/