resetSoftBuffer

Сбросьте мягкий буфер для процесса HARQ в декодере UL-SCH или DL-SCH

Описание

resetSoftBuffer(decUL) сбрасывает мягкий буфер для гибридного автоматического запроса повторения (HARQ) номер процесса 0 в указанном декодере UL-SCH decUL.

пример

resetSoftBuffer(decDL,cwid) сбрасывает мягкий буфер для индекса кодового слова cwid и HARQ номер процесса 0 в указанном декодере DL-SCH decDL. Индекс кодового слова cwid задает одно из двух возможных кодовых слов для декодирования DL-SCH.

пример

resetSoftBuffer(___,harqID) сбрасывает мягкий буфер для заданного номера процесса HARQ harqID. Задайте harqID в дополнение к входным параметрам в любом из предыдущих синтаксисов.

Чтобы обеспечить возможность мягкого объединения повторных передач перед декодированием с низкой плотностью проверки четности (LDPC), каждый объект декодера поддерживает мягкий буфер для каждого процесса HARQ. После успешного декодирования входа объект автоматически сбрасывает мягкий буфер для процесса HARQ. Вызов resetSoftBuffer функция сбрасывает мягкий буфер вручную. Вызовите эту функцию при декодировании различных транспортных блоков для того же процесса HARQ впоследствии или при завершении всех версий избыточности для процесса HARQ.

Примеры

свернуть все

Сгенерируйте случайную последовательность двоичных значений, соответствующих одному транспортному блоку длины 5120.

trBlkLen1 = 5120;
trBlk1 = randi([0 1],trBlkLen1,1,'int8');

Создайте и сконфигурируйте Системный объект кодера UL-SCH с несколькими процессами HARQ.

encUL = nrULSCH('MultipleHARQProcesses',true);

Загрузите транспортный блок в энкодер UL-SCH для процесса HARQ № 1.

harqID = 1;
setTransportBlock(encUL,trBlk1,harqID);

Вызовите энкодер со схемой модуляции QPSK, уровнем передачи 1, выходной длиной 10 240 бит, версией избыточности 0 и номером процесса HARQ 1. Энкодер применяет цепь обработки UL-SCH к транспортному блоку, загруженному в объект, используя процесс HARQ № 1.

rv = 0;
codedTrBlock1 = encUL('QPSK',1,10240,rv,harqID);

Создайте и сконфигурируйте Системный объект декодера UL-SCH с несколькими процессами HARQ.

decUL = nrULSCHDecoder('MultipleHARQProcesses',true);

Сконфигурируйте декодер для закодированного транспортного блока.

decUL.TransportBlockLength = trBlkLen1;

Добавьте шум к мягким битам, представляющим закодированный транспортный блок. Вызовите декодер UL-SCH на измененных мягких битах для номера процесса HARQ 1.

rxSoftBits1 = awgn(1-2*double(codedTrBlock1),5);
[decBits1,blkErr1] = decUL(rxSoftBits1,'QPSK',1,rv,harqID);

Добавленный шум приводит к ошибке во время декодирования.

blkErr1
blkErr1 = logical
   1

Повторите операцию кодирования для нового транспортного блока длины 4400 и процесса HARQ № 1.

trBlkLen2 = 4400;
trBlk2 = randi([0 1],trBlkLen2,1,'int8');
setTransportBlock(encUL,trBlk2,harqID); 
codedTrBlock2 = encUL('QPSK',1,8800,rv,harqID);

Сконфигурируйте декодер для второго транспортного блока.

decUL.TransportBlockLength = trBlkLen2;

Если во время предыдущего декодирования произошла ошибка с процессом HARQ № 1, необходимо сбросить мягкий буфер процесса HARQ перед декодированием второго транспортного блока.

if blkErr1   
    resetSoftBuffer(decUL,harqID);
end

Вызовите декодер на мягких битах, представляющих второй закодированный транспортный блок, используя номер процесса HARQ 1.

rxBits2 = 1-2*double(codedTrBlock2);
[decBits2,blkErr2] = decUL(rxBits2,'QPSK',1,rv,harqID);
blkErr2
blkErr2 = logical
   0

