UCI on PUSCH

参考文献:
38.213 v15.10.0 9.3 UCI reporting in PUSCH
38.212 v15.10.0 6.3.2.4 Rate matching
38.212 v15.10.0 6.2.7 Data and control multiplexing

Introduction

之前写过一篇计算UCI on PUSCH相关的文章,主要介绍了6.3.2.4的内容,即如何计算UCI所需要的物理资源,并且按照Matlab官网给出的UCI on PUSCH的函数,举了两个例子。本文主要介绍6.2.7,如何将UCI编码后的比特与UL-SCH的编码后比特进行复用,其实也是上篇文章所举例子的协议对应部分。

Background

其实无论是UL-SCH信息,UCI信息,大致流程都包含生成原始比特,生成编码后比特,速率匹配,生成调制符号,映射进入RE。
举个简单的例子,假如一个UL-SCH的TB原始比特大小是32,生成的编码后比特是416,调制方式采用QPSK,有144个RE可用于UL-SCH的传输,那么就需要拿出144*2=288个UL-SCH编码后比特进行速率匹配,然后经过QPSK生成144个调制符号,再分别放入144个RE中。
对于UCI来说,也是同样的道理。但是当在同一个slot上同时传输UL-SCH,UCI时,就需要一些新的规则,让UL-SCH/UCI同时完成生成原始比特到映射进入RE的流程,所以就有了6.2.7节。
需要说明的是,UCI on PUSCH时,UCI与UL-SCH使用相同的调制阶数,该调制阶数由计算UL-SCH TB大小时的MCS决定。
6.2.7节主要采用伪码的表达形式,不易阅读。本篇文章也是学习过程的一个记录。

Relationship with other sections

简要说明6.2.7节与其他节的一些关系。

