1.什么是PUSCH频率跳频(PUSCH Frequency Hopping)
博文《LTE下行物理层传输机制(9)-集中式和分布式资源映射》中提到了分布式的下行资源分配,这种资源分配方式可以有效利用频率的分集效应,增加信号的抗干扰作用。实际上在上行传输过程中,也存在着类似的分布式资源分配,即连续的VRB对映射到不连续的PRB对中,这种方式就叫做PUSCH频率跳频(PUSCH Frequency Hopping)。由于上行分配的RB必须使用连续的子载波,因此eNB分配的VRB必须是连续的,并且同一个时隙内连续的VRB必须映射到连续的PRB,如下图所示。
2.为什么要采用PUSCH跳频
采用跳频是为了利用频率的分集效应,增加信号的抗干扰作用。不妨首先考虑下面图1这种RB分配方式。在图1中,eNB在每个子帧subframe的每个时隙slot都分配了若干个连续的RB,用于PUSCH的传输,这个时候看起来并没有问题。
(图1)
然而在某个时刻,系统突然出现了较强的干扰,并且该干扰正好出现在已分配的RB附近,如图2所示。如果这个时候系统没有其他的抗干扰措施,势必会影响PUSCH数据的传输。
(图2)
在这种情况下,为了提高数据传输的可靠性,选择PUSCH跳频可以是其中的一种方案(当然我们在实际设计算法的时候,也会综合采用其他的一些调度策略,因为不涉及到协议规范内容,这里就不做说明)。我们可以采用图3所示的这种跳频方式,这种跳频模式叫做子帧间跳频(inter-subframe hopping)。子帧间跳频的策略思想是在不同的子帧里分配的RB位置要错开,从而达到分布式的目的。
(图3 子帧间跳频)
图3所示的子帧间的跳频模式虽然达到了频率分集的效果,但是同一个子帧内的RB并没有分开,因此这种跳频方式并不彻底,还可以继续优化,所以出现了图4所示的这种跳频方式。图4的这种跳频模式叫做子帧内和子帧间跳频(IntraAndInter-subframe hopping)。
(图4 子帧内和子帧间跳频)
图4所示的跳频方式能明显看到存在着一定的规律性:不同子帧间的偶数时隙与偶数时隙、奇数时隙与奇数时隙,它们的PRB位置是相同的。因为实际环境中的干扰存在着诸多的不确定性,因此如果PRB的映射位置不那么规律一点,则频率分集效果会更好些,因此实际分配时会出现诸如图5所示的子帧内和子帧间跳频。
(图5)
上面的这几种跳频方式都可能存在于实际的网络中,如果你只是想了解一下PUSCH跳频的大概内容,那么看到这里就可以了,但如果你是专业的开发人员,马上要进行这方面的代码编写,或者你想更深入的了解这方面的内容,那么就需要继续阅读接下来的内容。因为上面这些跳频图是由下面这些数学公式推导出来的。
3.UE如何判断是否需要进行跳频
在使用数学公式推导PUSCH的PRB跳频位置之前,先介绍下UE是如何判断某个上行子帧是采用跳频还是不跳频的。这里有个总的原则,就是:如果DCI0中的PUSCH跳频比特位(frequency hopping field)被设置为1,那么UE将执行PUSCH频率跳频,否则将不执行跳频。如下图黄色区域标注所示。
如果UE收到了来自eNB的DCI0码流,那么执行跳频的UE,可以通过解析相同传输块最近一次的DCI0码流,来决定子帧n第一个时隙PRB的起始位置。换句话说,如果本次TTI收到了DCI0则按照本次的DCI0解析(对应新传),本次没有收到DCI0但上一次的有,则按照上次的DCI0解析(对应重传)。因为上行RB(无论是VRB还是PRB)是连续的,一旦有了第一个时隙的PRB起始位置,加上DCI中可以解析出的RB个数,就可以知道第一个时隙的所有PRB位置,再根据特定的映射规则(后文将描述这种规则),就可以知道第二个时隙的所有PRB位置。
具体来说,UE不是每次发送上行数据都需要DCI0来分配RB资源,比如进行非自适应重传或者上行SPS,或者发送MSG3,这几种场景都不需要eNB通过DCI0分配RB。因此除了上行新传、自适应重传这类PDCCH会携带DCI0的场景之外,还有下面这三种不带DCI0的场景需要考虑:
(1)UE执行非自适应重传
这种情况下,虽然eNB并不下发DCI0,但之前新传的时候是有DCI0的,UE只需要查看之前的DCI0中,该TB块对应的VRB是否采用了PUSCH跳频,就知道本次非自适应重传是否需要跳频了:如果上次新传是跳频的,那么本次也需要执行同样的PUSCH跳频规则。
(2)UE发送MSG3
MSG3的资源是由MSG2(或者说RAR)的UL_GRANT下发到UE的,如下图所示。MSG3是否采用跳频,依赖于“Hopping flag”字段:如果该值等于1,则表示MSG3需要执行PUSCH跳频。后面的“Fixed size resource block assignment”字段则包含了具体的RB资源信息,与DCI0的类似。
关于RAR的详细内容,请参考博文《LTE-TDD随机接入过程(3)-RAR(MSG2)以及MSG1的重传》。
(3)UE执行上行SPS
如果相同传输块的PUSCH数据,一开始就是被半持续调度的(关于SPS半持续调度的内容以后再专门写),那么是否跳频就由最近一次半持续调度分配时的DCI0跳频信息决定。
PUSCH有2种类型的跳频方式:Type 1 跳频和Type 2 跳频。这两种方式的不同在于,使用Type1方式则意味着同一个子帧内两个时隙的RB位置是由DCI0码流推导出的,而使用Type2方式则意味着两个时隙的RB位置是按照预定义的模型(predefined pattern)进行的,此时整个上行带宽会被分成若干个子带,PUSCH会在几个子带间进行特定规则的跳频,参考上文中的图3~图5。下文将展开讨论PUSCH跳频的规则,提到的DCI0场景,也适用于MSG3的场景。
4.PUSCH跳频方式1(Type 1 PUSCH Hopping)
eNB发给UE的DCI0码流中包含了PUSCH跳频的信息,见下面截图中的黄色内容所示:
可以看到,对于PUSCH跳频来说,DCI0中携带了2个信息:高位N_UL_hop个比特的跳频信息和低位[ ceil(log2[N_UL_RB * (N_UL_RB + 1) / 2 ])- N_UL_hop ]个比特与第一个时隙RB分配有关的信息。那怎么利用这2个信息来推导两个时隙PRB的位置呢?下面一步步的来拆解分析这个问题,这个过程可能比较抽象,没关系,最后会举个实际的例子说明。
(1)跳频信息占N_UL_hop个比特,这个参数值是由带宽大小决定的,具体见下表。比如10M带宽占用50个RB,则N_UL_hop=2。
(2)如果当前是Type1方式的跳频,则如下图所示,第一个时隙的PRB起始位置用变量n_S1_PRB(i)表示,第二个时隙的PRB起始位置用n_PRB(i)表示。
第一个时隙PRB的起始位置等于rb_start,这个值可以从DCI0或UL_GRANT中的RIV字段中直接解码得到,因此接下来的任务主要是解码第二个时隙PRB的起始位置n_PRB(i)。下图是计算第二个时隙PRB起始位置变量n_PRB(i)的过程示意图。从Table8.4-2中可以看到,Nul-hop跳频信息和带宽大小N_UL_RB决定了~n_PRB(i)使用哪个公式以及当前的PUSCH跳频方式(Type1还是Type2)。正如图中的2比特跳频信息NUL_hop=00,此时将选择表格中的公式:
这说明eNB选择的是Type1的PUSCH跳频方式。
(3)如上图所示,在计算~n_PRB(i)的过程中,最终需要用到两个参数N_HO_RB、Nsb,这两个参数是由RRC在SIB2中配置的,分别对应信元pusch_HoppingOffset和信元n-SB,见下文的图A所示。
(图A)
至此,就可以知道采用Type1方式跳频后PRB的位置了。以10M带宽为例,如果RRC配置的n-SB=1,pusch-HoppingOffset=4,DCI0中的Nul_hop=00,RIV=270。则:
(A)根据RIV=270可以得到VRB的起始位置rb_start=20,rb_len=6。关于RIV的内容,请参考《LTE-TDD随机接入过程(4)-RIV的解析和Preamble资源的选择》。
(B)pusch-HoppingOffset=4是偶数,所以~N_HO_RB = N_HO_RB = usch-HoppingOffset = 4。
(C)Nul_hop=00,所以采用的是Type1的PUSCH跳频,N_PUSCH_RB = N_UL_RB - ~N_HO_RB - (N_UL_RB mod 2) = 50 - 4 - 0 = 46。
(D)第一个时隙PRB的最低位起始位置 n_S1_PRB(i) = rb_start = 20,长度rb_len=6。
(E)~n_S1_PRB(i) = n_S1_PRB(i) - ~N_HO_RB / 2 = 20 - 4 / 2 = 18。
(F)~n_PRB(i) = ( floor( N_PUSCH_RB / 4) + ~n_S1_PRB(i) ) mod N_PUSCH_RB = (floor(46 / 4) + 18) mod 46 = 29。
(G)第二个时隙PRB的最低位起始位置 n_PRB(i) = ~n_PRB(i) + ~N_HO_RB / 2 = 29 + 4 / 2 = 31,长度rb_len=6。VRB对与PRB对的映射规则如下图所示。
这里对Type1方式的跳频做个总结:在Type1方式中,第一个时隙的PRB位置与不跳频时的PRB位置完全相同,而第二个时隙的PRB位置与第一个时隙相关联。
虽然上面计算得到了两个时隙的PRB位置,但UE不是每次都能这么使用PRB资源,协议规定了一个限制条件:当RRC配置的Hopping-mode是“子帧间跳频”(inter subframe)时,那么第一个时隙的资源分配适用于TB块HARQ传输次数为偶数的场景,第二个时隙的资源分配适用于HARQ传输次数为奇数的场景。这是什么意思呢?如果RRC配置的是“子帧间”跳频,则意味着一个子帧内两个时隙的PRB位置必须是相同的,没有频率的相对偏移,类似于前文中的图3所示。每个HARQ进程中的TB块,都有最大HARQ传输次数限制,比如最大可以传输5次,那么第1次、第3次、第5次传输就是奇数次传输,而第2次、第4次就是偶数次传输。即便此时根据公式计算得到两个时隙的PRB位置不同,但对于偶数HARQ传输次数的子帧,两个时隙的PRB均使用第一个时隙的PRB资源分配,而奇数HARQ传输次数的子帧,两个时隙的PRB均使用第二个时隙的PRB资源分配。
参数Hopping-mode是由RRC的SIB2下发到UE的,与参数N_HO_RB、Nsb在同一个结构体中,见上文的图A,该参数决定了是“子帧间跳频”还是“子帧内和子帧间跳频”。
5.PUSCH跳频方式2(Type 2 PUSCH Hopping)
当采用Type2跳频方式时,PRB与VRB的位置关系将按照预定义的模式进行。因篇幅关系,本节内容将放在下一篇博文中继续介绍。
参考文献:
(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)http://www.sharetechnote.com