ГОСТ Р 53556.2—2012
}
}
for (i
=
0; i < LPCORDER:
t*+)
{
if (lsp_current[i] > 1-min_gap) lsp_current[i]
=
1-min_gap.
}
for (i
=
LPCORDER-1; i
>
0; i--){
if (lsp_current[i]-lsp_current[i-1]
<
min_gap) {
lsp_current[i-1]=lsp_current[ij-min_gap:
}
}
for (i = 0: i
<
LPCORDER: fr+) {
qLsp[i]
=
lsp_currentp):
}
Сохранение коэффициентов
После процесса декодирования
LSP
декодированные
LSPs
должны быть сохранены в памяти, так
как они используются для предсказания в следующем фрейме.
for (i
=
0: i
<
LPCORDER: i++) {
Isp_previous[i)
=
lsp_current[i]:
}
Сохраненные
LSPslsp_previous[}
должны быть инициализированы какописано ниже, когда инициали
зируется весь декодер.
for (i = 0: i
<
LPCORDER: i*+) {
Isp_prevtous[i] =(i+1)/(LPCORDER+1):
}
Процессдекодирования для уровня расширения
Для уровня расширения (4.0 и 3,7 Кбит/с), дополнительные векторы кода и
LSPs
базового уровня
суммируются следующим образом.
for (i = 0: i
<
LPCORDER: i*+) {
qLsp[iJ
+=
vqLsp(LSP5][i]:
}
После вычисления
LSPs
снова стабилизируются.
for (i
= 0;
i < 2: i++) {
if (qLsp[i*1J- qLspp] < 0) {
Imp
= qLspp+1]:
qLsp[i+
1}
=
qLspp]:
qLspp] -
tmp:
}
if (qLspp+1] - qLspp)
<
THRSLD_L) {
qLspp
+
1)
=
qLspp]
+
THRSLD_L
}
}
for (i
= 2;
i
< 6; /+♦)
{
if (qLspp*1]
-
qLspp)
<
THRSLD_M) {
tmp
=
(qLspp*1) * qLspp})/2.0:
qLspp*1)
=
Imp * THRSLD_M/2.0:
qLspp) =tmp - THRSLD_M/2.0
;
}
}
for (i = 6: i
<
LPCORDER-1: /++) {
if (qLspp*1)
-
qLspp) <0) {
tmp
=
qLspp*1):
qLspp*1]
=
qLspp):
qLspp] = tmp:
24