在6.3.2.4 Rate Matching(6.3 Uplink control information),针对UCI的速率匹配,给出了 Q A C K ′ Q_{ACK}^{'} QACK, Q C S I − 1 ′ Q_{CSI-1}^{'} QCSI1, Q C S I − 2 ′ Q_{CSI-2}^{'} QCSI2的计算方法,这三个参数,就是计算某种类型的UCI占据的RE数目的方法。根据某种UCI类型占据的RE数目以及UL-SCH的调制阶数,就可以知道UCI速率匹配需要拿多少编码后比特。ACK,CSI-part 1, CSI-Part 2的速率匹配也是独立进行的。

在6.2.5 Rate Matching (6.2 Uplink Shared Channel),给出了如何对UL-SCH进行速率匹配的过程。这里需要特别强调的一个点,对于HARQ-ACK原始比特>2 bits或者传输CSI的情况,UCI on PUSCH的过程会影响到UL-SCH的速率匹配。这是协议没有特别说明的一个问题,也很容易让人误解。其历史可追溯到2017年10月份的RAN-1 AH1709会议,R1-171692的6.3.2.3,达成的agreement。

Agreements:
Confirm the working assumption:
For slot-based scheduling, for HARQ-ACK with more than 2 bits, PUSCH is rate-matched.
For slot-based scheduling, for HARQ-ACK with up to 2 bits, PUSCH is punctured.

举个例子:
假设一个slot内可以传输288个编码后比特,只有HARQ-ACK与UL-SCH在该slot上传输。
若HARQ-ACK编码前比特大于2(=3 bits),取 β o f f s e t P U S C H \beta_{offset}^{PUSCH} βoffsetPUSCH=5,编码,速率匹配后有54个比特,那么UL-SCH进行速率匹配时只有288-54=234个比特。
若HARQ-ACK编码前比特等于2(=2 bits),取 β o f f s e t P U S C H \beta_{offset}^{PUSCH} βoffsetPUSCH=5,编码,速率匹配后有36个比特,那么UL-SCH进行速率匹配时仍有288个比特。

Assumption for this article

为了方便后文说明问题,前文后文的举例假设均如下。

一次调度一个slot内的14个OFDM符号,1个RB,DMRS配置为1+1单列配置,DMRS在第2个以及第11个OFDM符号上,MCS=4 (QPSK, Target code rate=308/1024, Table 6.1.4.1-1: MCS index table for PUSCH with transform precoding and 64QAM,q=2), TBS=32 bits,不使能跳频,单层传输。
共有(14-2)*12=144 RE用于传输,可传输 144 ∗ 2 = 288 144*2=288 1442=288 个编码后比特。

Case 1: HARQ-ACK<=2 bits, HARQ-ACK=2, β o f f s e t H A R Q − A C K \beta_{offset}^{HARQ-ACK} βoffsetHARQACK=5, 对HARQ进行编码,速率匹配后有36个比特.

Case 2: HARQ-ACK>2 bits, HARQ-ACK=3, β o f f s e t H A R Q − A C K \beta_{offset}^{HARQ-ACK} βoffsetHARQACK=5, 对HARQ进行编码,速率匹配后有54个比特.

Case 1和Case 2中均有:

CSI-Part 1=5, β o f f s e t C S I − P a r t 1 \beta_{offset}^{CSI-Part 1} βoffsetCSIPart1=1.375, 对CSI-Part 1进行编码,速率匹配后,有26个比特;

CSI-Part 2=6, β o f f s e t C S I − P a r t 2 \beta_{offset}^{CSI-Part 2} βoffsetCSIPart2=1.375, 对CSI-Part 2进行编码,速率匹配后,有30个比特.

6.2.7 Data and control multiplexing

Input sequence

g 0 U L − S C H , g 1 U L − S C H , . . . , g G U L − S C H − 1 U L − S C H g_{0}^{UL-SCH}, g_{1}^{UL-SCH},...,g_{G^{UL-SCH}-1}^{UL-SCH} g0ULSCH,g1ULSCH,...,gGULSCH1ULSCH :UL-SCH速率匹配后的序列

g 0 A C K , g 1 A C K , . . . , g G A C K − 1 A C K g_{0}^{ACK}, g_{1}^{ACK},...,g_{G^{ACK}-1}^{ACK} g0ACK,g1ACK,...,gGACK1ACK :HARQ-ACK速率匹配后的序列

g 0 C S I − P a r t 1 , g 1 C S I − P a r t 1 , . . . , g G C S I − P a r t 1 − 1 C S I − P a r t 1 g_{0}^{CSI-Part 1}, g_{1}^{CSI-Part 1},...,g_{G^{CSI-Part 1}-1}^{CSI-Part 1} g0CSIPart1,g1CSIPart1,...,gGCSIPart11CSIPart1 :CSI-Part 1速率匹配后的序列

g 0 C S I − P a r t 2 , g 1 C S I − P a r t 2 , . . . , g G C S I − P a r t 2 − 1 C S I − P a r t 2 g_{0}^{CSI-Part 2}, g_{1}^{CSI-Part 2},...,g_{G^{CSI-Part 2}-1}^{CSI-Part 2} g0CSIPart2,g1CSIPart2,...,gGCSIPart21CSIPart2 :CSI-Part 2速率匹配后的序列

g 0 , g 1 , . . . , g G − 1 g_0,g_1, ..., g_{G-1} g0,g1,...,gG1 :UCI与UL-SCH 混合后的序列

举例
Case 1: G U L − S C H G^{UL-SCH} GULSCH=288-26-30=232, G A C K G^{ACK} GACK=36, G C S I − P a r t 1 G^{CSI-Part 1} GCSIPart1=26, G C S I − P a r t 2 G^{CSI-Part 2} GCSIPart2=30, G = 288 G=288 G=288
Case 1: G U L − S C H G^{UL-SCH} GULSCH=288-54-26-30=178, G A C K G^{ACK} GACK=54, G C S I − P a r t 1 G^{CSI-Part 1} GCSIPart1=26, G C S I − P a r t 2 G^{CSI-Part 2} GCSIPart2=30, G = 288 G=288 G=288.

Notation Before Step 1-6

l l l: OFDM Symbols (OS) index, 包含全部的OS。举例:Case1&2, l = 0 , 1 , 2 , . . . , 13. l=0,1,2,...,13. l=0,1,2,...,13.
k k k: Subcarrier (SC) index, 包含某个RB内的全部子载波。举例:Case1&2, k = 0 , 1 , 2 , . . . , 11. k=0,1,2,...,11. k=0,1,2,...,11.

Φ l U L − S C H \Phi_{l}^{UL-SCH} ΦlULSCH: 可用于传输数据的,第 l l l个OS符号包含的全部RE集合,集合按照SC升序排列,其中 l = 0 , 1 , 2 , . . . , 13 l=0,1,2,...,13 l=0,1,2,...,13

M s c U L − S C H ( l ) M_{sc}^{UL-SCH}(l) MscULSCH(l): 第 l l l个OS符号包含的全部RE集合中包含的元素数目,其中 l = 0 , 1 , 2 , . . . , 13 l=0,1,2,...,13 l=0,1,2,...,13

Φ l U L − S C H ( j ) \Phi_{l}^{UL-SCH}(j) ΦlULSCH(j): 集合 Φ l U L − S C H \Phi_{l}^{UL-SCH} ΦlULSCH中第 j j j个元素。

Φ l U C I \Phi_{l}^{UCI} ΦlUCI: 可用于传输UCI的,第 l l l个OS符号包含的全部RE集合,集合按照SC升序排列,其中 l = 0 , 1 , 2 , . . . , 13 l=0,1,2,...,13 l=0,1,2,...,13

M S C U C I ( l ) M_{SC}^{UCI}(l) MSCUCI(l): 第 l l l个OS符号包含的全部RE集合中包含的元素数目,其中 l = 0 , 1 , 2 , . . . , 13 l=0,1,2,...,13 l=0,1,2,...,13

Φ l U C I ( j ) \Phi_{l}^{UCI}(j) ΦlUCI(j): 集合 Φ l U C I \Phi_{l}^{UCI} ΦlUCI中第 j j j个元素。

当在第l个符号放置了DMRS,则 Φ l U C I = ∅ \Phi_{l}^{UCI}=\empty ΦlUCI=
当第l个符号未放置DMRS,则 Φ l U C I = Φ l U L − S C H \Phi_{l}^{UCI}=\Phi_{l}^{UL-SCH} ΦlUCI=ΦlULSCH

一些理解:

  1. Φ l U L − S C H \Phi_{l}^{UL-SCH} ΦlULSCH Φ l U C I \Phi_{l}^{UCI} ΦlUCI并不是最后真正传输UL-SCH或者UCI的资源集合,只是可能的/潜在的集合。决定UL-SCH或UCI的传输资源集合,需要Step1-6来确定。 后续也会根据这两个集合进行一系列操作。
  2. 如果一个OS符号上传输了DMRS,则一定不可以用来传输UCI,即 Φ l U C I = ∅ \Phi_{l}^{UCI}=\empty ΦlUCI=
Frequency Hopping Configured or not

若UCI on PUSCH时,同时配置了Intra-slot FH,则需要逐个Hop去进行映射;本文的举例只讨论不配置Intra-slot的情况。

先从Notation的物理意义开始。

N h o p P U S C H N_{hop}^{PUSCH} NhopPUSCH:跳频位置数目。使能跳频, N h o p P U S C H N_{hop}^{PUSCH} NhopPUSCH=2;不使能跳频, N h o p P U S C H N_{hop}^{PUSCH} NhopPUSCH=1.

l ( 1 ) l^{(1)} l(1), l ( 2 ) l^{(2)} l(2):第一/第二跳上,可以放置HARQ信息的OS index, 从第一个DMRS之后的OS开始。举例:不使能跳频,DMRS在第二个OS上,则 l ( 1 ) = 3 , 4 , 5 , . . . , 13. l^{(1)}=3,4,5,...,13. l(1)=3,4,5,...,13.

l C S I ( 1 ) l_{CSI}^{(1)} lCSI(1) l C S I ( 2 ) l_{CSI}^{(2)} lCSI(2) :第一/第二跳上,可以放置CSI信息的OS index, 从第一个DMRS之后的OS开始。举例:DMRS在第二个OS上,则 l ( 1 ) = 0 , 1 , 2 , . . . , 13. l^{(1)}=0,1,2,...,13. l(1)=0,1,2,...,13.

M 1 M_1 M1:第一跳上,潜在用于传输UCI的RE数目
M 2 M_2 M2:第二跳上,潜在用于传输UCI的RE数目
M 3 M_3 M3:第一跳上,潜在用于传输HARQ的RE数目

N s y m b , h o p P U S C H ( 1 ) N_{symb,hop}^{PUSCH}(1) Nsymb,hopPUSCH(1), N s y m b , h o p P U S C H ( 2 ) N_{symb,hop}^{PUSCH}(2) Nsymb,hopPUSCH(2):第一跳和第二跳的OS符号数目。不使能跳频时, N s y m b , h o p P U S C H ( 1 ) = N s y m b , a l l P U S C H N_{symb,hop}^{PUSCH}(1)=N_{symb,all}^{PUSCH} Nsymb,hopPUSCH(1)=Nsymb,allPUSCH, 第一跳OS符号数目等于OS符号总长度。

G A C K G^{ACK} GACK, G ( 1 ) A C K G_{(1)}^{ACK} G(1)ACK, G ( 2 ) A C K G_{(2)}^{ACK} G(2)ACK: 速率匹配后,HARQ的总比特数目;第一跳传输的HARQ比特数目;第二跳传输的HARQ比特数目。

G C S I − P a r t 1 G^{CSI-Part 1} GCSIPart1, G ( 1 ) C S I − P a r t 1 G_{(1)}^{CSI-Part 1} G(1)CSIPart1, G ( 2 ) C S I − P a r t 1 G_{(2)}^{CSI-Part 1} G(2)CSIPart1: 速率匹配后,CSI-Part 1的总比特数目;第一跳传输的CSI-Part 1比特数目;第二跳传输的CSI-Part 1比特数目。

G C S I − P a r t 2 G^{CSI-Part 2} GCSIPart2, G ( 1 ) C S I − P a r t 2 G_{(1)}^{CSI-Part 2} G(1)CSIPart2, G ( 2 ) C S I − P a r t 2 G_{(2)}^{CSI-Part 2} G(2)CSIPart2: 速率匹配后,CSI-Part 2的总比特数目;第一跳传输的CSI-Part 2比特数目;第二跳传输的CSI-Part 2比特数目。

N L N_{L} NL:传输层数。举例: N L N_{L} NL=1 for this article.

一些理解:

  1. 本部分最重要的是对于 l 1 l^{1} l1 l C S I 1 l^{1}_{CSI} lCSI1的理解。HARQ与CSI能够放置的起始OS符号不同的。HARQ的每一跳都从DMRS之后的符号开始,CSI则是从第一个不携带DMRS的OS符号开始。
Introduction for Step 1-Step 6

简单介绍Step 1到6分别为了什么:
Step 1: 适用于HARQ小于等于2 bits的情况,寻找此时HARQ 映射的RE。

Step 2: 适用于HARQ大于2 bits的情况,寻找此时HARQ映射对应的RE,并把 g 0 A C K , g 1 A C K , . . . , g G A C K − 1 A C K g_{0}^{ACK}, g_{1}^{ACK},...,g_{G^{ACK}-1}^{ACK} g0ACK,g1ACK,...,gGACK1ACK序列赋值给新的序列 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v,并把HARQ(>2 bit)已经占据的RE从 Φ l U L − S C H \Phi_{l}^{UL-SCH} ΦlULSCH以及 Φ l U C I \Phi_{l}^{UCI} ΦlUCI排除出去。

Step 3: 针对CSI,寻找此时CSI映射对应的RE,并把 g 0 C S I − P a r t 1 , g 1 C S I − P a r t 1 , . . . , g G C S I − P a r t 1 − 1 C S I − P a r t 1 g_{0}^{CSI-Part 1}, g_{1}^{CSI-Part 1},...,g_{G^{CSI-Part 1}-1}^{CSI-Part 1} g0CSIPart1,g1CSIPart1,...,gGCSIPart11CSIPart1,以及 g 0 C S I − P a r t 2 , g 1 C S I − P a r t 2 , . . . , g G C S I − P a r t 2 − 1 C S I − P a r t 2 g_{0}^{CSI-Part 2}, g_{1}^{CSI-Part 2},...,g_{G^{CSI-Part 2}-1}^{CSI-Part 2} g0CSIPart2,g1CSIPart2,...,gGCSIPart21CSIPart2序列赋值给新的序列 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v,并将CSI-Part 1和CSI-Part 2已经占据的RE从 Φ l U L − S C H \Phi_{l}^{UL-SCH} ΦlULSCH以及 Φ l U C I \Phi_{l}^{UCI} ΦlUCI排除出去。

Step 4: 针对UL-SCH,将 g 0 U L − S C H , g 1 U L − S C H , . . . , g G U L − S C H − 1 U L − S C H g_{0}^{UL-SCH}, g_{1}^{UL-SCH},...,g_{G^{UL-SCH}-1}^{UL-SCH} g0ULSCH,g1ULSCH,...,gGULSCH1ULSCH赋值给新的序列 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v

Step 5: 适用于HARQ小于等于2 bits的情况,把 g 0 A C K , g 1 A C K , . . . , g G A C K − 1 A C K g_{0}^{ACK}, g_{1}^{ACK},...,g_{G^{ACK}-1}^{ACK} g0ACK,g1ACK,...,gGACK1ACK序列赋值给新的序列 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v

Step 6: 对新序列 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v重新排序,得到序列 g 0 , g 1 , . . . , g G − 1 g_0,g_1, ..., g_{G-1} g0,g1,...,gG1

Step 1

在这里插入图片描述
Step1的第一步,是重新定义了两个RE集合, Φ ‾ l U L − S C H {\overline{\Phi}}_{l}^{UL-SCH} ΦlULSCH, Φ ‾ l U C I {\overline{\Phi}}_{l}^{UCI} ΦlUCI,并计算了集合中包含的元素个数。

这步操作,是为了方便标记Step 1-Step5的找对应RE资源的过程,从Step2开始,每找到一些资源,就会从 Φ ‾ l U L − S C H {\overline{\Phi}}_{l}^{UL-SCH} ΦlULSCH, Φ ‾ l U C I {\overline{\Phi}}_{l}^{UCI} ΦlUCI中除去一些元素。等到Step6,会重新用 Φ l U L − S C H \Phi_{l}^{UL-SCH} ΦlULSCH g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v进行排序,Step6要求对所有RE进行遍历。

在这里插入图片描述
特别说明,Step 1只适用于HARQ小于等于2bits的情况。在HARQ小于等于2bits前提下,计算 Q A C K ′ Q^{'}_{ACK} QACK时,将 o A C K o_{ACK} oACK设置为2; G r v d A C K G^{ACK}_{rvd} GrvdACK是速率匹配后,能够传输的HARQ-ACK大小;如果配置了跳频,就将 G r v d A C K G^{ACK}_{rvd} GrvdACK一分为二,每一半的coded bits of HARQ记作 G r v d A C K ( 1 ) G^{ACK}_{rvd}(1) GrvdACK(1), G r v d A C K ( 2 ) G^{ACK}_{rvd}(2) GrvdACK(2);如果没有配置跳频,就不用分了。

在这里插入图片描述
在这里插入图片描述
这里引入了计数器 m c o u n t A C K m_{count}^{ACK} mcountACK,以及 Φ ‾ l r v d {\overline{\Phi}}_{l}^{rvd} Φlrvd集合。通过计数器表明是否已经完成了对 g 0 A C K , g 1 A C K , . . . , g G A C K − 1 A C K g_{0}^{ACK}, g_{1}^{ACK},...,g_{G^{ACK}-1}^{ACK} g0ACK,g1ACK,...,gGACK1ACK的操作。 Φ ‾ l r v d {\overline{\Phi}}_{l}^{rvd} Φlrvd初始设置为空集,后续通过不断的并入其他元素,并入给这部分HARQ预留的RE。

在这里插入图片描述
这组for循环中,包含了两个if以及一个for。分别来看一下对应的物理含义。
最外层for循环是为了跳频设定的,当不配置跳频时,只循环一次就可以了。
l = l i l=l^{i} l=li这句保证了HARQ的资源是从第一个携带DMRS的OS符号的后一个OS符号开始映射的。
while循环的判断条件是,计数器中的number of coded bits for HARQ是否超过了num of coded bits for HARQ的总量。
两个if的判断条件:判断剩余的number of coded bits for HARQ是否超过了当前OS符号能够承载的最大coded bits。

  • 如果剩余的coded bits 超过了当前符号能够承载的最大coded bits,就令 d = 1 d=1 d=1,并统计此时用的RE数目 m c o u n t R E m_{count}^{RE} mcountRE d d d是此轮寻找RE的间隔,后面会对 d d d进行进一步说明。当 d = 1 d=1 d=1,RE是无间隔的。
  • 如果剩余的coded bits 没超过当前符号能够承载的最大coded bits,说明在该OS符号上就能结束HARQ coded bits的映射。此时,寻找RE是插空式的。插空间隔是d,并统计此时用的RE数目 m c o u n t R E m_{count}^{RE} mcountRE

在这里插入图片描述
外层for循环中包含的for是用来找到这部分HARQ对应的RE的,并且把此轮已经完成放置的HARQ coded bits加到计数器内。
l = l + 1 l=l+1 l=l+1意味着开始在下一个OS符号上寻找RE。
将本文的Case 1,按照上述伪码运行一遍。
l = 3 l=3 l=3,在第三个OS上,有12个RE。
此时, m c o u n t A C K = 0 m_{count}^{ACK}=0 mcountACK=0, G r v d A C K = 36 G_{rvd}^{ACK}=36 GrvdACK=36,第一次进入while循环; M ‾ s c U C I ( 3 ) = 12 {\overline{M}}_{sc}^{UCI}(3)=12 MscUCI(3)=12,进入第一个if; N L = 1 N_{L}=1 NL=1, Q m = 2 Q_{m}=2 Qm=2 36 − 0 > 12 ∗ 1 ∗ 2 36-0>12*1*2 360>1212,进入第二个if,d=1, m c o u n t R E = 12 m_{count}^{RE}=12 mcountRE=12;跳过第三个if,进入内层for循环,j从0到11,d=1,循环12次后,第三个OS的第0到11个RE全部被并入 Φ ‾ l r v d {\overline{\Phi}}_{l}^{rvd} Φlrvd,计数器 m c o u n t A C K = 24 m_{count}^{ACK}=24 mcountACK=24, l = l + 1 = 4 l=l+1=4 l=l+1=4

此时, m c o u n t A C K = 24 m_{count}^{ACK}=24 mcountACK=24, G r v d A C K = 36 G_{rvd}^{ACK}=36 GrvdACK=36,第二次进入while循环; M ‾ s c U C I ( 4 ) = 12 {\overline{M}}_{sc}^{UCI}(4)=12 MscUCI(4)=12,进入第一个if; N L = 1 N_{L}=1 NL=1, Q m = 2 Q_{m}=2 Qm=2 36 − 24 < 12 ∗ 1 ∗ 2 36-24<12*1*2 3624<1212,跳过第二个if,进入第三个if, d = 24 / 12 = 2 d=24/12=2 d=24/12=2, m c o u n t R E = ( 36 − 24 ) / 2 = 6 m_{count}^{RE}=(36-24)/2=6 mcountRE=(3624)/2=6;跳进入内层for循环,j从0到5,d=2,循环6次后,第四个OS的第0/2/4/6/8/10个RE全部被并入 Φ ‾ l r v d {\overline{\Phi}}_{l}^{rvd} Φlrvd,计数器 m c o u n t A C K = 36 m_{count}^{ACK}=36 mcountACK=36,结束while循环。

在这里插入图片描述
如果HARQ大于2bit,就不用上述的操作了,直接将 Φ ‾ l r v d {\overline{\Phi}}_{l}^{rvd} Φlrvd记作空集,最后记录 Φ ‾ l r v d {\overline{\Phi}}_{l}^{rvd} Φlrvd集合中包含的元素数目 M ‾ {\overline{M}} M.

Step 2

适用于HARQ大于2bit的情况。这步与Step1类似的步骤就不赘述了。

在这里插入图片描述
第一个for循环内:有一个从 Φ ‾ l U C I {\overline{\Phi}}_{l}^{UCI} ΦlUCI中命名k的操作,个人认为,这步记作 k = j ∗ d k=j*d k=jd更合理,因为k是一个数值, Φ ‾ l U C I {\overline{\Phi}}_{l}^{UCI} ΦlUCI是一个集合。该层循环变量是每个RE。
第二个for循环内,出现新的序列,记法是 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v,物理含义:第l个符号上,第k个子载波,第v层,传输的coded bits。等号右边,从 g 0 A C K , g 1 A C K , . . . , g G A C K − 1 A C K g_{0}^{ACK}, g_{1}^{ACK},...,g_{G^{ACK}-1}^{ACK} g0ACK,g1ACK,...,gGACK1ACK 依次取。总计数器加1,该跳的计数器加1。该层循环变量是每层传输的每个coded bits。

在这里插入图片描述
在这里插入图片描述
上述步骤主要是为了在Step 2-5的操作中,除去已经被HARQ(>2 bits)占据的RE。变量 Φ ‾ l , t m p U C I {\overline{\Phi}}_{l, tmp}^{UCI} Φl,tmpUCI是在Step2步骤时,占据的RE。先将 Φ ‾ l , t m p U C I {\overline{\Phi}}_{l, tmp}^{UCI} Φl,tmpUCI设置为空集,然后,按照 j ∗ d j*d jd Φ ‾ l U C I {\overline{\Phi}}_{l}^{UCI} ΦlUCI集合中挑选一些元素并入 Φ ‾ l , t m p U C I {\overline{\Phi}}_{l, tmp}^{UCI} Φl,tmpUCI。完成并入操作后,从 Φ ‾ l U C I {\overline{\Phi}}_{l}^{UCI} ΦlUCI Φ ‾ l U L − S C H {\overline{\Phi}}_{l}^{UL-SCH} ΦlULSCH将属于 Φ ‾ l , t m p U C I {\overline{\Phi}}_{l, tmp}^{UCI} Φl,tmpUCI的元素排除,并重新统计 Φ ‾ l U C I {\overline{\Phi}}_{l}^{UCI} ΦlUCI Φ ‾ l U L − S C H {\overline{\Phi}}_{l}^{UL-SCH} ΦlULSCH中的元素数目。

按照Case 2运行一下该部分的算法:
G A C K = 54 G_{ACK}=54 GACK=54,在第一次和第二次进入while循环时,d=1, m c o u n t R E = 12 m_{count}^{RE}=12 mcountRE=12,占据了第三个,第四个OS上的全部RE,也意味着 Φ ‾ l , t m p U C I {\overline{\Phi}}_{l, tmp}^{UCI} Φl,tmpUCI包含了第三个/第四个OS的全部RE。
在第三次进入while循环,还剩 54 − 12 ∗ 2 − 12 ∗ 2 = 6 54-12*2-12*2=6 54122122=6个比特, d = 24 / 6 = 4 d=24/6=4 d=24/6=4 m c o u n t R E = 6 / 2 = 3 m_{count}^{RE}=6/2=3 mcountRE=6/2=3,占据了第五个OS上的第0,4,8个RE。

g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v序列的输出结果, g ‾ 2 , 0 − 11 , 1 {\overline{g}}_{2,0-11,1} g2,011,1 g ‾ 3 , 0 − 11 , 1 {\overline{g}}_{3,0-11,1} g3,011,1 g ‾ 4 , 0 / 4 / 8 , 1 {\overline{g}}_{4,0/4/8,1} g4,0/4/8,1均为HARQ的coded bits。

Φ ‾ l U C I {\overline{\Phi}}_{l}^{UCI} ΦlUCI Φ ‾ l U L − S C H {\overline{\Phi}}_{l}^{UL-SCH} ΦlULSCH不再包含第二个,第三个OS的全部RE,以及第四个OS的第2、4、8个RE。

Step 3

找到CSI-part 1以及CSI-Part 2的映射RE,并利用 g 0 C S I − P a r t 1 , g 1 C S I − P a r t 1 , . . . , g G C S I − P a r t 1 − 1 C S I − P a r t 1 g_{0}^{CSI-Part 1}, g_{1}^{CSI-Part 1},...,g_{G^{CSI-Part 1}-1}^{CSI-Part 1} g0CSIPart1,g1CSIPart1,...,gGCSIPart11CSIPart1 g 0 C S I − P a r t 2 , g 1 C S I − P a r t 2 , . . . , g G C S I − P a r t 2 − 1 C S I − P a r t 2 g_{0}^{CSI-Part 2}, g_{1}^{CSI-Part 2},...,g_{G^{CSI-Part 2}-1}^{CSI-Part 2} g0CSIPart2,g1CSIPart2,...,gGCSIPart21CSIPart2 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v进行赋值。

步骤与Step2类似,但是需要注意的是:
CSI-Part 1不会被HARQ(<2 bits)打孔。CSI-Part 2会被HARQ(<2 bits)打孔。
在这里插入图片描述

在这里插入图片描述
这里可以看出,在计算 d d d以及 m c o u n t R E m_{count}^{RE} mcountRE时,CSI-Part 1需要去掉Step 1已经占用的RE,而CSI-Part 2不需要去掉Step 1占用的RE。
在这里插入图片描述
在这里插入图片描述
g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v赋值时,k的可取范围,CSI-Part 1与CSI-Part 2也不相同。

还是举个例子:
Case 1: G A C K G^{ACK} GACK=36, G C S I − P a r t 1 G^{CSI-Part 1} GCSIPart1=26, G C S I − P a r t 2 G^{CSI-Part 2} GCSIPart2=30。
Step 1结束后,HARQ-ACK(<2 bits)占据了第三个OS的全部RE,第四个OS的第0/2/4/6/8/10RE。
CSI-Part 1占据第0个OS的全部RE,第1个OS的第0个RE。
CSI-Part 2占据第一个OS的第1-11个RE,已经放置了22个CSI-Part 2 coded bits,还剩了8个CSI-Part 2的coded bits没有放置。第二个OS放置了DMRS,跳过。第三个OS的RE已经被HARQ-ACK(<2)占据,但是,仍旧会分配给CSI-Part 2,输出的 g ‾ 3 , 0 / 3 / 6 / 9 , 1 {\overline{g}}_{3,0/3/6/9,1} g3,0/3/6/9,1是CSI-Part 2。

Step 4

寻找UL-SCH的对应RE,并利用 g 0 U L − S C H , g 1 U L − S C H , . . . , g G U L − S C H − 1 U L − S C H g_{0}^{UL-SCH}, g_{1}^{UL-SCH},...,g_{G^{UL-SCH}-1}^{UL-SCH} g0ULSCH,g1ULSCH,...,gGULSCH1ULSCH g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v进行赋值。
在这里插入图片描述

UL-SCH也会被HARQ(<2 bits)打孔,并且没有了间隔寻找RE的过程(没有计算j或者d的过程),采用无间隔的RE寻找方法。
还是以Case 1举例:
第0个OS,第1个OS的全部RE被CSI-Part 1、2占据了;第2个OS放置了DMRS,不会放置UCI,因此略过;
重点看第3个OS的RE情况,其中,第0/2/4/6/8/10 RE被HARQ-ACK(<2 bits)占据了;CSI-Part 2不会考虑HARQ-ACK(<2 bits)的情况,因此依旧占据第0/3/6/9 RE; UL-SCH只会考虑 CSI-Part 2占据的情况,因此,会占据 1/2/4/5/7/8/10/11个RE。

此时从 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v考虑:
g ‾ 3 , 0 / 3 / 6 / 9 , 1 {\overline{g}}_{3,0/3/6/9,1} g3,0/3/6/9,1是CSI-Part 2, g ‾ 3 , 1 / 2 / 4 / 5 / 7 / 8 / 10 / 11 , 1 {\overline{g}}_{3,1/2/4/5/7/8/10/11,1} g3,1/2/4/5/7/8/10/11,1是UL-SCH。

Step 5

为HARQ小于等于2 bits的情况,把 g 0 A C K , g 1 A C K , . . . , g G A C K − 1 A C K g_{0}^{ACK}, g_{1}^{ACK},...,g_{G^{ACK}-1}^{ACK} g0ACK,g1ACK,...,gGACK1ACK序列赋值给新的序列 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v
在这里插入图片描述

接着Step 4的举例:
Case 1: 第三个OS符号上, g ‾ 3 , 0 / 3 / 6 / 9 , 1 {\overline{g}}_{3,0/3/6/9,1} g3,0/3/6/9,1是CSI-Part 2, g ‾ 3 , 1 / 2 / 4 / 5 / 7 / 8 / 10 / 11 , 1 {\overline{g}}_{3,1/2/4/5/7/8/10/11,1} g3,1/2/4/5/7/8/10/11,1是UL-SCH,但是,第三个OS的RE资源,其实都已经被包含在了 Φ ‾ l r v d {\overline{\Phi}}_{l}^{rvd} Φlrvd中,因此,需要对 g ‾ 3 , 0 − 11 , 1 {\overline{g}}_{3,0-11,1} g3,011,1重新赋值,令其等于HARQ的coded bits。
第四个OS符号上, g ‾ 4 , 0 − 11 , 1 {\overline{g}}_{4,0-11,1} g4,011,1已经是UL-SCH code bits,但是依旧会被HARQ coded bits重新赋值, g ‾ 4 , 0 / 2 / 4 / 6 / 8 / 10 , 1 {\overline{g}}_{4,0/2/4/6/8/10,1} g4,0/2/4/6/8/10,1重新被赋值为HARQ的coded bits。

可以发现,在Step 1计算HARQ-ACK(<=2 bits)的资源;在Step 3-4计算CSI-part 2/UL-SCH的资源,以及对 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v赋值;在Step 5根据Step 1预留的资源,重新对 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v赋值,实现了对CSI-Part 2/UL-SCH的打孔操作。

Step 6

在这里插入图片描述
通过 l , k , v l,k,v l,k,v三层变量循环,输出 g t g_{t} gt。相当于按照 l , k , v l,k,v l,k,v顺序对 g ‾ l , k , v {\overline{g}}_{l,k,v} gl,k,v依次读取,赋值给 g t g_{t} gt

Case 1& Case 2占据RE 示意图

Case 1:
在这里插入图片描述

Case 2:
简单说一下Case 2,Step 2是为了HARQ(>2 bits)的情况找到对应的RE,放置HARQ对应的coded bits。
在Step 2结束后,第三个/第四个OS符号的全部SC均用来放置HARQ-ACK, 第五个OS符号的第0/4/8个子载波用来放置HARQ-ACK,此时 M ‾ s c U C I ( 5 ) = 9 {\overline{M}}_{sc}^{UCI}(5)=9 MscUCI(5)=9 Φ ‾ s c U C I ( 5 ) {\overline{\Phi}}_{sc}^{UCI}(5) ΦscUCI(5)中包含第五个OS符号的第1/2/3/5/6/7/9/10/11个SC(分别对应了从第0个到第8个元素)。
在Step 3之前,CSI-Part 2还剩6 coded bits。利用Step 3的公式 d = 9 ∗ 2 / 6 = 3 d=9*2/6=3 d=92/6=3, m c o u n t R E = 6 / 2 = 3 m_{count}^{RE}=6/2=3 mcountRE=6/2=3,因此取 Φ ‾ s c U C I ( 5 ) {\overline{\Phi}}_{sc}^{UCI}(5) ΦscUCI(5)中的第0,3,6个元素,对应了第五个OS符号的第1/5/9个子载波。

可以看出,HARQ-ACK>2 bits的case不会影响已经放置好的CSI或者UL-SCH。
在这里插入图片描述

Notes

笔者写下这篇文章时,Rel-17已经接近尾声,只觉时光飞逝,物是人非。前行的路上总是错过了太多太多美好,只能把遗憾偷偷藏起,希望下一个Rel更精彩。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