Проверьте, что вторые переданные и декодированные биты сообщения идентичны.

isequal(decBits2,trBlk2)
ans = logical
   1

Сгенерируйте случайную последовательность двоичных значений, соответствующих одному транспортному блоку длины 5120.

trBlkLen1 = 5120;
trBlk1 = randi([0 1],trBlkLen1,1,'int8');

Создайте и сконфигурируйте Системный объект энкодера DL-SCH с несколькими процессами HARQ.

encDL = nrDLSCH('MultipleHARQProcesses',true);

Загрузите транспортный блок в энкодер DL-SCH для процесса HARQ с номером 1 и индексом кодового слова 1.

harqID = 1;
cwID = 0;
setTransportBlock(encDL,trBlk1,cwID,harqID);

Вызовите энкодер со схемой модуляции QPSK, уровнем передачи 1, выходной длиной 10 240 бит, версией избыточности 0 и номером процесса HARQ 1. Энкодер применяет цепь обработки DL-SCH к транспортному блоку, загруженному в объект для процесса HARQ № 1.

rv = 0;
codedTrBlock1 = encDL('QPSK',1,10240,rv,harqID);

Создайте и сконфигурируйте Системный объект декодера DL-SCH с несколькими процессами HARQ.

decDL = nrDLSCHDecoder('MultipleHARQProcesses',true);

Сконфигурируйте декодер для закодированного транспортного блока.

decDL.TransportBlockLength = trBlkLen1;

Добавьте шум к мягким битам, представляющим закодированный транспортный блок. Вызовите декодер DL-SCH на измененных мягких битах для номера процесса HARQ 1.

rxSoftBits1 = awgn(1-2*double(codedTrBlock1),5);
[decBits1,blkErr1] = decDL(rxSoftBits1,'QPSK',1,rv,harqID);

Добавленный шум приводит к ошибке во время декодирования.

blkErr1
blkErr1 = logical
   1

Повторите операцию кодирования для нового транспортного блока длины 4400 и процесса HARQ № 1.

trBlkLen2 = 4400;
trBlk2 = randi([0 1],trBlkLen2,1,'int8');
setTransportBlock(encDL,trBlk2,cwID,harqID); 
codedTrBlock2 = encDL('QPSK',1,8800,rv,harqID);

Сконфигурируйте декодер для второго транспортного блока.

decDL.TransportBlockLength = trBlkLen2;

Если во время предыдущего декодирования произошла ошибка с процессом HARQ № 1, необходимо сбросить мягкий буфер процесса HARQ перед декодированием второго транспортного блока.

if blkErr1   
    resetSoftBuffer(decDL,harqID);
end

Вызовите декодер на мягких битах, представляющих второй закодированный транспортный блок, используя номер процесса HARQ 1.

rxBits2 = 1-2*double(codedTrBlock2);
[decBits2,blkErr2] = decDL(rxBits2,'QPSK',1,rv,harqID);
blkErr2
blkErr2 = logical
   0

Проверьте, что вторые переданные и декодированные биты сообщения идентичны.

isequal(decBits2,trBlk2)
ans = logical
   1

Входные параметры

свернуть все

Декодер UL-SCH, заданный как nrULSCHDecoder Системный объект. Объект реализует цепь обработки декодера UL-SCH, соответствующую обратной операции кодирования UL-SCH, указанного в разделе 6.2 TR 38.212.

Декодер DL-SCH, заданный как nrDLSCHDecoder Системный объект. Объект реализует цепь обработки декодера DL-SCH, соответствующую обратной операции кодирования DL-SCH, указанного в разделе 7.2 TR 38.212.

Индекс кодового слова DL-SCH, заданный как 0 или 1.

Типы данных: double

Номер процесса HARQ, заданный как целое число от 0 до 15.

Типы данных: double

Ссылки

[1] 3GPP TS 38.212. "NR; Мультиплексирование и канальное кодирование. "3rd Генерация Partnership Project; Группа технических спецификаций Радиосеть доступ.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

См. также

Объекты

Введенный в R2019a