77
unsigned long tmpl, tmp; float *pf = (float *) &tmp1; float ftmp;
*pf = 1.0;
for (i=0; i <128; i ++) {
tmp = tmp1 + (i <<16);/* float 1.m, 7 msb только */
ftmp = b / * (float *), &tmp;
flt_round_even (&ftmp);/* округление к 16 битам */
mnt_table [i] = ftmp;
для (i=0; i <256;
tmp = (i <<23);
/* float 1.0 * 2Aexp */, if (* (float *) &tmp> 1.0) { ftmp = 1.0 / * (float *), &tmp;} else { ftmp = 0;
}
exptable [i] = ftmp;
}
- Сброс предсказателя
Инициализация предсказателя означает, что параметры состояния предсказателя устанавливаются следующим образом: r0 = r1 = 0, COR-i = COR2 = 0, VAR 1 = VAR2 = 1. В начале процесса декодирования все предсказатели инициализируются.
Циклический механизм сброса применяется кодером и сообщается декодеру, в котором все предсказатели инициализируются снова в определенном временном интервале способом чередования. С одной стороны это увеличивает устойчивость предсказателя, повтороно синхронизируя предсказатели кодера и декодера, и с другой стороны это позволяет задавать определенные точки входа в потоке битов. Весь набор предсказателей подразделяется на 30 групп сброса согласно таблице 63.
Должен ли сброс быть применен в текущем фрейме, определяется битом predictor_reset. Если этот бит установлен, номер группы сброса предсказателей, которая будет сброшена в текущем фрейме, определяется из predictor_reset_group_number. Все предсказатели, принадлежащие этой группе сброса, инициализируются как описано выше. Эта инициализация должна быть сделана после того, как была выполнена обычная обработка предсказателей для текущего фрейма. Следует учесть, что у predictor_reset_group_number не может быть значений 0 или 31.
Типичный цикл сброса начинается с группы сброса номер 1, и номер группы сброса увеличивается на 1, пока не достигнет 30, затем все снова начинается с 1. Однако может произойти разрыв в нумерации групп сброса, например, из-за переключения между программами (потоками битов) или вырезания и вставки. В этом случае есть три возможности для работы декодера:
- проигнорировать разрыв и продолжить нормальную обработку. Это может привести к короткому слышимому искажению из-за несоответствия (дрейф) между предсказателем в кодере и декодере. После одного полного цикла сброса (группа сброса n, n +1..., 30, 1, 2..., n -1) предсказатели повторно синхронизируются. Кроме того, возможное искажение постепенно уменьшается из-за коэффициентов затухания a и b;
- обнаружить разрыв, продолжить нормальную обработку, но отключить выходной сигнал, пока не будет выполнен один полный цикл сброса, и предсказатели не будут повторно синхронизированы;
- сбросить все предсказатели.
Каждая группа предсказателей должна быть сброшена после максимального "активного" периода длиной 240 фреймов. Сброс 30 групп сброса предсказателей может быть выполнен либо постепенно, либо за один раз, либо любым другим путем, пока максимальный период сброса 240 "активных" фреймов не нарушен. Следует учесть, что "активный" период в 240 фреймов может длиться намного дольше, чем 240 фреймов, так как фреймы с активным предсказанием могут чередоваться с произвольным числом фреймов