В этом примере описывается цепь кодирования с низкой плотностью проверки четности (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.
Данные, доставляемые с слоя 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));
Обработка приемного конца для канала 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
Системные объекты, которые инкапсулируют обработку приема по кодовому слову с дополнительным мягким объединением повторных передач для улучшенной производительности.
nrCodeBlockDesegmentLDPC
| nrCodeBlockSegmentLDPC
| nrCRCDecode
| nrCRCEncode
| nrDLSCH
| nrDLSCHDecoder
| nrDLSCHInfo
| nrLDPCDecode
| nrLDPCEncode
| nrRateMatchLDPC
| nrRateRecoverLDPC
| nrULSCH
| nrULSCHDecoder
| nrULSCHInfo