exponenta event banner

Обработка 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 поддерживает передачу нескольких кодовых слов (т.е. два транспортных блока), в то время как 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 Системные объекты, которые инкапсулируют обработку приема по кодовому слову, с дополнительным мягким объединением повторных передач для улучшения производительности.

См. также

Функции

Связанные темы