75
мы с итеративным улучшением оценок, т. е. от отсчета к отсчету. Здесь используется метод наименьших квадратов (LMS) и коэффициенты предсказания вычисляются следующим образом:
с
CORm(n) = aCORJn-1) + r4im_i(n-1) ■ eq,m-l(n);
VARm(n) = a^VARm(n-1) + 0,5 ■ (m-( - 1) + e2,m-1 (n)) 1
где a — время адаптации, постоянная, которая определяет влияние текущего отсчета на оценку математического ожидания, a = 0,90625.
Оптимальные значения коэффициентов затухания а и b должны быть определены из-за компромисса между высоким усилением предсказания и быстрым временем спада. Выбранные значения а = b = 0,953125 независимо от того, выключено ли предсказание вообще или только для определенной полосы масштабных коэффициентов, или, все предсказатели вычисляются постоянно, для постоянной адаптации коэффициентов к текущей сигнальной статистике.
Если window_sequence имеет типы ONLY_LONG_SEQUENCE, LONG_START_SEQUENCE и LONG_STOP_SEQUENCE, отличается только вычисление восстановленного значения квантованных спектральных компонентов в зависимости от значения бита prediction_used:
если бит установлен в (1), то квантованная ошибка предсказания, восстановленная по переданным данным, прибавляется к оценке xest (n) вычисленной предсказателем, образуя восстановленное значение квантованного спектрального компонента, т. е. xrec (n) = xest (n) + eq (n);
если бит не установлен в (0), то квантованное значение спектрального компонента восстанавливается непосредственно по переданным данным.
В случае коротких блоков, т. е. windowsequence имеет тип EIGHT_SHORT_SEQUENCE, предсказание всегда отключается, и выполняется сброс всех предсказателей во всех полосах масштабных коэффициентов, который э квивалентен инициализации (см. 11.3.2.4). Для single_channel_element () обработка предсказателя для одного фрейма выполняется согласно следующему псевдокоду:
(Предполагается, что восстановленное значение y_rec (c), которое является либо восстановленной квантованной ошибкой предсказания, либо восстановленным квантованным спектральным коэффициентом, доступно из предыдущей обработки.)
if (ONLY_LONG_SEQUENCE | | LONG_START_SEQUENCE | |
LONG_STOP_SEQUENCE) {
for (sfb = 0; sfb <PRED_SFB_MAX; sfb ++) {
fc = swb_offset_long_window [fs_index] [sfb];
Ic = swb_offset_long_window [fs_index] [sfb+1]; for (c = fc; c <lc; c ++) {
x_est [c] = predict();
if (predictor_data_present && prediction_used [sfb]) x rec [c] = x_est [c] + y_rec [c];
else x rec [c] = y_rec [c];
}
else {
reset_aII_predictors().
В случае channel_pair_element () c common_window = 1 единственное отличие заключается в том, что вычисление x_est и x rec во внутренней петле цикла выполняется для обоих каналов, связанных с channel_pair_element (). В случае channel_pair_element () с common_window = 0 у каждого канала есть предсказание в соответствии с канальной служебной информацией предсказания.
- Квантование при вычислении предсказания
Для заданного предсказателя должны быть сохранены шесть параметров состояния: r0, u, COR1, COR2, VAR1 и VAR2. Эти переменные хранятся как округленные IEEE-числа с плавающей запятой (т. е. 16 старших разрядов слова).