主要内容

nrCodeBlockSegmentLDPC

LDPC 代码块分割和 CRC 附加

说明

cbs = nrCodeBlockSegmentLDPC(blk,bgn) 根据基图编号 bgn 将输入数据块 blk 分割成代码块段,如 TS 38.212 第 5.2.2 节 [1] 所规定。该函数将循环冗余校验 (CRC) 和填充比特附加到 cbs 中的每个代码块段(如果适用)。nrCodeBlockSegmentLDPC 为传输信道(包括下行链路和上行链路共享信道以及寻呼信道)中的低密度奇偶校验 (LDPC) 编码器提供输入。

示例

示例

全部折叠

创建随机二进制输入数据序列。

in = randi([0,1],4000,1);

执行 LDPC 代码块分割。

cbs1 = nrCodeBlockSegmentLDPC(in,1); 
cbs2 = nrCodeBlockSegmentLDPC(in,2);

当基图编号为 1 时,分割结果为一个代码块段。当基图编号为 2 时,分割结果为两个代码块段。仅当输入长度大于最大代码块大小时才会进行分割。当基图编号为 1 时,最大代码块大小为 8448;当基图编号为 2 时,最大代码块大小为 3840。

size(cbs1)
ans = 1×2

        4224           1

size(cbs2)
ans = 1×2

        2080           2

创建斜坡数据输入并执行代码块分割。

cbs = nrCodeBlockSegmentLDPC([1:4000]',2);

长度为 4000 的输入被分割为两个大小相同的代码块段,并附加了 24B CRC 位和填充比特。要查看输入如何映射到输出,请绘制输入数据索引相对于相应代码块段索引的图。

plot(cbs)
legend('CBS1','CBS2')
xlabel('Code Block Bit Indices');
ylabel('Input Data Bit Indices + CRC/Filler');
title('Code Block Segmentation Operation')

Figure contains an axes object. The axes object with title Code Block Segmentation Operation, xlabel Code Block Bit Indices, ylabel Input Data Bit Indices + CRC/Filler contains 2 objects of type line. These objects represent CBS1, CBS2.

输入参数

全部折叠

输入数据块,指定为实数列向量。

数据类型: double | int8 | logical

基图编号,指定为 12

数据类型: double

输出参量

全部折叠

代码块段,以整数或实矩阵的形式返回。每列对应于一个单独的代码块段。代码块段的数量取决于 LDPC 编码器的最大代码块大小 Kcb 和输入 blk 的长度 B。如果 bgn 设置为 1,则 Kcb = 8448。如果 bgn 设置为 2,则 Kcb = 3840。如果 BKcb,则函数不执行分割,也不将 CRC 附加到生成的代码块。如果 B > Kcb,则分割会产生几个较小的代码块,并附加 24B 型 CRC 位。

必要时,函数会向每个代码块(无论是否附加 CRC)附加填充比特。填充比特确保进入 LDPC 编码器的代码块段具有有效的长度,并且是 LDPC 提升大小的倍数。当输入 blk 为逻辑值时,cbs 的数据类型会转换为 int8,以便容纳用 -1 表示的填充比特。否则,cbs 继承输入 blk 的数据类型。

数据类型: double | int8

参考

[1] 3GPP TS 38.212. “NR; Multiplexing and channel coding.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2018b 中推出

全部展开