ГОСТ Р 54708—2011
11
k
c
=
l
;
max
(1)
c
k
=
l
;
(2)
(3)
m
z = c ∙ k –
l
;
s
max
=
MIN
{
c
×
p
,MTU
−
h
}
ä
ë
ÿ
m
>
0;
(4)
s
max
= MTU – hдля m = 0;(5)
s
f
=
l
+
c
×
p
+
z
;
max
(6)
f
s
=
l
+
c
×
p
+
z
.
(7)
max
1
m
П р и м еч а н и е — В предыдущей версии настоящего стандарта алгоритм расчета sдля случая (m > 0)
определялся следующим образом
s
max
=
MIN
c
×
p
,MTU
−
h
.
+
Следствием этой формулы является то, что даже при низких степенях защиты m = 1 (т. е. предназначенных
для защиты от потери одного фрагмента) DCP кодер генерировал большее количество фрагментов, чем техниче-
ски было необходимо, а DCP декодер исправлял два фрагмента вместо необходимого одного фрагмента. Кроме
того, для каждого более высокого значения m еще один потерянный фрагмент, чем указанное значение m, могло
быть восстановлено DCP декодером за счет неоправданно большого количества сгенерированных фрагментов.
Для копирования точного поведения DCP кодера по старой версии алгоритма значение m может быть вы-
брано на единицу выше, чем на самом деле необходимо. Например, чтобы копировать прежнюю “защиту против
потери одного единственного пакета” (m = 1), m должно быть установлено в значение 2 вместо 1 с новой версией
алгоритма, однако тогда фактическая защита будет от потерь двух фрагментов.
7.3 Кодирование
Следующие шаги должны быть выполнены, чтобы закодировать один AF пакет. Когда опция (на-
пример, код Рида-Соломона) недоступна, этот шаг просто не выполняется.
7.3.1 Код Рида-Соломона
Оригинальный пакет сначала делится на с фрагментов Рида-Соломона по k-байтов каждый; z
нулевых байтов заполнения добавляются к последнему фрагменту при необходимости. Четные байты
Рида-Соломона тогда рассчитываются и добавляются к каждому фрагменту, и полученный RS блок
подвергается перемежению до формы RS пакета. Схематически это показано на рисунке 12.
Полный код Рида-Соломона должен быть RS (255, 207), вычисленный через поле Галуа (Galois
Field GF) (2
8
) с использованием полиномиального генератора
P(x) = x
8
+ x
4
+ x
3
+ x
2
+ 1.
Когда расчетное значение для k меньше чем 207, байты k до 206 (включительно), закодированные
RS (255, 207) кодом, должны все быть равны нулю и не должны быть включены в результирующий RS
блок, таким образом производя RS (k + p, k) код.
Полиномиальный код должен быть
i
Õ
48
G(x)
=
(x
− a
).
(8)
i
=
1
0k – 10p – 10
Байты k данных и p проверочные байты кода Рида-Соломона отражаются как коэффициенты
соответствующих полиномиалов в порядке уменьшения степени x. Если порядок байтов данных в RS
блоке — от d до d, сопровождаемому проверочными байтами от rs до rs, то от d до
d
k – 1
— коэффициенты от х
254
до х
255 – k
соответственно, и от rs
0
до rs
p – 1
— коэффициенты от x
p – 1
до х
0
в кодовом слове полинома, который имеет G(x) как фактор.