ГОСТ Р 53556.11—2014
Продолжение
Псевдокод
Коммеигарии
/лг7Б4 •‘Р.-
т э г ‘but. V;
/ЛГП6 vs;
]v vs] =MulMtxVec(P buf):
P является RLSалгоритма матрицы P (формат .60)
buf являетсявходным вектором прогнозирующего устройства
RLS(формат .0)
vявляется векторомалгоритма RLSv
vsявляется масштабным коэффициентом
v = P‘buf
vимеетформат .(2S-vs)
dsявляется масштабным коэффициентом
temp=buf* v
tempимеет формат .(BO-vs-ds)
tempимеет формат .(60-г)
INTBA temp:
INT16ds:
[temp, ds] =MulVecVec(buf. v);
i =0:
while(Iemp>0x20000000 &&temp!=0)
temp » = 1;/++;
/ += vs+ds:
if (/<=60)
temp +=(((INTBA) 1) « @0-Q):
elsereinit_P(P):
Если (/<=60). то temp = temp+ 1
иначе переинициализация матрицы Р
т— этоалгоритмRLSпеременной т
1
Если (temp==0).то т = 1; иначе т= 1Петр:
INTBAmm:
INT32 m:
if (temp==0)
mm = 1L«30;
elseif (i<=28)
shift = 28-/;
mm =(((INTBA)])«B2)/temp:
if(shHt>32)
mm = 1L«30;
else
mm « = s/ /Я;
else
mm = (((INTBA)])«(90-i))/ temp:
m = |’/W732jmm;
тимеет формат .30
к — вектор усиленияк алгоритма RLS
к = т ‘ v
Масштабк
к имеетформат .46
Получение MSB в к
Нахождение позиции бита MSB
Масштабк
INT32 ‘fc
for(i=Q: i<M:I++)
temp = (INTBA) v[i] *m;
r/(vs>=12)
ОД=temp«(vs-12);
else
k[i] =temp»(U-vs):
k[i] =R0UND2(k[i]):
temp =0;
for (i=0; i<M;i++)
temp|= (k]i]X) ?k[i]:-k[i]);
ds =fast_bitcount(temp):
if(ds>30)
ds-=30;
for(r=0; i<M:h-+) k[i] » = ds:
else ds =0;
к имеет формат .(46-ds)
INT32 V;
for(i=0; i<M:i++)
temp = (((INTBA)k[i] *(e»3))»(30-ds));
temp =wp] +ROUND2(temp):
w[i] =(long) temp:
vs +=ds:
w— вектор веса прогнозатора RLS
Обновление вектора веса RLS
w= w +к *е
wимеет формат .16
32