这篇看下NR PUSCH power control的相关内容,主要内容集中在38.213 7.1章节,功率计算无非就是一个长公式,根据RRC配置的参数及后续DCI field 的内容作出功率的调整;最初这部分看的就云里雾里的,最近再看,相比于之前,理解确实又进了一步,不过有些内容由于工作中不涉及,对于我来说还是需要再细细研究;这部分根据R16 spec整理,拿来看R15 的log,并没有什么冲突,也可以适用。
UL功率控制,主要是PUSCH PUCCH SRS PRACH 的传输功率。
对于所有PUSCH/PUCCH/SRS传输,UE 不期望每个服务小区维护4个以上的路损估计,配置SRS-PosResourceSet的SRS传输除外。;如果UE配置的用于计算路损的参考信号resource多于4个,UE要维护与RS resource index对应的用于路径损耗估计的RS资源;如果UE收到针对路损估计的参考信号 resource 变更的MAC CE,UE要在slot k+3N_subframe,u_slot+1 才能应用型的参考信号 resource,其中slot k对应的是UE传输MAC CE PUCCH/PUSCH HARQ-ACK的时隙。
PUSCH/PUCCH/SRS/PRACH 传输时机i,由系统帧号SFN的帧内的时隙索引n_u_s,f及该时隙内的第一个符号S 和多个连续符号L定义。
PUSCH power control 大体流程就是,gNB确定期望的UL发射功率,并向UE提供UL的功率控制命令(TPC);UE使用所提供的UL功率命令(TPC)来调整其发射功率。NR的UL功控分为开环+闭环,所谓开环是指p0 alpha的等参数是RRC配置的开环功控参数,用于传输功率的计算;进入连接态后,网络端对现有配置,通过DCI 指示TPC来进行调整的部分,就是闭环过程。
上图是38.213中有关PUSCH功率的计算公式,PUSCH 功率由两个值的最小的那个确定,其中一些参数的含义如下(后面的内容也会讲到):
i :如开头所述,是PUSCH/PUCCH/SRS/PRACH 传输时机i,由系统帧号SFN的帧内的时隙索引n_u_s,f及该时隙内的第一个符号S 和多个连续符号L定义。这里对应的就是PUSCH传输时机i。
j:参数集配置索引(parameter set configuration).j=0,代表承载msg3(4-step RA)或msgA(2-step RA)的上行功控(PUSCH)j=1,ConfiguredGrantConfig,代表配置调度时的UL 功控(PUSCH);;j从2到J 是正常情况下的功控。
q_d: 用于下行Pathloss 估计的参考信号的索引,参考信号可以是SSB 或CSI-RS。
l: PUSCH power control adjustment state,l=0,1 或l=0,后面再介绍
b,f,c:b对应 UL BWP索引,f对应载波索引,c是对应的服务小区索引。
P_CMAX,f,c(i)和P_o_pusch_b,f,c两个参数相比,前者带的是f,c 后者带的是b,f,c,结合其含义,b 代表的是对应的UL BWP index,前者f,c对应的是载波级别的功率参数,后者b,f,c对应的是BWP级别的功率参数。
公式中的参数接下来一个个看下。
一、P_CMAXf,c(i)
P_CMAX,f,c(i) 为在PUSCH传输时机i 针对服务小区C/载波f 配置的最大输出功率,对应的是载波级别的功率参数,指每个服务小区c的载波f 上每个时隙的最大output power ,这里没有b ,说明是载波级别的参数,不是BWP 级别的。
38.101-1 6.2.4介绍了取值范围
通过上面的公式看,P_CMAX,f,c 前后两个参数都与PEMAX,c有关系,先看PEMAX,c。
PEMAX,c有SIB1中的p-Max或NR-NS-PmaxList 中的additionalPmax相关。目前看到的log中,SIB1中只会配置P-MAX,没有配置additionalPmax。
PowerClass在UeCapabilityInformation 中上报,每个band支持的powerclass会列出。
之后根据38.101-1 Table 6.2.1-1 确定,例如pc2对应的就是Class 2 26dBm。通常UE都支持PC3 即23dBm,所以支持PC2的UE有个HPUE 的叫法。
Delta P_powerClass确定如下,其余参数先不看了,太多了。
整个计算完后,这个参数就是一个载波级别的最大输出功率。
二、Po_puschb,f,c(j)
公式中的Po_puschb,f,c(j) 是上图2个红框参数的和。
j:参数集配置索引(parameter set configuration).
j=0,代表承载msg3/msgA的上行功控(PUSCH);
Type-1 的随机接入就是 4-step RA,下面是对应参数的取值情况
对于Msg3 ,P o_NOMINAL_PUSCH,f,c(0)=P o_PRE+Delta_Preamnle_Msg3=preambleReceivedTargetpower+msg3-DeltaPreamble
例如根据以下参数可以确定P o_NOMINAL_PUSCH,f,c(0)=-100+4×2=-92 P o_UE_PUSCH,B,F,C(0)=0 最终P o_PUSCH b,f,c(0)=-92。
msg3-DeltaPreamble在实际取用时要做×2处理。
Type-2 的RA 是2-step的RA 参数取值如下
j=1,ConfiguredGrantConfig,代表配置调度时的UL 功控(PUSCH);
P o_NOMINAL_PUSCH,f,c(1)有p0-NominalWithoutGrant 则取其值;没有p0-NominalWithoutGrant 则取值P o_NOMINAL_PUSCH,f,c(0);
P o_UE_PUSCH,b,f,c(1)取值ConfiguredGrantConfig中的p0-PUSCH-Alpha中的p0。
j从2到J-1 是正常情况下的功控。
同样的道理,P o_NOMINAL_PUSCH,f,c(j)有p0-NominalWithoutGrant 则取其值;没有p0-NominalWithoutGrant 则取值P o_NOMINAL_PUSCH,f,c(0);P o_UE_PUSCH,b,f,c(j)取值ConfiguredGrantConfig中的p0-PUSCH-Alpha中的p0。目前看log 都会配置p0-NominalWithGrant。
P o_UE_PUSCH,b,f,c(j)取值p0-PUSCH-Alphaset中p0-PUSCH-AlphaId对应的p0,其取值有如下三种场景
(1)配置SRI-PUSCH-PowerControl的情况:
如果UE有配置SRI-PUSCH-PowerControl,其中有不止一个p0-PUSCH-AlphaSetId,这时候收到了DCI 带有SRI field,要根据SRI 与SRI-PUSCH-PowerControlId的映射关系,SRI-PUSCH-PowerControlId有对应的P0-PUSCH-AlphaSetId,找到P0-PUSCH-AlphaSetId->p0,这个p0值作为P o_UE_PUSCH,b,f,c(j)。如下图是配置SRI-PUSCH-PowerControl的配置路径,通过确定DCI field SRI 找到SRI-PUSCH-PowerControlId 就可以确定一个p0。
SRI-PUSCH-PowerControl的配置结构如上,注意在其中还有其他一些与sri-PUSCH-PowerControlId相关的其他参数,例如sri-PUSCH-PathlossReferenceRS-id/sri-P0-PUSCH-AlphaSetId/sri-PUSCH-ClosedLoopIndex等,在后面都会用到相同的逻辑即根据DCI field SRI 确定sri-PUSCH-PowerControlId,进而找到对应的value。
(2)除了上述确认方式,还有另一种通过DCI SRI 确定P o_UE_PUSCH,b,f,c(j)的方式,这种方式要结合另一个DCI field Open-loop power control parameter set indication的配置情况,如下。
如果DCI 带有SRI且Open-loop power control parameter set indication field=1,那P o_UE_PUSCH,b,f,c(j)就取 SRI field 映射的p0-PUSCH-SetId对应的P0-PUSCH-Set中的第一个配置中p0值;Open-loop power control parameter set indication field如上图,如果SRI确定的是P0-PUSCH-Set 0,那P o_UE_PUSCH,b,f,c(j)= 0;如果是P0-PUSCH-Set 1,那P o_UE_PUSCH,b,f,c(j)= -1如下图。
(3) 没有DCI field SRI且没有配置SRI-PUSCH-PowerControl
除RAR UL grant PUSCH 重传外的其他PUSCH传输,如果DCI 没有带SRI field,或者没有配置SRI-PUSCH-PowerControl,j=2时:
UE此时有P0-PUSCH-Set配置且DCI有open-loop power control parameter set indication field,P o_UE_PUSCH,b,f,c(j)取值规则如下
open-loop power control parameter set indication=0 或00,取P0-AlphaSets中第一个P0-PUSCH-AlphaSet 中的p0;
open-loop power control parameter set indication=1 或01,取P0-PUSCH-Set中最小p0-PUSCH-SetID的第一个p0;
open-loop power control parameter set indication=10,取P0-PUSCH-Set中最小p0-PUSCH-SetID的第2个p0;
另外如果没有配置P0-PUSCH-Set,P o_UE_PUSCH,b,f,c(j)取P0-AlphaSets中第一个P0-PUSCH-AlphaSet 中的p0。
三、a_b,f,c (j)
msg3 的情况
msgA的情况
和之前情况类似,配置SRI-PUSCH-PowerControl的情况路损补偿系数由P0-PUSCH-AlphaSet 中的alpha决定
(1)UE 收到SRI-PUSCH-PowerControl 及多个p0-PUSCH-AlphaSetId的配置,收到的DCI中包含PUSCH 传输的SRI field,则根据DCI SRI field 找对应的sri-PUSCH-PowerControlId,进而确定p0-PUSCH-AlphaSetId 找到对应的alpha值。
(2)除RAR UL grant PUSCH 重传的情况外,如果没有收到DCI SRI field 或没有配置SRI-PUSCH-PowerControl ,J=2 则UE 将p0-AlphaSets中的第一个p0-PUSCH-AlphaSet 中的alpha值当作路损补偿系数
四、2的u次方×M_pusch_RB,b,f,c(i)
M_pusch_RB,b,f,c(i)如上绿色字体 就是那个时刻分配RB的带宽,结合PUSCH 功率公式,如果UE发送UL数据时,TB size很大,网络给UE调度的RB会越多,则UE的PUSCH功率也越大;2的u次方,SCS u越大,一个RB的频域带宽也越大,调度相同RB个数下,PUSCH实际使用的带宽也会增大,则同样也会导致UE发送PUSCH时,需要更大的功率。
五、PL_b,f,c(q_d)
PL_b,f,c(q_d)=referenceSignalPower—测量和高层滤波后的RSRP;这时候会配置一个参考信号给UE 用于计算路损,
参考信号可以是CSI-RS或SSB,如果没有配置periodic CSI-RS时,referenceSignalPower=ss-PBCH-Blockpower;UE有配置periodic CSI-RS时,referenceSignalPower=ss-PBCH-Blockpower 或powerControlOffsetSS,powerControlOffsetSS是CSI-RS相对于SSB的power偏移,没有配置时powerControlOffsetSS=0。
其余部分是用于测量路损的参考信号的选取:
没有配置PUSCH-PathlossReferenceRS 及enableDefaultBeamPL-ForSRS 或在UE 还没有收到RRC dedicated 参数时,UE根据获取MIB的SSB 计算路损。
网络会配置PUSCH PathlossReferenceRS,则用于计算路损的RS id由PUSCH-PathlossReferenceRS 中的pusch-PathlossReferenceRS-Id 决定,配置结构如下:
对于RAR UL grant 即msg3/msgB的发送,采用和PRACH初始传输时相同的参考信号。
UE 有配置SRI-PUSCH-PowerControl,且对应多个PUSCH-PathlossReferenceRS-Id,,同样的根据DCI 中的SRI field 确定 sri-PUSCH-PowerControlId ,找到对应的PUSCH-PathlossReferenceRS-Id进而确定最终用于计算路损的RS resource index 。
后面还有很多情况不继续列出了 ,在38.213 7.1.1。
六、Delta_TF_b,f,c(i)
这部分可以看作是MCS调整量;Ks=0 或者PUSCH layer 大于 one layer 取0;Ks=1.25 采用绿色字体部分
Ks 来自RRC 层的deltaMCS。
其他相关参数如下,这里仅作简单罗列,方便后续查找。
七、f_b,f,c(i,l)
这部分主要是根据DCI 2_2 field对PUSCH power进行调整的过程,因而可以看作是闭环调整部分,另外一个RRC层的配置参数tpc-Accumulation也很关键。
tpc-Accumulation 配置的话 带的value只能是disable 对应的是绝对值方式;没有配置就是功率累加方式。通过38.213中的描述可以看出,累加模式时f_b,f,c(i,l)是一个累加公式;disable tpc-Accumulation时,对应的是一个等式,绝对值公式中有个delta_pusch b,f,c(i,l),对应的是DCI field 中的TPC comand。
DCI 2_2 是一组UE发送的TPC command,首先要考虑 DCI field的大小,以及UE去哪个具体的位置上去取属于自己的bits问题。
DCI 2_2 是用于给一组UE发送PUCCH/PUSCH TPC command的DCI,由TPC-PUSCH-RNT/TPC-PUCCH-RNTI加扰,RNTI一般在RRCReconfiguration或RRCSetup中配置给UE。既然是给一组UE发送的TPC command,那就涉及单个UE获取位置及取几bits的问题,先看UE如何确定要从DCI中获取几bits的问题,DCI 2_2可能包含Closed loop indicator和TPC command(2bits),主要是Closed loop indicator是否存在的问题,根据上面截图的描述,当配置twoPUSCH-PC-AdjustmentStates/twoPUCCH-PC-AdjustmentStates时,Closed loop indicator 对应1 bit,整个DCI 2_2对应3bits;没有上述2个配置时,Closed loop indicator 对应0 bit,整个DCI 2_2对应2bits。
而UE需要从DCI 2_2的哪个位置获取自己想要的那几bits,由tpc-PUSCH中的tpc-index提供位置,如上图,tpc-index分为NUL和SUL的情况,targetCell可以提供服务小区的信息,如果没有配置targetCell,就认为当前的TPC command要用于接收DCI 2_2 PDCCH对应的cell;
tpc-index可配置1~15,也就是说可以同时为15个UE提供PUSCH TPC command,例如配置的tpc-index=1,UE就去DCI 2_2 index 1的位置取对应的bits;tpc-index=13,UE就去DCI 2_2 index 13的位置取对应的bits。
公式中的delta_pusch b,f,c(i,l)是由TCP-PUSCH-RNTI加扰的DCI 2_2中的TPC command field,是为服务小区c的carrier f 对应的BWP b的PUSCH传输时机i进行power 调整的。
其中l 的取值规定如下,twoPUSCH-PC-AdjustmentStates 配置时 则有两个states l=1 或0;没有配置或者对应RAR UL grant PUSCH传输时 只有一个state l=0。
更具体的l的确定与场景有关系:
ConfiguredGrantConfig PUSCH传输场景,l的值由powerControlLoopToUse提供,如下
UE配置SRI-PUSCH-PowerControl时,l 由根据DCI SRI field 最终选定的sri-PUSCH-PowerControlId 对应的sri-PUSCH-ClosedLoopIndex 提供,如下;
如果DCI 中没有SRI field 或者没有配置SRI-PUSCH-PowerControl时,l=0
如果UE获得了TPC-PUSCH-RNTI加扰的DCI 2_2,那l 取值于closed loop incicator field。
前景内容基本结束了,下面就具体看下累加和绝对值的情况。
累加
没有配置tpc-Accumulation时,对应的是累加情况,初始fb,f,c(k,l)=0,然后delta_pusch b,f,c需要根据DCI 中的TPC Command确定,一步步累加,DCI 中的TPC Command取值与delta_pusch b,f,c具体dB的对应关系如下。
而公式中的求和代表一段时间内的TPC Command 的求和,这段时间对应的是PUSCH 传输时机i-i0至传输时机i,更具体的对应的符号是K_pusch(i-i0)-1~K_pusch(i),针对动态DCI 调度的PUSCH传输时机画个示意图如下。
如果UE在计算f_b,f,c(i,l)时达到最大功率,那f_b,f,c(i,l)取前一次满足功率要求的值,即f_b,f,c(i,l)=f_b,f,c(i-i0,l)。
如果RRC层收到了P O_UE_PUSCHb,f,c(j)和a b,f,c(j)的新的配置,那fb,f,c(k,l)要重置为0,重新开始。
绝对值
RRC配置tpc-Accumulation时,代表的就是绝对值的情况,就是根据收到的DCI 去实时改变fb,f,c(i,l),同样要首先确定第一次PUSCH 传输fb,f,c(0,l) 的值,后面根据DCI 实时改变fb,f,c(i,l)就可以了。
fb,f,c(0,l)的确定
R16增加了2-step RA过程,因而针对UE收到 4-step RAR或者2-step RAR的回复后的PUSCH传输时的fb,f,c(0,l),及发送Msg A PUSCH时的fb,f,c(0,l)分别进行了相应规则的描述;R15中并不涉及2-step RA 所以只有第一段有关4-step RAR后PUSCH传输初值fb,f,c(0,l)的描述。
UE收到了4-step RAR或者2-step RAR的回复, 对应的第一次PUSCH 传输的f b,f,c(0,l) 由上图中的蓝色部分的长公式和绿色部分组成;其中绿色部分是Type1和2 RA 的RAR中的TPC command 提供,如下图;蓝色部分部分的意思是如果计算出的PUSCH 超出最大功率Pcmax,f,c,按最大功率发送,其中比较关键的一个参数是DeltaP_rampuprequested,b,f,c, 其对应的是第一次RA之目前RA preamble 发送的一个power 抬升值,即RA fail 再次进行RACH 时会涉及power up的操作,这时候增加的功率也要考虑进去,如上图38.321 5.1.4中的内容。
R16 对于2-step MsgA PUSCH初始传输时f b,f,c(0,l) 直接由上面的公式决定,由于没有接收RAR的问题,所以只由DeltaP_rampuprequested,b,f,c决定。
最后看两个例子,一个是Msg3 场景PUSCH的传输和正常场景下PUSCH 传输power 计算的内容。
Msg 3 PUSCH
P o_PUSCH,b,f,c(j)=P o_NOMINAL_PUSCH,f,c(j)+P o_UE_PUSCH,b,f,c(j)
对于Msg3 ,P o_NOMINAL_PUSCH,f,c(0)=P o_PRE+Delta_Preamnle_Msg3=preambleReceivedTargetpower+msg3-DeltaPreamble=-100+2×2=-96, P o_UE_PUSCH,b,f,c(0)=0,则P o_PUSCH,b,f,c(0)=-96;
log 中没有配置deltaMCS,根据规定这时候 Delte_TF,b,f,c(i) =0,正如上图中的Delta TF=0;没有配置msg3-Alpha,a_b,f,c (j)=1;
tpc-Accumulation没有配置,这时候f_b,f,c(i,l),采用累加的方式,由上面的截图可见这是第一次RACH,实际log中 一次RA也就成功了,f_b,f,c(0,l)=DeltaP_rampuprequested,b,f,c+Delta_msg2,b,f,c=(PREAMBLE_POWER_RAMPING_COUNTER – 1) × PREAMBLE_POWER_RAMPING_STEP+Delta_msg2,b,f,c=Delta_msg2,b,f,c,由上面的截图TPC Adjustment 对应的就是f_b,f,c(0,l)=6;PL_b,f,c(q_d)=112。
使用T_C_RNTI 发送的PUSCH 对应的就是Msg3 ,Num RBs=4 则M_PUSCH_RB,b,f,c(i)=4;SCS =30khz,对应2^u=2。
P o_PUSCH,b,f,c(j)+10log(2^u *M_PUSCH_RB,b,f,c(i))+a_b,f,c(j)*PL_b,f,c(q_d)+Delte_TF,b,f,c(i)+f_b,f,c(i,l)
-96+10log(2*4)+1*112+0+6=31 dbm,虽然算出来是31,但是还要根据参考MTPL,根据允许传输的最大功率进行传输。
RA成功后的第一次PUSCH传输
P o_PUSCH,b,f,c(j)=P o_NOMINAL_PUSCH,f,c(j)+P o_UE_PUSCH,b,f,c(j),对于正常情况下的PUSCH 功率控制,P o_NOMINAL_PUSCH,f,c(j)有p0-NominalWithoutGrant 则取其值;没有p0-NominalWithoutGrant 则取值P o_NOMINAL_PUSCH,f,c(0);log 都会配置p0-NominalWithGrant,这里
P o_NOMINAL_PUSCH,f,c(j)=-74;
这时候还没有配没有配置SRI-PUSCH-PowerControl,根据规定 j=2,P o_UE_PUSCH,b,f,c(j)要取P0-AlphaSets中第一个P0-PUSCH-AlphaSet 中的p0,P o_UE_PUSCH,b,f,c(2)=0,则P o_PUSCH,b,f,c(2)=-74;同理确定a_b,f,c(2)=0.8。
log 中没有配置deltaMCS,根据规定这时候 Delte_TF,b,f,c(i) =0,正如上图中的Delta TF=0;
tpc-Accumulation没有配置,这时候f_b,f,c(i,l),采用累加的方式,根据上面的TPC Adjustment 此时f_b,f,c(i,l)=0;PL_b,f,c(q_d)=112。
Num RBs=4 则M_PUSCH_RB,b,f,c(i)=4;SCS =30khz,对应2^u=2。
P o_PUSCH,b,f,c(j)+10log(2^u *M_PUSCH_RB,b,f,c(i))+a_b,f,c(j)*PL_b,f,c(q_d)+Delte_TF,b,f,c(i)+f_b,f,c(i,l)
-74+10log(2*4)+0.8*112+0+0=24.6,和log中打印的24 差0.6dbm,反复看,值应该没取错,结合设置的MTPL,算出来后还要与MTPL进行比较,取最小值。
本篇结束,感谢阅读。