Обработка LDPC для DL-SCH и UL-SCH

В этом примере описывается цепь кодирования с низкой плотностью проверки четности (LDPC) для 5G нисходящих и восходящих общих транспортных каналов (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 Системные объекты, которые инкапсулируют обработку приема по кодовому слову с дополнительным мягким объединением повторных передач для улучшенной производительности.

См. также

Функции

Похожие темы