[④5G NR]: 5G LDPC编码算法

03-05 1146阅读 0评论

前言

博主在[③5G NR]: 3GPP协议中LDPC编码流程解读中介绍了5G中LDPC码编码的相关流程,在这篇博客中就介绍下在5G中LDPC码具体编码的算法。因为在5G中LDPC码的PCM(Parity Check Matrix)有着特殊的构成,所以它有快速的编码的算法。

[④5G NR]: 5G LDPC编码算法,[④5G NR]: 5G LDPC编码算法,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,方法,第1张
(图片来源网络,侵删)

循环位移 Cyclic Shift

5G使用的是QC-LDPC(Quasi-Cyclic Low Density Parity Check Code)编码方法,所以首先来讲下循环位移这个概念。

对长度为 Z Z Z的向量 b ⃗ = [ b 0 , . . . , b z − 1 ] T \vec{b}=[b_0,..., b_{z-1}]^T b =[b0​,...,bz−1​]T 向左做1位的循环位移:

σ ( b ⃗ ) = [ b 1 , . . . , b z − 1 , b 0 ] T σ(\vec{b})=[b_{1},..., b_{z-1},b_0]^T σ(b )=[b1​,...,bz−1​,b0​]T

等价的矩阵运行算是:

σ ( b ⃗ ) = P ⋅ b ⃗ σ(\vec{b})=P·\vec{b} σ(b )=P⋅b

其中 P P P为单位阵 I I I向右列循环1次得到的矩阵:

P = [ 0 1 0 ⋯ 0 0 0 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ 1 1 0 0 ⋯ 0 ] P=\begin{bmatrix} 0&1&0&\cdots&0\\ 0&0&1&\cdots&0\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0&0&0&\cdots&1\\ 1&0&0&\cdots&0\\ \end{bmatrix} P= ​00⋮01​10⋮00​01⋮00​⋯⋯⋱⋯⋯​00⋮10​ ​

如果 P i P^i Pi表示 I I I向右列循环 i i i次得到的矩阵,那么向量 b ⃗ \vec{b} b 向左做 i i i次循环位移可以表示为:

σ i ( b ⃗ ) = P i ⋅ b ⃗ σ^i(\vec{b})=P^i·\vec{b} σi(b )=Pi⋅b

校验矩阵 PCM

根据3GPP 38.212协议,LDPC码的校验矩阵是由基矩阵 H B G H_{BG} HBG​(Base Graph)扩展得来,有BG1跟BG2两种选择,另外还需计算扩展因子 Z c Z_c Zc​, Z c Z_c Zc​的计算方法可以参考LDPC编码流程一文。计算出 Z c Z_c Zc​后就能根据下面的表得出set index i L S i_{LS} iLS​的值

[④5G NR]: 5G LDPC编码算法

结合Base Graph, i L S i_{LS} iLS​和协议中章节5.3.2给出的表,就能构造出基矩阵 H B G H_{BG} HBG​,BG1基矩阵的维度是 46 ∗ 68 46 * 68 46∗68,BG2基矩阵的维度是 42 ∗ 52 42 * 52 42∗52:

[④5G NR]: 5G LDPC编码算法

因为BG取值范围1 ~ 2, i L S i_{LS} iLS​取值范围为0 ~ 7,所以一共有18种基矩阵的可能性,可以参考[②5G NR]: LDPC编码H_BG矩阵C代码实例一文。

下面就是 H B G H_{BG} HBG​的展开, H B G H_{BG} HBG​中行列的每一个元素代表的都是一个 Z c ∗ Z c Z_c * Z_c Zc​∗Zc​的矩阵,如果元素值为 i i i,那么扩展后就是一个 Z c ∗ Z c Z_c * Z_c Zc​∗Zc​的 P i P^i Pi矩阵,如果行列元素的值在协议的表中没有给出(记为 − 1 -1 −1),那么扩展后就是一个 Z c ∗ Z c Z_c * Z_c Zc​∗Zc​的零矩阵。下面举个例子假设

