参考资料:3GPP 38.212 Clause 5.4.2
本文主要对协议中速率匹配部分进行翻译并加了一些解释便于理解。速率匹配可以结合HARQ一起学习。
对于每个码块,LDPC码分别完成速率匹配,速率匹配由比特选择和比特交织两部分组成。比特选择的目的 为提取合适数量的编码比特以匹配物理层分配的资源,同时产生不同的用于HARQ进程的冗余版本(Redundancy Version, RV) 。因为PDSCH上传输的比特数量不仅依赖于分配的RB数量和OFDM符号数,也 依赖于用于其他目的的重叠的RE的数量,例如,参考信号、控制信道或系统消息。
速率匹配的输入序列为 d 0 , d 1 , d 2 , . . . , d N − 1 d_0,d_1,d_2,...,d_{N-1} d0,d1,d2,...,dN−1(信号编码后得到的序列),经过速率匹配后输出的序列用 f 0 , f 1 , . . . f E − 1 f_0,f_1,...f_{E-1} f0,f1,...fE−1表示。
比特选择
将第
r
r
r个码块中信号编码后得到的序列
d
0
,
d
1
,
d
2
,
.
.
.
,
d
N
−
1
d_0,d_1,d_2,...,d_{N-1}
d0,d1,d2,...,dN−1写入长度为
N
c
b
N_{cb}
Ncb的循环缓存区。针对第
r
r
r个码块,若
I
L
B
R
M
=
0
I_{LBRM}=0
ILBRM=0,则令
N
c
b
=
N
N_{cb}=N
Ncb=N;否则
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\cdot R_{LBRM}} \right \rfloor
Nref=⌊C⋅RLBRMTBSLBRM⌋,
R
L
B
R
M
=
2
/
3
R_{LBRM}=2/3
RLBRM=2/3。
将第 r r r个码块速率匹配后的序列长度表示为 E r E_r Er,其中 E r E_r Er的值确定方法如下:
j = 0;
for r = 0:C-1
if the r-th coded block is not scheduled for transmission as indicated by CBGTI according to Clause 5.1.7.2 for DL-SCH and 6.1.5.2 for UL-SCH in [6, TS 38.214]
%CBGTI(CBG Transmission Information): Indicate which CBG need to be retransmitted.
Er = 0;
else
if j <= C'-mod(G/(N_L*Q_m),C')-1 % G/(N_L*Q_m)无法整除C’时,需要有部分码块组bit数多一位,此处令后面几个码块多一位
Er = N_L * Q_m * floor(G/N_L*Q_m*C');
else
Er = N_L * Q_m * ceil(G/N_L*Q_m*C');
end
j = j + 1;
end
end
%N_L:传输层数
%Q_m:调制阶数
%G:传输bit总数
%C':若DCI调度信息中不包括CBGTI,C'= C;否则C'为调度的码块数
令 r v i d rv_{id} rvid 表示传输冗余版本数,其中 r v i d ∈ { 0 , 1 , 2 , 3 } rv_{id}\in\left\{0,1,2 ,3\right\} rvid∈{0,1,2,3},比特选择输出序列为 e k e_k ek, k = 0 , 1 , 2 , . . . , E − 1 k=0,1,2,...,E-1 k=0,1,2,...,E−1, k 0 k_0 k0为不同冗余版本的开始位置, k 0 k_0 k0取值见38.212中表格,比特选择输出序列生成方法如下:
k = 0;
j = 0;
while k < E
if d[mod(k0+j,N_cb)] != <NULL>
e[k] = d[mod(k0+j,N_cb)];
k = k + 1;
end
j = j + 1;
end
每个冗余版本都是由在速率匹配过程中存储的循环缓冲区中的比特构建的,每个冗余版本比特如下所示:
比特交织
比特选择输出序列 e 0 , e 1 , e 2 , . . . , e E − 1 e_0,e_1,e_2,...,e_{E-1} e0,e1,e2,...,eE−1经过交织后得到速率匹配的输出序列 f 0 , f 1 , f 2 , . . . , f E − 1 f_0,f_1,f_2,...,f_{E-1} f0,f1,f2,...,fE−1,交织方法如下:
for j = 0 : E/Q_m -1
for i = 0 : Q_m - 1
f[i + j*Q_m] = e[i*E/Q_m + j];
end
end