ГО С Т Р 53556.4— 2013
набора два снова пишутся слева направо и так далее. Запись в остающуюся часть сегмента всегда начи
нается в наиболее удаленной позиции остающейся части того сегмента (крайняя левая позиция для на
правления записи слева направо и самая правая позиция для направления записи справа налево).
Записи набора могут потребовать несколько проб.
Первая проба: первая кодовая комбинация текущего набора пишется в остающуюся часть первого
сегмента, вторая кодовая комбинация — в остающуюся часть второго сегмента и так далее. Последняя
кодовая комбинация текущего набора пишется востающуюся часть последнего сегмента.
Вторая проба: остающаяся часть первой кодовой комбинации (если есть) пишется в остающуюся
часть второго сегмента, остающаяся часть второй кодовой комбинации (если есть) — в остающуюся часть
третьего сегмента и так далее. Остающаяся часть последней кодовой комбинации (если есть) пишется в
остающуюся часть первого сегмента (сдвиг по модулю).
Если кодовая комбинация не вписывается в остающуюся часть сегмента, она пишется только час
тично, а ее остающаяся часть сохраняется. После максимум через N проб все кодовые комбинации полно
стью записываются в сегменты.
6.16.3.3.4 Процесскодирования
Структура переупорядоченных спектральных данных не может быть описана в пределах синтаксиса
в стиле языка С, который обычно используется.
/* helper functions 7
voidInitReordehng(void):
/* Initializes variables used by the reordering functions like the segment
widths and the used offsets in segments and codewords. 7
voidInitRemainingBitsInCodewordfvoid).
/* InitializesremainingBitslnCodoword[]arrayforeach codeword with
the total size of the codev/ord. 7
int WhteCodewordToSegmentfcodcwordNr. segmentNr. direction);
/* Writes a codeword oronly a part ofa codewordindexed by codewordNr
to the segment indexed by segmentNr with a given direction.
Writo offsets for each segment are handled internally.
The function returns the number of bits written to the segment.
This numbermay be lowerthan the codeword length.
WriteCodewordToSegmenthandles already writtenparts ofthe codeword
internally. 7
void ToggleWriteDirection(void);
Г Toggles the v/nte direction in the segments between forward and backward. 7
/* (input) variables 7
numberOfCodewords. /*15 in the example 7
numberOfSegments:/ ’
6
in the example 7
numberOfSets:/* 3 in the example 7
ReorderSpectralDataQ
{
InrtRoorderingO;
InitRemainingBitsInCodewordf).
/* first step: v/rite PCWs (set 0) 7
whteDirection =forward:
for(codev/ord =0: codeword <numberOfSegments: codeword +♦) {
WriteCodewordToSegmentfcodeword. codeword. whteDirection):
}
Г second step: whte nonPCWs 7
for (set = 1: set < numberOfSiets; set**) {
ToggleWhteDiroctionO: for (trial = 0: trial < numberOfSegments; thal++) {
for(codev/ordBase =0; codev/ordBase <numberOfSegments: codev/ordBase+*) {
segment = (trial * codewordBaso) % numberOfSegments;
codeword =codewordBase ♦ set’numberOfSegments:
185