概述
一 简介
今天给大家介绍一个R16的小topic:SPS——Semi-persistent Scheduling(半持续调度),与传统的Dynamic Scheduling(动态调度)相对应。
首先解释什么是SPS,我们知道目前常用的调度方式是动态调度,也就是一个DCI指示一个PDSCH或PUSCH。UE先检测到一个DCI,然后根据这个DCI的指示,进行PDSCH的接收或者PUSCH的发送,然后再去检测下一个DCI…
而半持续调度顾名思义就是一个DCI或者RRCreconfiguration消息可以指示若干个(持续的)PDSCH或PUSCH。一旦UE收到特定的DCI或RRCreconfiguration消息,则开始周期性的进行PDSCH的接收或PUSCH的发送,直到这种持续性的调度停止。在这段持续性的调度期间,UE不需要再进行DCI的检测,这就是所谓的半持续调度。与动态调度相比,无疑减少了DCI的盲检次数,所以对于UE来说降低了时延和功耗。
本文涉及到的协议内容主要来自于38321、38213、38214和38331:
- 38321为MAC层协议,其中主要介绍到了SPS的MAC层收发过程,即:Transmission and reception without dynamic scheduling;
- 38213和38214为物理层过程,其中会介绍到SPS的激活和物理层收发过程等内容;
- 38331为RRC协议,其中包含SPS的配置等内容。
二 SPS的配置
了解了什么是SPS后,我们首先通过DL为例来介绍SPS的配置。SPS是通过RRCReconfiguration消息当中携带的BWP-DownlinkDedicated IE来进行配置,该配置是一个BWP级别的配置。
我们可以看到信元BWP-DownlinkDedicated会包含sps-Config。值得注意的是多个SPS进程可以同时激活,也就是sps-ConfigToAddModList中可以配置多个sps-Config,并且多个sps-Config可以同时存在,甚至同时处于激活态。
每个sps-Config当中要包含如下一些参数,如:
- nrofHARQ-Processes: SPS的HARQ进程数
- harq-ProcID-Offset: SPS的HARQ进程的ID的offset
- periodicity: SPS的周期,等等…
也就是说SPS PDSCH相关的配置都在SPS-Config当中,而不是在PDSCH-Config中。这两个IE有类似的部分,因为这两个IE都是在对PDSCH进行配置,只不过一个是动态调度的PDSCH,一个是半持续调度的PDSCH。
上行SPS的配置同理,除了类似于PUSCH-config的配置外,还会对SPS PUSCH进行其他方面的配置,比如周期,UL SPS的Type等等。这里需要说明一下什么是UL SPS的Type,UL SPS分为两种类型,Type 1是RRCreconfiguration消息配置并且同时激活,Type 2是RRCreconfiguration消息只用于UL SPS的配置,不用于UL SPS的激活,后续再通过PDCCH来激活。DL SPS只有Type 2,没有Type 1。并且对于Type 1和Type 2,UL SPS的配置会略有不同,这里不详细描述到底哪里不同,但无外乎与Tpye 1和Type 2的区别相关,比如Type 1不需要PDCCH激活,所以原本DCI中的一些资源指示参数可能需要在RRC消息中,还比如只有Type 1支持CG-SDT,所以CG-SDT中涉及到的参数需要在RRC消息中,等等。
一旦SPS被release了,那么上述这些配置的参数也会被UE release,而不是继续保存在UE内。
三 SPS的激活和去激活
上面介绍了SPS的配置,那么配置好的SPS怎么激活、去激活?通过介绍我们已经知道了SPS分为两种类型:Type 1和Type 2,且激活方式与类型有关:
- UL SPS既可以是Type 1也可以是Type 2,Type 1通过RRCreconfiguration消息激活,即在UE收到RRC配置的同时就已经激活了,Type 2是先配置,再通过PDCCH来激活;
- DL SPS只有Type 2,即只能通过先RRC配置,后PDCCH激活的方式进行激活。
也就是说需要用到PDCCH来激活的是UL SPS的Type 2和DL SPS。这里展开说一下这两种情况下的PDCCH validation,包括以下方面:
- 首先PDCCH由CS-RNTI加扰,与动态调度的C-RNTI不同
- 其次NDI(new data indicator)和DFI(downlink feedback information)都置为0;
- 时域资源分配,与动态调度相同;
- 以及可能存在的PDSCH-to-HARQ_feedback timing indicator。
前面也提到过,不论上下行都可以有多个SPS同时激活。当只配置一个SPS时,用于激活/去激活SPS的PDCCH validation要遵循下面表格(一个用于激活,一个用于去激活):
Special fields for single SPS activation PDCCH
DCI format 0_0/0_1/0_2 | DCI format 1_0/1_2/4_1 | DCI format 1_1/4_2 | |
HARQ process number | set to all '0's | set to all '0's | set to all '0's |
Redundancy version | set to all '0's | set to all '0's | For the enabled transport block: set to all '0's |
Special fields for single SPS release PDCCH
DCI format 0_0/0_1/0_2 | DCI format 1_0/1_1/1_2/4_1/4_2 | |
HARQ process number | set to all '0's | set to all '0's |
Redundancy version | set to all '0's | set to all '0's |
Modulation and coding scheme | set to all '1's | set to all '1's |
Frequency domain resource assignment | set to all '0's for FDRA Type 2 with μ=1 set to all '1's, otherwise | set to all '0's for FDRA Type 0 or for dynamicSwitch set to all '1's for FDRA Type 1 |
可以看到表格中对SPS激活/去激活的PDCCH中的HARQ进程数、RV和MCS等的值做出了规定。
当配置多个SPS时,原本的HARQ process number这个field就会被用于指示其中某一个SPS的activation,具体哪一个取决于HARQ process number的值,该值与被激活的SPS的ConfiguredGrantConfigIndex或sps-ConfigIndex相同。而RV的值遵循下表:
Special fields for a single SPS activation PDCCH when a UE is provided multiple SPS
DCI format 0_0/0_1/0_2 | DCI format 1_0/1_2/4_1 | DCI format 1_1/4_2 | |
Redundancy version | set to all '0's | set to all '0's | For the enabled transport block: set to all '0's |
当配置多个SPS时,原本的HARQ process number也可以用于指示某一个或多个SPS的release。当配置了参数ConfiguredGrantConfigType2DeactivationStateList或sps-ConfigDeactivationStateList时,就是在指示多个SPS的release,当没有配置这两个参数时,就是在指示某一个的release,还是由HARQ process number的值决定具体release哪一个。其他DCI参数遵循下表:
Special fields for a single or multiple SPS release PDCCH when a UE is provided multiple SPS
DCI format 0_0/0_1/0_2 | DCI format 1_0/1_1/1_2/4_1/4_2 | |
Redundancy version | set to all '0's | set to all '0's |
Modulation and coding scheme | set to all '1's | set to all '1's |
Frequency domain resource assignment | set to all '0's for FDRA Type 2 with μ=1 set to all '1's, otherwise | set to all '0's for FDRA Type 0 or for dynamicSwitch set to all '1's for FDRA Type 1 |
另外如果DCI validation没通过的话,该DCI将会被UE删除,即UE不会对该DCI内的信息做任何行动。
对上述内容,即通过PDCCH激活/去激活SPS,做个总结的话情况无非分为4种:
- 配置单个SPS,如何激活/去激活;
- 配置多个SPS,如何激活其中的某一个;
- 配置多个SPS,如何去激活其中的某一个或多个;
可以看到协议当中并没有规定配置多个SPS时,如何同时激活多个SPS,所以应该是不能同时激活多个SPS,可以先后一个一个的激活,最终多个SPS可以同时处于激活态。
UE需要在收到SPS release的PDCCH的N个symbol后,回一个HARQ-ACK给网络。N的具体取值可以参考38213 10.2,这里不进行赘述。
当UL SPS被release时,UE会向网络发送MAC CE,确认UL SPS的去激活。
此外,对于Type 2 SPS,在配置了SCG的时候,多个Serving Cell中SPS的激活和去激活是各不相干的,因为前面也提到过,不论是上行还是下行,SPS是BWP级别的配置。如果多个小区之间是帧不对齐的,则SPS调度的位置也是各自用各自的SFN计算。
对于UL SPS,同一个BWP内,Type 1和Type 2是可以同时存在的。
还需要注意的一点是,对于上行,只有Type 1可以用于CG-SDT,且CG-SDT只能配置在初始BWP(initial BWP)中。这里SDT是Small Data Transmission,可以实现UE在不进入连接态的情况下进行一些小数据包的传输,改天可以给大家单独写一篇来介绍(这里可以先忽略这一条,不影响对SPS的整体理解)。
四 SPS的接收和发送
我们已经知道SPS既可以是PDSCH,也可以是PUSCH。对于下行而言,我们可以称之为SPS PDSCH的接收,对于上行而言,我们可以称之为SPS PUSCH的发送。在SPS激活后,下面介绍SPS的收发过程。
1 Downlink
对于下行,第N个SPS PDSCH所在的slot由下式确定:
(numberOfSlotsPerFrame × SFN + slot number in the frame) =
[(numberOfSlotsPerFrame × SFNstart + slotstart) + N × periodicity × numberOfSlotsPerFrame / 10]
modulo (1024 × numberOfSlotsPerFrame)
其中SFNstart和slotstart分别是SPS起始的SFN和slot。
另外38214 5.1节中有详细的SPS PDSCH时频域资源的介绍,比如UE不期望接收DCI调度的normal PDSCH与SPS PDSCH在时域上有重叠,除非DCI的结束符号位置距离SPS PDSCH的起始位置大于等于14个符号。
此外还有冲突处理等内容,即当Slot内存在多个SPS PDSCH的时候,首先将落在UL符号上的SPS PDSCH处理掉,然后通过下列步骤处理冲突:
Step 0 – 设j=0,j为选出来的需要进行解码的SPS PDSCH的个数,Q为所有激活的SPS PDSCH组成的set;
Step 1 – UE从Q中选择sps-ConfigIndex最小的SPS PDSCH,为“幸存PDSCH”,然后j = j + 1;
Step 2 – “幸存PDSCH”自然是可以被解码的,然后删除剩余SPS PDSCH中所有与“幸存PDSCH”重叠的PDSCH;
Step 3 - 重复Step 1和Step 2,直到Q为空或者j达到UE可以支持的slot内最大 PDSCH个数。
2 Uplink
对于上行,Type 1时,第N个SPS PUSCH的起始symbol由下式确定:
[(SFN × numberOfSlotsPerFrame × numberOfSymbolsPerSlot)
+ (slot number in the frame × numberOfSymbolsPerSlot) + symbol number in the slot] =
(timeReferenceSFN × numberOfSlotsPerFrame × numberOfSymbolsPerSlot
+ timeDomainOffset × numberOfSymbolsPerSlot + S + N × periodicity)
modulo (1024 × numberOfSlotsPerFrame × numberOfSymbolsPerSlot)
可以看到与DL最大的不同在于UL以Symbol为单位,式中timeDomainOffset, timeReferenceSFN, 和S为计算起始symbol要用到的参数。S是由SLIV计算出来或者直接由参数startSymbol指示。另外本文不包含SPS用于SDT情况下的收发过程的描述。
Type 2时,第N个SPS PUSCH的起始symbol由下式确定:
[(SFN × numberOfSlotsPerFrame × numberOfSymbolsPerSlot)
+ (slot number in the frame × numberOfSymbolsPerSlot) + symbol number in the slot] =
[(SFNstart× numberOfSlotsPerFrame × numberOfSymbolsPerSlot
+ slotstart× numberOfSymbolsPerSlot + symbolstart) + N × periodicity]
modulo (1024 × numberOfSlotsPerFrame × numberOfSymbolsPerSlot)
其中,SFNstart, slotstart和symbolstart 分别是SPS PUSCH的初始传输时机。
具体的时频域resource allocation和动态调度的略有不同,感兴趣的可以详细看看38214 6.1.2.3,这里不展开。
最后
以上就是个性猫咪为你收集整理的5G NR R16 SPS ---- 半持续调度一 简介二 SPS的配置三 SPS的激活和去激活四 SPS的接收和发送的全部内容,希望文章能够帮你解决5G NR R16 SPS ---- 半持续调度一 简介二 SPS的配置三 SPS的激活和去激活四 SPS的接收和发送所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复