H B G = [ 1 − 1 3 2 0 − 1 − 1 4 2 ] Z C = 5 H_{BG}=\begin{bmatrix} 1&-1&3\\ 2&0&-1\\ -1&4&2\\ \end{bmatrix}Z_C=5 HBG​= ​12−1​−104​3−12​ ​ZC​=5

那么展开后的PCM就为:

[④5G NR]: 5G LDPC编码算法

[④5G NR]: 5G LDPC编码算法,[④5G NR]: 5G LDPC编码算法,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,方法,第5张
(图片来源网络,侵删)

用零矩阵和 P i P^i Pi矩阵表示的话就是:

H = [ P 1 0 P 3 P 2 P 0 0 0 P 4 P 2 ] H=\begin{bmatrix} P^1&0&P^3\\ P^2&P^0&0\\ 0&P^4&P^2\\ \end{bmatrix} H= ​P1P20​0P0P4​P30P2​ ​

快速编码算法

因为是systematic的编码,LDPC编码后的结果并不是把原来的信息比特改的面目全非,而是在原来的信息比特后面接上新的校验比特数据,比如说在BG2下,编码后的码长为 52 Z c 52Z_c 52Zc​,其中 10 Z c 10Z_c 10Zc​是原来的信息比特部分, 42 Z c 42Z_c 42Zc​是新生成的校验比特部分。下面是BG2, i L S = 2 i_{LS}=2 iLS​=2 的一个 H B G H_{BG} HBG​实例:

