LDPC, обрабатывающий для DL-SCH и UL-SCH

Этот пример подсвечивает цепь кодирования имеющей малую плотность проверки четности (LDPC) для 5G нисходящий канал NR и восходящий канал совместно использованные транспортные каналы (DL-SCH и UL-SCH).

Разделяемые параметры канала

Пример использует DL-SCH, чтобы описать обработку, которая также применяется к UL-SCH.

Выберите параметры для транспортного блока, переданного на совместно использованном (DL-SCH) нисходящего канала канал.

rng(210);              % Set RNG state for repeatability

A = 10000;             % Transport block length, positive integer
rate = 449/1024;       % Target code rate, 0<R<1
rv = 0;                % Redundancy version, 0-3
modulation = 'QPSK';   % Modulation scheme, QPSK, 16QAM, 64QAM, 256QAM
nlayers = 1;           % Number of layers, 1-4 for a transport block

На основе выбранной транспортной длины блока и целевого уровня кодирования, DL-SCH кодирование параметров определяются с помощью nrDLSCHInfo функция.

% DL-SCH coding parameters
cbsInfo = nrDLSCHInfo(A,rate);
disp('DL-SCH coding parameters')
disp(cbsInfo)
DL-SCH coding parameters
    CRC: '24A'
      L: 24
    BGN: 1
      C: 2
    Lcb: 24
      F: 244
     Zc: 240
      K: 5280
      N: 15840

DL-SCH поддерживает передачу мультикодовой комбинации (i.e. два транспортных блока), в то время как UL-SCH поддерживает только одну кодовую комбинацию. UL-SCH также поддерживает pi/2-BPSK модуляцию в дополнение к упомянутым выше для DL-SCH.

Транспортная Обработка Блока с помощью Кодирования LDPC

Данные, освобожденные от слоя MAC до физического уровня, называют как транспортный блок. Для нисходящего канала совместно использованный канал (DL-SCH) транспортный блок проходит этапы обработки:

  • Прикрепление CRC,

  • Сегментация блока кода и прикрепление блока CRC кода,

  • Кодирование канала с помощью LDPC,

  • Уровень, соответствующий и код, блокируют конкатенацию

прежде чем быть переданным физическому нисходящему каналу совместно использованный канал (PDSCH) для скремблирования, модуляции, отображения слоя и отображения ресурса/антенны. Каждый из этих этапов выполняется функцией как показано затем.

% Random transport block data generation
in = randi([0 1],A,1,'int8');

% Transport block CRC attachment
tbIn = nrCRCEncode(in,cbsInfo.CRC);

% Code block segmentation and CRC attachment
cbsIn = nrCodeBlockSegmentLDPC(tbIn,cbsInfo.BGN);

% LDPC encoding
enc = nrLDPCEncode(cbsIn,cbsInfo.BGN);

% Rate matching and code block concatenation
outlen = ceil(A/rate);
chIn = nrRateMatchLDPC(enc,outlen,rv,modulation,nlayers);

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

Подобная обработка запрашивает UL-SCH, где физический восходящий канал разделяемый канал (PUSCH) является получателем кодовой комбинации UL-SCH. Следующая схематика изображает обработку для двух каналов.

Обратитесь к nrDLSCH и nrULSCH Системные объекты, которые инкапсулируют обработку на транспортный блок с дополнительной поддержкой повторных передач.

Канал

Простой биполярный канал без шума используется для этого примера. С полным PDSCH или обработкой PUSCH, можно рассмотреть исчезающие каналы, AWGN и другие ухудшения RF также.

chOut = double(1-2*(chIn));

Получите Обработку с помощью Декодирования LDPC

Получить обработка конца для канала DL-SCH включает соответствующие двойные операции к концу передачи, которые включают

  • Восстановление уровня

  • Декодирование LDPC

  • Десегментация блока кода и декодирование CRC

  • Транспортное декодирование блока CRC

Каждый из этих этапов выполняется функцией как показано затем.

% Rate recovery
raterec = nrRateRecoverLDPC(chOut,A,rate,rv,modulation,nlayers);

% LDPC decoding
decBits = nrLDPCDecode(raterec,cbsInfo.BGN,25);

% Code block desegmentation and CRC decoding
[blk,blkErr] = nrCodeBlockDesegmentLDPC(decBits,cbsInfo.BGN,A+cbsInfo.L);

disp(['CRC error per code-block: [' num2str(blkErr) ']'])

% Transport block CRC decoding
[out,tbErr] = nrCRCDecode(blk,cbsInfo.CRC);

disp(['Transport block CRC error: ' num2str(tbErr)])
disp(['Recovered transport block with no error: ' num2str(isequal(out,in))])
CRC error per code-block: [0  0]
Transport block CRC error: 0
Recovered transport block with no error: 1

Как отображения указывают, нет никаких ошибок CRC в обоих блока кода и не транспортируют блочные уровни. Это приводит к транспортному блоку, восстанавливаемому и декодируемому без ошибок, как ожидалось, для бесшумного канала.

Обратитесь к nrDLSCHDecoder и nrULSCHDecoder Системные объекты, которые инкапсулируют получить обработку на кодовую комбинацию с дополнительным мягким объединением повторных передач для улучшенной производительности.

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

Функции

Похожие темы