ГОСТР 54713—2011
static void make_inv_tables (void)
{
int i;
unsigned long tmp1. tmp:
float "pf = (float ") &tmp1;
float ftmp:
"pf = 1.0:
for (i=0: i <128: i ++) {
tmp = tmpl * (i «16):/" float 1.m, 7 msb только *f
ftmp = b / " (float *). &tmp:
flt_round_even (&ftmp)/" округление к 16 битам7
m ntjable p] = ftmp:
для (i=0: i <256:
tmp = (i «23);
Г float 1.0 * 2*exp V. iff* (float") &tmp> 1.0) {
ftmp = 1 .0 /’ (float’). &tmp:} else {
ftmp = 0;
}
exp table p] = ftmp:
}
11.3.3 Сброс предсказателя
Инициализация предсказателя означает, что параметры состояния предсказателя устанавливаются
следующим образом: га= г, = 0. COR, = COR2= 0, VAR, = VAR2= 1. В начале процесса декодирования всо
предсказатели инициализируются.
Циклический механизм сброса применяется кодером и сообщается декодеру, в котором все пред
сказатели инициализируются снова вопределенном временном интервале способом чередования. С од
ной стороны это увеличивает устойчивость предсказателя, повтороно синхронизируя предсказатели коде ра
и декодера, и с другой стороны это позволяет задавать определенные точки входа в потоке битов.
Весь набор предсказателей подразделяется на 30 групп сброса согласно таблице 63.
Т а б л и ц а 63 — Группы сброса предсказателей
Номер группы сброса
Предсказатели группы сброса
1
2
3
РО. РЗО. Р60. Р90...
Р1. Р31. Р61.Р91...
Р2. Р32. Р62. Р92...
30
Р29. Р59, Р89. Р119...
Должен ли сброс быть применен в текущем фрейме, определяется битом predictor_resot. Если этот
бит установлен, номер группы сброса предсказателей, которая будет сброшена в текущем фрейме, опре
деляется изpredictor_reset_group_number. Все предсказатели, принадлежащие этой группе сброса, иници
ализируются как описано выше. Эта инициализация должна быть сделана послетого, какбыла выполнена
обычная обработка предсказателейдлятекущегофрейма.Следует учесть, что уpredictor_reset_group_number
не может быть значений 0 или 31.
Типичный цикл сброса начинается с группы сброса номер 1. и номер группы сброса увеличивается
на 1. пока не достигнет 30. затем все снова начинается с 1. Однако может произойти разрыв в нумерации
групп сброса, например, из-за переключения между программами (потоками битов) или вырезания и встав
ки. В этом случае есть три возможности для работы декодера:
- проигнорировать разрыв и продолжить нормальную обработку. Это может привести к короткому
слышимому искажению из-за несоответствия (дрейф) между предсказателем в кодере и декодере. После
одного полного цикла сброса (группа сброса л, л +1.... 30. 1. 2..., л -1) предсказатели повторно
синхронизируются. Кроме того, возможное искажение постепенно уменьшается из-за коэффициентов зату
хания а и />;
72