resetSoftBuffer

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

Синтаксис

resetSoftBuffer(decUL)
resetSoftBuffer(decDL,cwid)
resetSoftBuffer = (___,harqID)

Описание

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 кодирование заданного в Разделе TR 38.212 6.2.

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

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

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

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

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

Ссылки

[1] 3GPP TS 38.212. “NR; Мультиплексирование и кодирование канала”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

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

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

Смотрите также

Системные объекты

Введенный в R2019a