const int16_t h_bg2_a5_[42][52] = {
  {  0,   0,   0,   0,  -1,  -1,   0,  -1,  -1,   0,   0,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {137,  -1,  -1, 124,   0,   0,  88,   0,   0,  55,  -1,   0,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { 20,  94,  -1,  99,   9,  -1,  -1,  -1, 108,  -1,   1,  -1,   0,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,  38,  15,  -1, 102, 146,  12,  57,  53,  46,   0,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0, 136,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 157,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0, 131,  -1,  -1,  -1, 142,  -1, 141,  -1,  -1,  -1,  64,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1, 124,  -1,  99,  -1,  45,  -1, 148,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1,  -1,  45,  -1, 148,  -1,  -1,  -1,  96,  -1,  78,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  65,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  87,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  97,  -1,  51,  85,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  17,  -1,  -1,  -1,  -1, 156,  20,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  -1,  -1,   7,  -1,   4,  -1,  -1,  -1,   2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1, 113,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  48,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0, 112,  -1,  -1,  -1,  -1,  -1,  -1, 102,  -1,  -1,  -1,  -1,  26,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1,  -1,  -1, 138,  -1,  -1,  -1,  -1,  57,  -1,  27,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  73,  99,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  79,  -1, 111, 143,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1,  -1,  24,  -1,  -1,  -1,  -1,  -1, 109,  18,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  -1,  18,  86,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0, 158,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 154,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1, 148,  -1,  -1,  -1,  -1,  -1,  -1, 104,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  17,  -1,  -1,  -1,  -1,  33,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,   4,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  75,  -1, 158,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  69,  -1,  -1,  -1,  -1,  -1,  -1,  87,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  65,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,  -1,   0,  -1,  -1,  -1,  -1, 100,  -1,  -1,  -1,  -1,  13,   7,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  -1,  32,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0, 126,  -1,  -1, 110,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1, 154,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,  -1,   0,  -1,  -1,  35,  -1,  51,  -1, 134,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  20,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  20,  -1,  -1,  -1,  -1,  -1,  -1, 122,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,  -1,   0,  -1,  -1,  -1,  -1,  88,  -1,  -1,  13,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  19,  78,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1,  -1, 157,  -1,  -1,  -1,  -1,  -1,   6,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1},
  {  0,  -1,  63,  -1,  -1,  -1,  -1,  82,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1,  -1},
  { -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1, 144,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1,  -1},
  { -1,   0,  -1,  -1,  -1,  93,  -1,  -1,  -1,  -1,  -1,  19,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,  -1},
  {  0,  -1,  -1,  -1,  -1,  -1,  -1,  24,  -1,  -1,  -1,  -1, 138,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1},
  { -1,  -1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  36,  -1,  -1, 143,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1},
  { -1,   0,  -1,  -1,  -1,   2,  -1,  -1,  -1,  -1,  -1,  55,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0}
};

根据LDPC的校验关系,LDPC的码字 c ⃗ \vec{c} c 满足下面的关系:

H c ⃗ = 0 ⃗ H\vec{c}=\vec{0} Hc =0

在BG2中,可以将码字 c ⃗ \vec{c} c 分成52个 Z c Z_c Zc​长的码块 { c i ⃗ } \lbrace\vec{c_i}\rbrace {ci​ ​}, c i ⃗ ∈ { 0 , 1 } Z \vec{c_i}\in\lbrace0,1\rbrace^Z ci​ ​∈{0,1}Z:

c ⃗ = [ I 0 ⃗ , I 1 ⃗ , . . . , I 9 ⃗ , P 0 ⃗ , P 1 ⃗ , P 2 ⃗ , P 3 ⃗ . . . , P 41 ⃗ ] \vec{c}=[\vec{I_0},\vec{I_1},...,\vec{I_9},\vec{P_0},\vec{P_1},\vec{P_2},\vec{P_3}...,\vec{P_{41}}] c =[I0​ ​,I1​ ​,...,I9​ ​,P0​ ​,P1​ ​,P2​ ​,P3​ ​...,P41​ ​]

其中 I i ⃗ , I i ⃗ ∈ { 0 , 1 } Z \vec{I_i},\vec{I_i}\in\lbrace0,1\rbrace^Z Ii​ ​,Ii​ ​∈{0,1}Z是原来的信息比特部分, P i ⃗ , P i ⃗ ∈ { 0 , 1 } Z \vec{P_i},\vec{P_i}\in\lbrace0,1\rbrace^Z Pi​ ​,Pi​ ​∈{0,1}Z是校验比特部分。校验矩阵的每一行都定义了校验方程组满足:

∑ H i j c j ⃗ = 0 ⃗ \sum{H_{ij}}\vec{c_j}=\vec{0} ∑Hij​cj​ ​=0

因为 H H H是由 H B G H_{BG} HBG​展开得来,上面的校验方程也等价为:

∑ P a i j c j ⃗ = 0 ⃗ \sum{P^{a_{ij}}}\vec{c_j}=\vec{0} ∑Paij​cj​ ​=0 , a i j a_{ij} aij​为 H B G H_{BG} HBG​中的值,也可以写作 ∑ σ a i j c j ⃗ = 0 ⃗ \sum{σ^{a_{ij}}}\vec{c_j}=\vec{0} ∑σaij​cj​ ​=0 ,这里我们发现对 c j ⃗ \vec{c_j} cj​ ​的操作就是循环左移。

[ P a 0 , 0 P a 0 , 1 ⋯ P a 0 , 51 ⋮ ⋮ ] [ I 0 ⃗ I 1 ⃗ ⋮ I 9 ⃗ P 0 ⃗ P 1 ⃗ ⋮ P 41 ⃗ ] = 0 ⃗ \begin{bmatrix} P^{a_{0,0}}&P^{a_{0,1}}&\cdots & P^{a_{0,51}}\\ \vdots&&&\vdots\\ \\ \\ \\ \\ \\ \\ \\ \end{bmatrix}\begin{bmatrix} \vec{I_0}\\ \vec{I_1}\\ \vdots\\ \vec{I_9}\\ \vec{P_0}\\ \vec{P_1}\\ \vdots\\ \vec{P_{41}}\\ \end{bmatrix}=\vec{0} ​Pa0,0​⋮​Pa0,1​⋯Pa0,51​⋮ ​ ​I0​ ​I1​ ​⋮I9​ ​P0​ ​P1​ ​⋮P41​ ​​ ​=0

从本例中的 H B G H_{BG} HBG​我们可以看出基矩阵的结构是有些特殊的,所以在算法中我们不需要展开校验矩阵 H H H,直接用 H B G H_{BG} HBG​来计算 P i ⃗ \vec{P_i} Pi​ ​, H B G H_{BG} HBG​可以分解成下面的结构:

[④5G NR]: 5G LDPC编码算法

首先我们要计算 P 0 ⃗ \vec{P_0} P0​ ​~ P 3 ⃗ \vec{P_3} P3​ ​,在本例中我们可以找到一个 4 ∗ 4 4*4 4∗4的核心校验矩阵:

[ 0 0 − 1 − 1 − 1 0 0 − 1 1 − 1 0 0 0 − 1 − 1 0 ] \begin{bmatrix} 0&0&-1&-1\\ -1&0&0&-1\\ 1&-1&0&0\\ 0&-1&-1&0\\ \end{bmatrix} ​0−110​00−1−1​−100−1​−1−100​ ​

每个 H B G H_{BG} HBG​的核心校验矩阵可能不太一样,但是前4行校验方程组的 P i ⃗ \vec{P_i} Pi​ ​部分只跟 P 0 ⃗ \vec{P_0} P0​ ​~ P 3 ⃗ \vec{P_3} P3​ ​相关( H B G H_{BG} HBG​右上角部分扩展后都是零矩阵),而且累加必定会把 P 1 ⃗ \vec{P_1} P1​ ​~ P 3 ⃗ \vec{P_3} P3​ ​约掉(二进制加法),就能先求出 P 0 ⃗ \vec{P_0} P0​ ​,比如在本例中,前4行校验方程组为:

[④5G NR]: 5G LDPC编码算法

① I 0 ⃗ + I 1 ⃗ + I 2 ⃗ + I 3 ⃗ + I 6 ⃗ + I 9 ⃗ + I 10 ⃗ + P 0 ⃗ + P 1 ⃗ = 0 ⃗ \vec{I_0}+\vec{I_1}+\vec{I_2}+\vec{I_3}+\vec{I_6}+\vec{I_9}+\vec{I_{10}}+\vec{P_0}+\vec{P_1}=\vec{0} I0​ ​+I1​ ​+I2​ ​+I3​ ​+I6​ ​+I9​ ​+I10​ ​+P0​ ​+P1​ ​=0

② P 137 I 0 ⃗ + P 124 I 3 ⃗ + I 4 ⃗ + I 5 ⃗ + P 88 I 6 ⃗ + I 7 ⃗ + I 8 ⃗ + P 55 I 9 ⃗ + P 1 ⃗ + P 2 ⃗ = 0 ⃗ P^{137}\vec{I_0}+P^{124}\vec{I_3}+\vec{I_4}+\vec{I_5}+P^{88}\vec{I_6}+\vec{I_7}+\vec{I_8}+P^{55}\vec{I_9}+\vec{P_1}+\vec{P_2}=\vec{0} P137I0​ ​+P124I3​ ​+I4​ ​+I5​ ​+P88I6​ ​+I7​ ​+I8​ ​+P55I9​ ​+P1​ ​+P2​ ​=0

③ P 20 I 0 ⃗ + P 94 I 1 ⃗ + P 99 I 3 ⃗ + P 9 I 4 ⃗ + P 88 I 6 ⃗ + P 108 I 8 ⃗ + P 1 P 0 ⃗ + P 2 ⃗ + P 3 ⃗ = 0 ⃗ P^{20}\vec{I_0}+P^{94}\vec{I_1}+P^{99}\vec{I_3}+P^{9}\vec{I_4}+P^{88}\vec{I_6}+P^{108}\vec{I_8}+P^{1}\vec{P_0}+\vec{P_2}+\vec{P_3}=\vec{0} P20I0​ ​+P94I1​ ​+P99I3​ ​+P9I4​ ​+P88I6​ ​+P108I8​ ​+P1P0​ ​+P2​ ​+P3​ ​=0

④ P 38 I 1 ⃗ + P 15 I 2 ⃗ + P 102 I 4 ⃗ + P 146 I 5 ⃗ + P 12 I 6 ⃗ + P 57 I 7 ⃗ + P 53 I 8 ⃗ + P 46 I 9 ⃗ + P 0 ⃗ + P 3 ⃗ = 0 ⃗ P^{38}\vec{I_1}+P^{15}\vec{I_2}+P^{102}\vec{I_4}+P^{146}\vec{I_5}+P^{12}\vec{I_6}+P^{57}\vec{I_7}+P^{53}\vec{I_8}+P^{46}\vec{I_9}+\vec{P_0}+\vec{P_3}=\vec{0} P38I1​ ​+P15I2​ ​+P102I4​ ​+P146I5​ ​+P12I6​ ​+P57I7​ ​+P53I8​ ​+P46I9​ ​+P0​ ​+P3​ ​=0

如果① + ② + ③ + ④,就能得到:

∑ + P 1 P 0 ⃗ = 0 ⃗ ⟶ ∑ = P 1 P 0 ⃗ \sum+P^{1}\vec{P_0}=\vec{0}\longrightarrow\sum=P^{1}\vec{P_0} ∑+P1P0​ ​=0 ⟶∑=P1P0​ ​, ∑ \sum ∑为信息比特相关的累加部分

P a i j c j ⃗ P^{a_{ij}}\vec{c_j} Paij​cj​ ​部分在C代码中实现也比较简单,就是向量的循环左移,计算出 P 0 ⃗ \vec{P_0} P0​ ​后,将值带入① ,②, ③中就能依次算出 P 1 ⃗ \vec{P_1} P1​ ​, P 2 ⃗ \vec{P_2} P2​ ​, P 3 ⃗ \vec{P_3} P3​ ​。

我们再次观察 H B G H_{BG} HBG​的右下角部分,这个部分的矩阵对角线为0,其余部分为-1,所以接下来的扩展校验部分 P 4 ⃗ \vec{P_4} P4​ ​~ P 41 ⃗ \vec{P_{41}} P41​ ​,都可以由每一行的信息比特部分加上 P 0 ⃗ \vec{P_0} P0​ ​~ P 3 ⃗ \vec{P_3} P3​ ​的组合通过校验方程组得出,而且一定能按照顺序依次得出。

比如第5行,这里的 ∑ \sum ∑为每一行的信息比特累加部分:

[④5G NR]: 5G LDPC编码算法

∑ + P 157 P 1 ⃗ + P 4 ⃗ = 0 ⃗ \sum+P^{157}\vec{P_1}+\vec{P_4}=\vec{0} ∑+P157P1​ ​+P4​ ​=0

第6行:

[④5G NR]: 5G LDPC编码算法

∑ + P 64 P 1 ⃗ + P 5 ⃗ = 0 ⃗ \sum+P^{64}\vec{P_1}+\vec{P_5}=\vec{0} ∑+P64P1​ ​+P5​ ​=0

第10行:

[④5G NR]: 5G LDPC编码算法

[④5G NR]: 5G LDPC编码算法,[④5G NR]: 5G LDPC编码算法,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,方法,第11张
(图片来源网络,侵删)

∑ + P 51 P 0 ⃗ + P 85 P 1 ⃗ + P 9 ⃗ = 0 ⃗ \sum+P^{51}\vec{P_0}+P^{85}\vec{P_1}+\vec{P_9}=\vec{0} ∑+P51P0​ ​+P85P1​ ​+P9​ ​=0

直到算完所有的校验比特,我们就能得到LDPC码编码后的结果,本例是BG2的配置,如果为BG1只是维度不同,过程是一样的。


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1146人围观)

还没有评论,来说两句吧...

目录[+]