Этот пример подсвечивает цепочку кодирования имеющей малую плотность проверки четности (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.
Данные, освобожденные от слоя 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 и другие нарушения РФ также.
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
, которые инкапсулируют получить обработку на кодовую комбинацию с дополнительным мягким объединением повторных передач для улучшенной производительности.
nrCRCDecode
| nrCRCEncode
| nrCodeBlockDesegmentLDPC
| nrCodeBlockSegmentLDPC
| nrDLSCHInfo
| nrLDPCDecode
| nrLDPCEncode
| nrRateMatchLDPC
| nrRateRecoverLDPC
| nrULSCHInfo