NR Rel-15/16学习笔记
TB processing in TX side
本篇主要介绍一个TB从产生到资源映射的过程。
简介
From R1-1707670 On rate matching with LDPC code for eMBB LG
首先通过一张流程图说明整个流程。
TB size determination
MCS 表格选择
From 3GPP TS 38.214 V15.10.0 5.1.3.1/6.1.4.1 Modulation order, target code rate determination
下行数据信道(PDSCH)
下行数据信道共有三个MCS table,
Title | 最高调制阶数 | 最高码率 | |
---|---|---|---|
1 | Table 5.1.3.1-1: MCS index table 1 for PDSCH | 64QAM | 0.926 |
2 | Table 5.1.3.1-2: MCS index table 2 for PDSCH | 256QAM | 0.926 |
3 | Table 5.1.3.1-3: MCS index table 3 for PDSCH | 64QAM | 0.754 |
注:三个表格中颗粒度也不同,赋能了更加灵活的MCS 选择。
每个MCS table中包含多行,每一行中包含了4列,如下图所示。
第一列是MCS的序号,与DCI中5bit的Modulation and coding scheme field对应。第二列是调制阶数,取值可以是2,4,6,8,分别对应了QPSK,16QAM,64QAM,256QAM。第三列是信道编码的码率,注意这一列的值是码率*1024(R*1024),该码率的含义是TB 的比特数与Rate matching 后比特数的比值。第四列是频谱效率,
S
E
=
Q
m
∗
R
SE=Q_{m}*R
SE=Qm∗R.
UE根据高层参数的配置以及调度当前PDSCH的DCI类型,从这三个表格中选择一个,作为本次传输的MCS表格。
之后,UE通过DCI中5bit的指示位(Modulation and coding scheme field)在已经确定的MCS table中选择一行,从而确定
Q
m
,
R
Q_{m},R
Qm,R。
上行数据信道(PUSCH)
首先,需要说明的一个问题是,上文中提到的PDSCH三个表格也可以用于PUSCH;而PUSCH的两个专属表格是用于上行transform precoding使能的情况,即使用DFT-S-OFDM作为波形。
上行有两个专属的MCS table。
Title | 最高调制阶数 | 最高码率 | |
---|---|---|---|
1 | Table 6.1.4.1-1: MCS index table for PUSCH with transform precoding and 64QAM | 64QAM | 0.926 |
2 | Table 6.1.4.1-2: MCS index table 2 for PUSCH with transform precoding and 64QAM | 64QAM | 0.754 |
Table 6.1.4.1-1/2与Table 5.1.3.1-1/2/3的另一个显著区别是Table 6.1.4.1-1/2最低的调制阶数不确定。
当配置了高层参数tp-pi2BPSK时,q=1,意味着Table 6.1.4.1-1/2可支持
π
/
2
\pi/2
π/2-BPSK/QPSK/16QAM/64QAM;当未配置该高层参数时,q=2,意味着Table 6.1.4.1-1/2只支持QPSK/16QAM/64QAM。
注:tp-pi2BPSK在PUSCH-Config中配置
TB size determination
From 3GPP TS 38.214 V15.10.0 5.1.3.2/6.1.4.2 Transport block size determination
- UE计算一个slot中的RE数目
- UE计算中间信息位数
- UE决定TB的大小
- UE计算一个slot中的RE数目
N
R
E
N_{RE}
NRE
首先计算一个PRB中可以使用的RE数目,公式如下:
N R E ′ = N s c R B ∗ N s y m b s h − N D M R S P R B − N o h P R B N_{RE}^{'}=N_{sc}^{RB}*N_{symb}^{sh}-N_{DMRS}^{PRB}-N_{oh}^{PRB} NRE′=NscRB∗Nsymbsh−NDMRSPRB−NohPRB
其中,
N s c R B N_{sc}^{RB} NscRB为一个RB中的子载波数目,始终等于12;
N s y m b s h N_{symb}^{sh} Nsymbsh为当前slot中分配给数据信道的OFDM符号数目,根据SLIV中的L确定;
N D M R S P R B N_{DMRS}^{PRB} NDMRSPRB为当前PRB中DMRS占据的RE数目,例如,当配置’1+1’DMRS时,即DMRS占据两个OFDM符号,则该项值为24;
N o h P R B N_{oh}^{PRB} NohPRB是由高层参数xOverhead配置,取值为{6,12,18},物理含义是计算CSI-RS,CORESET等占据的开销。若xOverhead缺省,则取值0。
然后计算全部slot中可以使用的RE数目,公式如下:
N R E = n P R B ∗ m i n ( 156 , N R E ′ ) N_{RE}=n_{PRB}*min(156,N_{RE}^{'}) NRE=nPRB∗min(156,NRE′)
其中,
n P R B n_{PRB} nPRB是分配给该UE的RB数目。
式中 156 = 14 ∗ 12 ( 1 s l o t , 1 P R B 全 部 R E 数 目 ) − 12 ( 至 少 一 个 D M R S ) 156=14*12(1slot,1PRB全部RE数目)-12(至少一个DMRS) 156=14∗12(1slot,1PRB全部RE数目)−12(至少一个DMRS) - UE计算中间信息位数
N
i
n
f
o
N_{info}
Ninfo
根据如下公式计算:
N i n f o = N R E ∗ R ∗ Q m ∗ v N_{info}=N_{RE}*R*Q_{m}*v Ninfo=NRE∗R∗Qm∗v
其中,
N R E N_{RE} NRE是第一步中UE计算一个slot中的RE数目, R , Q m R,Q_{m} R,Qm由MCS表格对应行确定, v v v是UE使用的传输层数,对于单codewords而言,其最大传输层数为4。
对于中间信息位数 N i n f o N_{info} Ninfo的理解,可以通过下图来表示:
我们认为从TB-CRC attachment到Rate matching整个过程看作channel coding的过程,bit interleaver不会影响比特位数,因此可以暂时忽略。
一个TB最终会映射到 v ∗ N R E v*N_{RE} v∗NRE个RE上,因此在基带调制之前共需要 v ∗ N R E ∗ Q m v*N_{RE}*Q_{m} v∗NRE∗Qm个已编码比特。整个channel coding的码率是R,因此在channel coding之前所需要的信息比特为 v ∗ N R E ∗ Q m ∗ R v*N_{RE}*Q_{m}*R v∗NRE∗Qm∗R。
中间信息比特 N i n f o N_{info} Ninfo已经非常接近最终TB size的大小,但是TB size的大小并不是连续的数值,而是一系列离散的集合,因此还需要进一步计算才能得到最终TB size的大小。
Note: codeword到layer的映射方法在38.211 7.3.1.3的Table 7.3.1.3-1中。
- UE 决定TB的大小
-
Case 1: 当 N i n f o N_{info} Ninfo小于3824
首先,根据下列公式量化中间信息位:
N i n f o ′ = m a x ( 24 , 2 n × ⌊ N i n f o 2 n ⌋ ) N_{info}^{'}=max(24,2^{n}\times\left \lfloor \frac{N_{info}}{2^{n}} \right \rfloor) Ninfo′=max(24,2n×⌊2nNinfo⌋)
其中,
n = m a x ( 3 , ⌊ l o g 2 ( N i n f o ) ⌋ − 6 ) n=max(3,\left \lfloor {log_2(N_{info})} \right \rfloor-6) n=max(3,⌊log2(Ninfo)⌋−6)
然后,在Table 5.1.3.2-1中找到最接近但不小于 N i n f o ′ N_{info}^{'} Ninfo′的TB size
-
当 N i n f o N_{info} Ninfo大于3824
首先,根据下列公式量化中间信息位:
N i n f o ′ = m a x ( 3840 , 2 n × r o u n d ( N i n f o − 24 2 n ) ) N_{info}^{'}=max\left(3840,2^{n}\times round\left(\frac{N_{info}-24}{2^{n}}\right)\right) Ninfo′=max(3840,2n×round(2nNinfo−24)),
其中, n = ⌊ l o g 2 ( N i n f o − 24 ) ⌋ − 5 n=\left \lfloor {log_{2}(N_{info}-24)} \right \rfloor-5 n=⌊log2(Ninfo−24)⌋−5并向上取整。- Case 2: 如果码率
R
R
R小于等于1/4
T B S = 8 ⋅ C ⋅ ⌈ N i n f o ′ + 24 8 ⋅ C ⌉ − 24 TBS=8\cdot C\cdot \left \lceil \frac{N^{'}_{info}+24}{8\cdot C} \right \rceil-24 TBS=8⋅C⋅⌈8⋅CNinfo′+24⌉−24,
其中
C = ⌈ N i n f o ′ + 24 3816 ⌉ C= \left \lceil \frac{N^{'}_{info}+24}{3816} \right \rceil C=⌈3816Ninfo′+24⌉,其物理含义是选择BG1时CodeBlock的数目。 - Case 3: 如果码率
R
R
R大于1/4且
N
i
n
f
o
′
N_{info}^{'}
Ninfo′大于8424
T B S = 8 ⋅ C ⋅ ⌈ N i n f o ′ + 24 8 ⋅ C ⌉ − 24 TBS=8\cdot C\cdot \left \lceil \frac{N^{'}_{info}+24}{8\cdot C} \right \rceil-24 TBS=8⋅C⋅⌈8⋅CNinfo′+24⌉−24,
其中,
C = ⌈ N i n f o ′ + 24 8424 ⌉ C= \left \lceil \frac{N^{'}_{info}+24}{8424} \right \rceil C=⌈8424Ninfo′+24⌉,其物理含义是选择BG2时CodeBlock的数目。 - Case 4: 如果码率大于1/4但是
N
i
n
f
o
′
N_{info}^{'}
Ninfo′小于8424,不需要做CB segmentation, (Case 3)
T B S = 8 ⋅ ⌈ N i n f o ′ + 24 8 ⌉ − 24 TBS=8\cdot \left \lceil \frac{N^{'}_{info}+24}{8} \right \rceil-24 TBS=8⋅⌈8Ninfo′+24⌉−24.
- Case 2: 如果码率
R
R
R小于等于1/4
-
Notes: 1.在简介中,我们画出了CB-CRC attachment 以及CB segmentation两个流程,这两个流程不一定会发生。 2.是否需要做CB segmentation取决于LDPC encode中Base graph的选择以及TB size的大小。 3.BG2且TB size>3824,需要CB,对应Case 2;BG2且TB size<3824,不需要CB,对应Case 1。 4.BG1且TB size>8424,需要CB,对应Case 3;BG1且TB size<8424,不需要CB,对应Case 4。 5.BG2的CB segmentation门限值3824,BG1的CB segmentation门限值8424,取值与LDPC 编码矩阵维度相关,将会在下文介绍。
TB CRC attachment
From 3GPP TS 38.212 V15.10.0 5.1 CRC calculation/ 6.2.1&7.2.1 Transport block CRC attachment
当TB size 小于等于3824时,在传输块后附加16位的CRC,其生成多项式为:
当TB size 大于3824时,在传输块后附加24位的CRC,其生成多项式为:
CB segmentation & CB CRC attachment
当TB的长度大于LDPC码最大信息块长度,传输块将被分割为几个分段码块,并独立进行编码。
LDPC编码
- 选择Base Graph 1,其最大信息块长度为 K c b = 8848 K_{cb}=8848 Kcb=8848 ( T B C R C = 24 , T B m a x = 8848 − 24 = 8824 ) \left( TB_{CRC}=24,TB_{max}=8848-24=8824\right) (TBCRC=24,TBmax=8848−24=8824);
- 选择Base Graph 2,其最大信息块长度为 K c b = 3840 K_{cb}=3840 Kcb=3840 ( T B C R C = 16 , T B m a x = 3840 − 16 = 3824 ) \left( TB_{CRC}=16,TB_{max}=3840-16=3824 \right) (TBCRC=16,TBmax=3840−16=3824).
当TB size大小超过BG1/BG2的门限值(8824,3824),需要进行码块分割。
-
确定CB的数目 C C C
C = ⌈ T B + T B C R C K c b − C R C C B ⌉ C=\left \lceil \frac{TB +TB_{CRC}}{K_{cb}-CRC_{CB}} \right \rceil C=⌈Kcb−CRCCBTB+TBCRC⌉
其中,
C R C C B = 24 CRC_{CB}=24 CRCCB=24 -
确定CB中包含信息比特的数目
在计算TB size时,对于需要进行CB segmentation的情况(Case2,Case3),都已经对TB size的大小做了规定。
T B S = 8 ⋅ C ⋅ ⌈ N i n f o ′ + 24 8 ⋅ C ⌉ − 24 TBS=8\cdot C\cdot \left \lceil \frac{N^{'}_{info}+24}{8\cdot C} \right \rceil-24 TBS=8⋅C⋅⌈8⋅CNinfo′+24⌉−24
可以发现, T B S + T B C R C TBS+TB_{CRC} TBS+TBCRC正好是 C C C的整数倍,也就意味着,每个CB中包含的比特数目为 8 ⋅ ⌈ N i n f o ′ + 24 8 ⋅ C ⌉ 8\cdot \left \lceil \frac{N^{'}_{info}+24}{8\cdot C} \right \rceil 8⋅⌈8⋅CNinfo′+24⌉. -
CB-CRC attachment
每一个CB后添加24位CRC,其生成多项式为:
Notes: 1. CB segmentation之前,已经对TB size的大小进行调整,使TB的大小正好能够确保码块均分,也意味着每个CB包含的信息比特数相同。 2. CB segmentation之后,每个CB均添加24位的CRC,每个CB包含的比特位依旧相等。 3. 码块分割后,LDPC编码,RM,基带调制均在CB级别进行操作。
Zero padding & LDPC encode
LDPC 简介
矩阵关系与矩阵维度
信息比特序列记作
μ
\boldsymbol{\mu}
μ,生成矩阵记作
G
T
\boldsymbol{G}^{T}
GT,编码比特序列记作
c
\boldsymbol{c}
c,校验矩阵记作
H
\boldsymbol{H}
H。
上述矩阵的关系为:
c
=
G
T
⋅
μ
\boldsymbol{c}=\boldsymbol{G}^{T} \cdot\boldsymbol{\mu}
c=GT⋅μ,
H ⋅ c = 0 \boldsymbol{H} \cdot\boldsymbol{c}=\boldsymbol{0} H⋅c=0.
编码矩阵与校验矩阵维度:
G T = [ I k × k P m × k ] ∈ R ( m + k ) × k \boldsymbol{G}^{T}=\begin{bmatrix} \boldsymbol{I}_{k\times k} \\ \boldsymbol{P}_{m\times k} \end{bmatrix} \in \mathbb{R}^{(m+k) \times k} GT=[Ik×kPm×k]∈R(m+k)×k
H = [ P m × k , I m × m ] ∈ R m × ( m + k ) \boldsymbol{H}=\begin{bmatrix} \boldsymbol{P}_{m\times k}, \boldsymbol{I}_{m\times m} \end{bmatrix} \in \mathbb{R}^{m \times (m+k)} H=[Pm×k,Im×m]∈Rm×(m+k)
信息比特序列
μ
\boldsymbol{\mu}
μ为
k
×
1
k\times 1
k×1的向量;
而编码比特序列
c
\boldsymbol{c}
c为
(
m
+
k
)
×
1
(m+k)\times1
(m+k)×1的向量。
校验矩阵
校验矩阵 H ∈ R M b ⋅ Z × N b ⋅ Z \boldsymbol{H}\in \mathbb{R}^{M_{b}\cdot Z\times N_{b}\cdot Z} H∈RMb⋅Z×Nb⋅Z
m = M b × Z m=M_b\times Z m=Mb×Z, m + k = N b × Z m+k=N_b\times Z m+k=Nb×Z, k = ( N b − M b ) × Z k=(N_b-M_b)\times Z k=(Nb−Mb)×Z.
-
基础矩阵 H b ∈ R M b × N b \boldsymbol{H}_b \in \mathbb{R}^{M_{b}\times N_{b}} Hb∈RMb×Nb
LDPC有两个不同的基础矩阵,分别为Base matrix 1和Base matrix 2,对应两个基础图BG1,BG2。
系统列 K b = N b − M b K_b=N_b-M_b Kb=Nb−Mb
BG1: M b = 46 , N b = 68 M_b=46,N_b=68 Mb=46,Nb=68,适用吞吐量较高,码率较高,码块较大的情景。
BG2: M b = 42 , N b = 52 M_b=42,N_b=52 Mb=42,Nb=52,适用吞吐量较低,码率较低,码块较低的情景。 -
提升值 Z Z Z
为了使LDPC码可以支持更加灵活的码块大小,NR设计了一系列不同的提升值,使得校验矩阵的维度更加灵活。
Z = a × 2 j Z=a\times2^{j} Z=a×2j,其中a是偏移系数, j j j的全部可能取值集合为 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 {0,1,2,3,4,5,6,7} 0,1,2,3,4,5,6,7。
表格中每一行对应了一个偏移系数,每一行的 a a a依次等于 2 , 3 , 5 , 7 , 9 , 11 , 13 , 15 {2,3,5,7,9,11,13,15} 2,3,5,7,9,11,13,15; -
置换矩阵 P ∈ R Z × Z \boldsymbol{P}\in \mathbb{R}^{Z\times Z} P∈RZ×Z
P = [ 0 1 0 ⋯ 0 0 0 0 1 ⋯ 0 0 0 0 0 1 ⋯ 0 ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ 0 0 0 0 ⋯ 1 1 0 0 ⋯ 0 0 ] \boldsymbol{P}=\begin{bmatrix} 0 & 1 & 0 &\cdots &0 &0 \\ 0 & 0 & 1 & \cdots &0 &0\\ 0& 0& 0 &1 &\cdots &0\\ \cdots & \cdots & \cdots & \cdots &\cdots &\cdots \\ 0& 0& 0& 0 &\cdots & 1\\ 1 & 0 & 0 &\cdots&0&0 \end{bmatrix} P=⎣⎢⎢⎢⎢⎢⎢⎡000⋯01100⋯00010⋯00⋯⋯1⋯0⋯00⋯⋯⋯0000⋯10⎦⎥⎥⎥⎥⎥⎥⎤
置换矩阵 P \boldsymbol{P} P的最大循环权重为1。其与基础矩阵的关系如下:基础矩阵 H b \boldsymbol{H}_b Hb中的元素 h b i j hb_{ij} hbij分为三种, − 1 , 0 , -1,0, −1,0,正整数 X X X。
当 h b i j = − 1 hb_{ij}=-1 hbij=−1时,在校验矩阵的第 i i i行第 j j j列,利用全零阵 0 ∈ R Z × Z \boldsymbol{0} \in \mathbb{R}^{Z\times Z} 0∈RZ×Z的位置代替 h b i j hb_{ij} hbij;
当 h b i j = 0 hb_{ij}=0 hbij=0时,在校验矩阵的第 i i i行第 j j j列,利用单位阵 I ∈ R Z × Z \boldsymbol{I} \in \mathbb{R}^{Z\times Z} I∈RZ×Z的位置代替 h b i j hb_{ij} hbij;
当 h b i j = X hb_{ij}=X hbij=X时,在校验矩阵的第 i i i行第 j j j列,利用置换矩阵的 X X X幂次矩阵 P X ∈ R Z × Z \boldsymbol{P}^{X} \in \mathbb{R}^{Z\times Z} PX∈RZ×Z的位置代替 h b i j hb_{ij} hbij。 -
总结
从上述分析可以看出,根据基础矩阵以及提升值,可以确定校验矩阵的维度。并且,LDPC的编码比特位数应满足 N b × Z N_b\times Z Nb×Z,信息比特位数应满足 ( N b − M b ) × Z (N_b-M_b)\times Z (Nb−Mb)×Z。
即使已经设计了多个提升值,但是可能依旧出现无法与添加TB(CB) CRC后无法匹配的情况。因此仍需要在添加完CRC后,进行补零,从而使信息比特数满足 ( N b − M b ) × Z (N_b-M_b)\times Z (Nb−Mb)×Z。- 码率
只从LDPC encode这一步来看,码率是 ( N b − M b ) N b \frac{(N_b-M_b)}{N_b} Nb(Nb−Mb),BG1的(最低)码率是 22 / 66 = 1 / 3 22/66=1/3 22/66=1/3,BG2的(最低)码率 10 / 50 = 1 / 5 10/50=1/5 10/50=1/5。BG1的 R 1 , k e r n e l = 22 / 25 = 0.88 R_{1,kernel}=22/25=0.88 R1,kernel=22/25=0.88;BG2的最大码率 2 / 3 2/3 2/3。 - 最大信息比特
最大信息比特等于 K b × Z m a x K_b\times{Z_{max}} Kb×Zmax。
对于BG1, 22 × 384 = 8448 22\times384=8448 22×384=8448;对于BG2, 10 × 384 = 3840 10\times384=3840 10×384=3840。
- 码率
LDPC编码部分流程
-
BG1与BG2的选取
如图所示,BG1/BG2的选取依赖于TB size的大小以及选择MCS后确定的码率
a) 当TB size 小于292bits,选择BG2;
b) 当码率R小于1/4,选择BG2;
c) 当TB size大于292bits且小于3824bits,码率小于2/3,选择BG2;
d) 其他情况,都选择BG1。 -
提升值的选取
根据TB size以及MCD的码率已经确定了BG的选取,即此时 K b = 22 K_{b}=22 Kb=22 for BG1, K b = 10 K_{b}=10 Kb=10 for BG 2。
假设添加CRC之后的TB(或者分割为CB后,每个CB添加CRC之后)大小为 K ′ K^{'} K′,挑选最小的提升值 Z Z Z,使其满足 K b × Z ≥ K ′ K_b\times{Z}\ge K^{'} Kb×Z≥K′。 -
零比特填充
在添加了CRC之后的TB后添加 K b × Z − K ′ K_b\times{Z}-K^{'} Kb×Z−K′个0比特。
注:当TB需要进行CB segmentation时,根据TB size的计算公式,会调整TB size的大小,确保不再需要零比特填充。
Redundant version(RV) & Rate matching
NR通过循环缓冲区实现HARQ和速率匹配,并将提升值
Z
Z
Z作为RV的基本单位。
在经过LDPC encode后,会去除掉前
2
Z
2Z
2Z个系统位。如果选择了BG1,编码后的码块长度为
66
Z
66Z
66Z;如果选择了BG2,编码后的码块长度为
50
Z
50Z
50Z。
在进行速率匹配时,需要确定三件事情。
- 确定循环缓冲区的大小 — (取决于接收端是否使用有限缓冲区进行速率匹配)
- 确定从循环缓冲区的哪一个位置开始取出编码后比特 — (取决于RV版本号)
- 确定从循环缓冲区拿出多少编码后比特 —(取决于RE数目和调制阶数)
循环缓冲区大小
循环缓冲区的大小记作
N
c
b
N_{cb}
Ncb。
如果接收端使用有限缓冲区速率匹配,则
N
c
b
=
m
i
n
(
N
,
N
r
e
f
)
N_{cb}=min(N,N_{ref})
Ncb=min(N,Nref),其中
N
r
e
f
=
⌊
T
B
S
L
B
R
M
C
×
R
L
B
R
M
⌋
N_{ref}=\left \lfloor \frac{TBS_{LBRM}} {C \times R_{LBRM}} \right \rfloor
Nref=⌊C×RLBRMTBSLBRM⌋,
C
C
C为CB的数目,
R
L
B
R
M
=
2
/
3
R_{LBRM}=2/3
RLBRM=2/3,
T
B
S
L
B
R
M
TBS_{LBRM}
TBSLBRM暂时不解释。
如果接收端不使用有限缓冲区( I L B R M = 0 I_{LBRM}=0 ILBRM=0),则 N c b = N N_{cb}=N Ncb=N,即循环缓冲区的大小等于编码后的长度( B G 1 , 66 Z ; B G 2 , 50 Z BG1,66Z;BG2,50Z BG1,66Z;BG2,50Z),其中cb是Circular Buffer的缩写,LBRM是limited buffer Rate Matching的缩写。
Redundant version (RV)
不同的RV版本号指示了循环缓冲区中的不同起始位置。具体来说,如下表所示:
为了进一步解释,以接收端不使用有限缓冲区速率匹配为例,RV的起始位置如下图所示:
总结来看,当使用不同的RV版本时,从循环buffer中不同的位置开始挑选比特。
- RV0/RV3
- BG1的信息比特 20 Z 20Z 20Z,校验比特 46 Z 46Z 46Z;BG2的信息比特 8 Z 8Z 8Z,校验位 42 Z 42Z 42Z。
- RV 0和RV 3可以包含全部的信息比特以及部分校验比特,因此可以进行自解码。
最后需要决定从循环缓冲区中取出多少比特。
假设可用的RE数目为
N
R
E
N_{RE}
NRE,调制阶数为
Q
m
Q_{m}
Qm,则需要从循环缓冲区中取出
N
R
E
×
Q
m
N_{RE}\times Q_{m}
NRE×Qm个比特。
Bit interleaver
NR中采用的是行数等于调制阶数的行列交织器,采用按行写入,按列读出的方式。示意图如下所示:
例子
举个例子说明上述流程。
假设PUSCH信道,占用1个PRB,14个OFDM符号,’1+1‘DMRS,使用Table 6.1.4.1-1(q=2)作为MCS表格,选择MCS index 0,即采用QPSK调制,码率
R
×
1024
=
120
R\times 1024=120
R×1024=120,单传输层传输
v
=
1
v=1
v=1,高层信令的开销
N
o
h
P
R
B
=
0
N_{oh}^{PRB}=0
NohPRB=0,接收端不采用有限缓冲区进行速率匹配
I
L
B
R
M
=
0
I_{LBRM}=0
ILBRM=0。
-
计算 N R E N_{RE} NRE
N R E ′ = 12 × 14 − 14 × 2 = 144 N_{RE}^{'}=12\times14-14\times2=144 NRE′=12×14−14×2=144, N R E = m i n ( 156 , N R E ′ ) × n P R B = 144 N_{RE}=min(156,N_{RE}^{'})\times n_{PRB}=144 NRE=min(156,NRE′)×nPRB=144。 -
计算 N i n f o N_{info} Ninfo
N i n f o = N R E ⋅ R ⋅ Q m ⋅ v = 144 ⋅ 0.1172 ⋅ 2 ⋅ 1 = 33.75 N_{info}=N_{RE} \cdot R\cdot Q_{m}\cdot v=144\cdot 0.1172\cdot 2\cdot 1=33.75 Ninfo=NRE⋅R⋅Qm⋅v=144⋅0.1172⋅2⋅1=33.75。 -
由于 N i n f o < 3824 N_{info}<3824 Ninfo<3824,采用 N i n f o ′ = m a x ( 24 , 2 n × ⌊ N i n f o 2 n ⌋ ) N_{info}^{'}=max(24,2^{n}\times\left \lfloor \frac{N_{info}}{2^{n}} \right \rfloor) Ninfo′=max(24,2n×⌊2nNinfo⌋),其中 n = m a x ( 3 , ⌊ l o g 2 ( N i n f o ) ⌋ − 6 ) n=max(3,\left \lfloor {log_2(N_{info})} \right \rfloor-6) n=max(3,⌊log2(Ninfo)⌋−6)
n = m a x ( 3 , ⌊ l o g 2 ( 33.75 ⌋ − 6 ) = 3 n=max(3,\left \lfloor {log_2(33.75} \right \rfloor-6)=3 n=max(3,⌊log2(33.75⌋−6)=3, N i n f o ′ = m a x ( 24 , 2 3 × 4 ) = 32 N_{info}^{'}=max(24,2^{3}\times4)=32 Ninfo′=max(24,23×4)=32 -
利用Table 5.1.3.2-1确定TB size的大小,即不小于 N i n f o ′ N_{info}^{'} Ninfo′
TB size=32 (Index=2) -
选择BG以及确定是否需要CB segmentation
TB size<292,选择BG2;TB size<3824,不需要CB segmentation。 -
添加TB级别CRC
TB size+TB CRC=32+16=48 bits -
确定提升值Z的大小。
K b = 52 − 42 = 10 , K b ⋅ Z ≥ T B S + T B C R C K_b=52-42=10,K_{b}\cdot Z \ge TBS+TB_{CRC} Kb=52−42=10,Kb⋅Z≥TBS+TBCRC, 即 10 ⋅ Z ≥ 48 10\cdot Z\ge 48 10⋅Z≥48,因此 Z = 8 Z=8 Z=8。 -
确定需要的(填充)零比特的大小
K b ⋅ Z − T B S − T B C R C = 80 − 48 = 32 K_b \cdot Z-TBS-TB_{CRC}=80-48=32 Kb⋅Z−TBS−TBCRC=80−48=32 bit -
确定循环缓冲区的大小
N c b = ( N b − 2 ) × Z = ( 52 − 2 ) ⋅ 8 = 400 N_{cb}=(N_{b}-2)\times Z=(52-2)\cdot 8=400 Ncb=(Nb−2)×Z=(52−2)⋅8=400 bit -
确定不同RV 的起始位置
RV id | 起始bit |
---|---|
0 | 0 |
1 | 13*8=104 |
2 | 25*8=200 |
3 | 43*8=344 |
- 确定需要从循环缓冲器取出的比特长度
N R E = 144 , Q m = 2 N_{RE}=144,Q_m=2 NRE=144,Qm=2,需要拿出 N R E ⋅ Q m = 288 N_{RE}\cdot Q_{m}=288 NRE⋅Qm=288比特。对于不同的RV id,从循环缓冲区中取出的比特长度如下表所示:
RV id | 所需bit位置 |
---|---|
0 | 0~287 |
1 | 104~391 |
2 | 200~400, 0~86(second round) |
3 | 344~400, 0~230(second round) |
- 将取出的比特放入行列交织器,并把每一列的比特进行QPSK调制。