在PDSCH中传输的SIB块,采用SI-RNTI加扰,使用DCI1A或DCI1C格式传输。DCI1A的格式内容在博文《LTE下行物理层传输机制(5)-DCI格式的选择和DCI1A》中已经有了比较多的介绍,本文就介绍另外一个格式:DCI1C。
1.DCI1C格式
在不考虑MCCH的情况下,DCI1C只用于一个PDSCH码字的调度,承载寻呼和SIB的控制信息。DCI1C的具体格式如图1所示:
(图1 用于1个PDSCH码字调度的DCI1C格式)
每个字段具体介绍如下:
(1)gap value指示标记位,占用1个bit。《LTE下行物理层传输机制(9)-集中式和分布式资源映射》博文里已经详细介绍了gap value的含义,这个字段只用在分布式资源映射的过程。由于有两种不同的gap value值,如图2所示,所以规定当指示标记gap_value_flag=0时,表示资源分配过程中采用N_gap1;当gap_value_flag=1时,表示采用N_gap2。另外,因为当带宽小于10MHz即RB总个数小于50的时候,只有一种gap即N_gap1,所以此时DCI1C格式就不再包含这个1bit的gap_value字段。 (图2 不同的GAP值) gap_value字段用于计算N_DL_VRB参数,N_DL_VRB不是下行带宽的RB个数N_DL_RB,其计算过程如下: (A)如果采用GAP1,则 N_DL_VRB = N_DL_VRB_gap1 = 2 × Min(N_gap1, N_DL_RB - N_gap1)。比如当前是5MHz带宽,N_DL_RB=25,N_gap1=12,则N_DL_VRB = 2 × Min(12,25-12) = 2 × 12 = 24。如果是10MHz带宽,N_DL_RB=50,N_gap1=27,则N_DL_VRB = 2 × Min(27,50-27) = 2 × 23 = 46。 (B)如果采用GAP2,则 N_DL_VRB = N_DL_VRB_gap2 = floor(N_DL_RB / (2 × N_gap2)) × 2 × N_gap2。比如当前是10MHz带宽,N_DL_RB=50,N_gap2=9,则N_DL_VRB = floor(50 / 18)× 18 = 2 × 18 = 36。 (2)资源分配RIV字段,占用ceil(log2(floor(N_DL_VRB_gap1 / N_step_RB)× (floor(N_DL_VRB_gap1 / N_step_RB)+1)/ 2))bit位。在这个公式中,变量N_DL_VRB_gap1表示当使用gap1的时候用于分布式资源分配的VRB个数,取值= 2 × Min(N_gap1, N_DL_RB - N_gap1)。变量N_step_RB是分配的VRB的起始位置rb_start和长度rb_len的增量,取值如图3所示。与DCI1A不同的是,用于DCI1C的VRB分配,RB的起始位置和长度不是按1递增或递减,而是按照固定的步长大小N_step_RB递增或递减。 (图3 不同带宽对应的N_step_RB值) 可能有的同学会有疑问,前面在介绍gap类型的时候明明有gap1和gap2两种类型,为什么这里计算RIV字段的公式中只使用gap1呢?这是因为N_DL_VRB_gap1的取值总是大于或等于N_DL_VRB_gap2的值,为RIV字段预留bit位个数的时候,只需要使用N_DL_VRB_gap1,两者中取较大值即可。 DCI1C使用的资源分配方式是Type2,原理与DCI1A的分配方式相同,参考《LTE下行物理层传输机制(5)-DCI格式的选择和DCI1A》,但细节上有所差别。DCI1C的Type2方式的分配过程如图4所示。从公式中可以看到,计算RIV的过程与DCI1A格式是相同的,只是具体的参数有所不同。 (图4 DCI1C采用的Type2资源分配方式) 其中,调度分配的VRB起始位置RB_start和VRB长度L_CRBs的取值范围如图5所示。结合图3可以知道,使用DCI1C格式的时候,如果是1.4MHz、3MHz、5MHz的带宽,最小分配的RB个数是2个,而如果是10MHz、15MHz、20MHz的带宽,最小分配的RB个数是4个。 (图5) 举个例子,比如当前是10MHz带宽,那么根据图3可以得到N_step_RB=4,根据图2可以得到N_gap1=27,所以可用分配的VRB最大个数N_DL_VRB_gap1 = N_DL_VRB = 2 × Min(N_gap1, N_DL_RB - N_gap1)=46 ,因而字段RIV占用的bits个数=ceil(log2(floor(N_DL_VRB_gap1 / N_step_RB)× (floor(N_DL_VRB_gap1 / N_step_RB)+1)/ 2))=ceil(log2(floor(46/4)×(floor(46/4)+1)/2))=7。根据图5,此时RB_start的取值范围是{0,4,8,...,36,40},L_CRBs的取值范围是{4,8,...,36,40,44}。需要注意的是,RB_start=0的时候,可用的VRB长度L_CRBs最大只能取44,而不是48,因为48>46,超过了分布式分配过程中可用的最大VRB个数N_DL_VRB_gap1,具体请参考《LTE下行物理层传输机制(9)-集中式和分布式资源映射》。 (3)mcs字段,固定占5bits。从mcs字段可以获知下行调度的传输块tb_size的大小,如图6所示。图中的I_TBS的取值等于mcs的值,范围是0~31,TBS的单位是bit。如果DCI1C码流中的mcs=1,那么TBS=56bits。 (图6 DCI1C使用的TBS表格) |
1.4MHz、5MHz、10MHz、20MHz时,DCI1C各字段占用的bit位个数如图7所示。
(图7)
2.使用DCI1C时冗余版本rv的计算
DCI1C只包括三个字段的内容:gap value指示字段、RB资源配置RIV和MCS,并没有Harq-id、ndi、dai、rv等HARQ相关的内容,这是为什么呢?
首先,对于寻呼和MSG2来说,虽然它们都在PDSCH信道中传输,但并不执行HARQ过程,因此不需要这些HARQ相关的参数。
其次再说说SIB。对于SIB(SIB1和SI)来说,确实执行下行HARQ过程,但这种HARQ过程比较特殊,并不需要UE反馈对应的应答,因而没有所谓的解码失败需要重传这样的信息,所以在DCI1C中不需要携带Harq-id、ndi和dai这些参数。考虑为了提高UE侧的解码性能,仍然需要rv冗余版本信息,但这个rv参数不需要通过DCI1C携带,可以通过当前的系统帧号和子帧号计算得到,具体公式为:
rv = ceil(3 / 2 * k)mod 4
需要注意的是,(3 / 2)的计算结果要保持浮点数的形式。k的值与SIB类型有关:
如果当前是SIB1,那么k=(SFN / 2) mod 4,SFN是当前的系统帧号。如图8所示,rv将按照0,2,3,1的顺序周期发送。
(图8)
如果当前是SI消息,那么k = i mod 4,i是SI窗口中的子帧序号(注意不是系统时间中子帧号的意思),取值={0,1,...,(ns_w - 1)},变量ns_w表示SI窗口中的SI发送子帧个数。假定某个SI消息的周期是40ms,如图9所示,即SI窗口长度是40ms,此时ns_w=8,则i的取值范围是{0,1,...,7},计算rv的过程如下:
当UE在时刻(i,1)收到该SI消息时,i=0(这里i不是等于1),k=0,故rv=0;
当UE在时刻(i,7)收到该SI消息时,i=1,k=1,故rv=2;
当UE在时刻(i+1,1)收到该SI消息时,i=2,k=2,故rv=3;
当UE在时刻(i+1,3)收到该SI消息时,i=3,k=3,故rv=1;
当UE在时刻(i+1,8)收到该SI消息时,i=4,k=0,故rv=0;其他值可以依次类推计算得到。
从这个推算过程也可以看出,如果一个SI窗口中只发送1次SI消息,那么冗余版本rv将一直等于0。为确保UE能收到SI消息,一个SI窗口中到底发送多少条合适是由eNB侧的算法决定的,发送的频率过多会占用较多的RB资源,而发送的频率过少可能会导致UE解码失败。
(图9 SI消息发送示意图)
参考资料:
(1)3GPP TS 36.212 V9.4.0 (2011-09) Multiplexing and channel coding
(2)3GPP TS 36.213 V9.3.0 (2010-09) Physical layer procedures
(3)3GPP TS 36.211 V9.1.0 (2010-03) Physical Channels and Modulation
(4)3GPP TS 36.321 V9.6.0 (2012-03) Medium Access Control (MAC) protocol specification