RB分配总结.docx
- 文档编号:23957761
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:15
- 大小:588.58KB
RB分配总结.docx
《RB分配总结.docx》由会员分享,可在线阅读,更多相关《RB分配总结.docx(15页珍藏版)》请在冰豆网上搜索。
RB分配总结
RB分配总结
LTE中的RB分配包括PDSCH信道的RB的分配和PUSCH的RB分配,上下行调度时的资源分配总结如下:
(1)在数据调度的过程中,重传数据的资源分配优先于初传数据的资源分配。
(2)为了保证UE的数据传输能够分配到资源,在上下行实际分配RB之前,会使用gethole为UE预分配RB资源,即能够得到hole的UE就能够实际分配到RB。
(3)在为UE分配hole时,上下行都是按照LC的优先级进行的hole分配。
(4)在下行调度的过程中优先为PCCH,BCCH以及可能存在msg2,mag4事先预留PRB资源。
(5)上行调度过程中,PUCCH和PRACH占用的资源是静态配置的。
详细的资源分配参看下文。
1PDSCH资源分配
1.1下行hole相关
1.1.1下行hole初始化
在下行调度中,cell结构体下面会存在2个结构体,一个是子帧配置的结构体dl_subframe_hole_config[10],另外一个是调度用的结构体sched_dl_free_hole[10]。
这2个结构体中实际上就是2条链表,分别为子帧配置的链表和当前调度可用hole信息的链表。
下行hole初始化包括这两种的初始化,即函数mac_subframe_hole_init()和mac_dl_sched_freehole_list_init()。
1.1.1.1下行子帧配置初始化
mac_subframe_hole_init()就是对cell结构体下dl_subframe_hole_config[10]中链表的构建。
该函数在mac_dl_scheduler_init中调用,即增加小区时调用,配置在一个无线帧内上下行调度所能够使用的PRB资源。
由于在TDD中,对资源的利用是上下行所使用的频域资源相同,时域分开,即上行帧和下行帧不可能同时存在,所以在TDD中将一个无线帧上下行的子帧所能够使用的频域资源存放在一个结构体中,故在对子帧配置的资源的初始化时使用mac_subframe_hole_init()这一个函数。
图1为该函数的流程图:
图1,TDD代码中子帧配置的初始化
在将代码改为FDD时,在cell结构体下面将原来的上下行共用的资源配置的结构体分开为2个结构体dl_subframe_hole_config[10]和ul_subframe_hole_config[10]。
但在对上下行资源配置的初始化时并没有将其分开,还是在mac_subframe_hole_init()这一个函数中做,只是没有了参数sf_type,详细见代码。
1.1.1.2下行调度链表初始化
函数mac_dl_sched_freehole_list_init()就是对cell结构体中sched_dl_free_hole[10]的调度链表构建。
该函数在mac_dl_scheduler_prepare()中调用,即在下行调度准备中构建当前调度能够使用的PRB资源。
该函数的功能就是将子帧配置链表中取相应的子帧配置中能够使用的PRB资源,并将其中的信息组成一个节点插入到当前子帧的调度链表中作为第一个节点。
该节点的内容详见MAC_RB_HOLE。
函数流程图见图2。
图2下行调度链表初始化过程
1.1.2下行hole分配
下行hole分配分为初传的hole分配,和重传的hole分配。
1.1.2.1初传hole分配
初传的hole分配,使用mac_get_dl_hole()分配。
在下行调度过程中,按照逻辑信道的优先级为UE分配PDCCH和PDSCH资源,即CCE和hole,其中cce的分配在hole分配之后,即UE只有在取得了hole之后才会去申请CCE资源,关于CCE的分配详见CCE分配的详细设计文档。
此处的hole的分配是对PRB的一个预分配,并不是PRB的实际分配,其实际分配见1.2节。
对UE的hole的分配之前会为可能存在的msg2和msg4以及PCCH,BCCH预留PRB资源。
UE在满足以下2个条件时为其分配hole:
(1),UE被调度;
(2),UE有数据待发。
具体分配hole时,使用mac_get_dl_hole()为UE申请hole,该函数就是对当前调度的链表中的的节点一个一个的查找。
并且在mac_get_dl_hole的第二个参数会按1个RB的要求去申请,即UE申请所得到的hole内PRB的数目必须大于或等于1个PRB。
,若该节点中rbs_free大于或等于UE所申请的就将该节点返回给UE,并停止查找。
调度链表中节点的内容为MAC_RB_HOLE所定义的参数,其中参数rbs_free决定当前节点可不可以继续为UE分配hole,只有该参数大于1,该节点才能为UE分配hole。
在每次为UE成功分配一个hole时只会更新rbs_free这一个参数。
在使用mac_get_dl_hole()函数成功为UE申请hole后,会对节点中的参数rbs_free的更新。
首先将rbs_free减去1个PRB(此处可能会造成资源浪费),然后计算UE待发数据与其MACPDU子头部之和所需PRB数目(此处的计算是将UE的实际所需PRB数目减1,所以不会造成资源浪费)与当前节点中的rbs_free比较,取最小的那个值即为该UE的实际分配的PRB数目,之后将节点中的rbs_free减去该UE实际分配的PRB数目。
更新完毕之后将UE的实际分配的PRB数目填写到UE节点中,方便在实际PRB的分配时获取。
说明:
gethole在lte_mac_get_hole.c文件中,更新hole在调用mac_get_dl_hole()函数的lte_mac_dl_sched.c文件中,实际的RB分配在lte_mac_dfg.c文件中。
1.1.2.2重传hole分配
重传时,会根据UE是MIMO还是非MIMO的调用相应的函数进行hole分配,MIMO的使用函数mac_harq_dl_mimo_get_hole()对UE进行hole分配;非MIMO的使用函数mac_harq_dl_get_hole()对UE进行hole分配:
(1)在mac_harq_dl_get_hole()中会给非MIMO重传的UE分配PDCCH和PDSCH资源,更新hole节点信息,其中优先选择TYPE2类型的RBhole,如果满足资源分配要求的hole不是TYPE2的时候,需要更新hole节点中的subset参数,以供下次TYPE1调度使用。
(2)在mac_harq_dl_mimo_get_hole()中会给MIMO重传的UE分配PDCCH和PDSCH资源,如果申请的RB>=1,使用TYPE0分配并且将TYPE1的subset中的剩余RB构造新的TYPE2RBhole插入到下行调度用的freehole链表后面。
如果申请的RB<1,使用TYPE1分配并且将subset中剩余RB构造新的TYPE2RBhole。
1.2下行RB分配
下行RB的分配在协议中规定了3中资源分配方式:
Type0,Type1,Type2.具体的内容见TS36.2137.1.6节。
UE采用哪种资源分配方式跟UE的TM和RI相关,详见图3。
图3,TM,RI(DCI)与RB分配方式的关系
1.2.1下行初传的RB分配
在实际为UE分配PRB之前会按照一定顺序为UE进行实际的RB分配,此处会按照RI的值不同构造2条链表,即RI大于1的和等于1的UE排列链表;在每条链表中UE按照所需的数据量按从小到大(即数据量小的优先分配)排列。
首先为RI大于1(即MIMO空间复用)的链表中的UE分配PRB,其次为RI等于1的链表中的UE分配PRB。
实际的RB分配的函数为mac_make_pdsch_cfg_for_1ue(),该函数在lte_mac_dfg.c中。
在该函数中决定UE采用何种资源分配方式,详见图4和代码。
图4初传RB分配中UE所使用的资源分配方式
在决定了UE所使用的资源分配方式之后,会根据相应的资源分配方式调用相应的函数进行实际的RB分配,在RB分配成功后,会根据计算所得到的相关值填写结构体PDSCH_INFO。
相应的调用函数如下:
1.2.1.1RESOURCE_ALLOC_TYPE0
使用type0分配有2种情况:
(1)RI=1,但若在上行帧处理过程中将mac_cfg.resource_alloc_type_cfg置为RESOURCE_ALLOC_TYPE0则使用mac_calc_dl_rb_num_type0_ri1()计算rb_start和valid_rb_num。
否则使用type2分配。
(2)RI>1,且UE所需要的PRB数目大于或等于1个RBG时使用mac_calc_dl_rb_num_type0()计算rb_start和valid_rb_num。
在得到UE的rb_start和valid_rb_num这两个参数后,使用mac_calc_riv_of_type0()计算得到DCI信息中的ra值,即用比特表示的给该UE分配的PRB的实际位置。
1.2.1.2RESOURCE_ALLOC_TYPE1
使用type1分配只有一种情况:
RI>1,且UE所需的PRB数目小于一个RBG时使用mac_calc_dl_rb_num_type1()计算得到rb_start和valid_rb_num。
在得到UE的rb_start和valid_rb_num这两个参数后,使用mac_calc_riv_of_type1()计算得到DCI信息中的ra值,即用比特表示的给该UE分配的PRB的实际位置。
1.2.1.3RESOURCE_ALLOC_TYPE2
使用type2分配有2种情况:
其主要区别在确认用type2分配方式后
(1)若调度链表中节点信息中的first_meet_type0为1,即该节点已经使用过type0的资源分配方式,则调用mac_calc_dl_rb_num_type2_after_type0()计算rb_start和valid_rb_num。
(2)在与
(1)对立的情况使用mac_calc_dl_rb_num_type2_after_type1()计算rb_start和valid_rb_num。
在得到UE的rb_start和valid_rb_num这两个参数后,使用mac_calc_riv_of_type2()计算得到DCI信息中的ra值,即用比特表示的给该UE分配的PRB的实际位置
1.2.1.4下行初传RB分配小结
从代码中的3中资源分配方式对于MAC_RB_HOLE结构体中的参数的更新见表1,可以看出:
(1)type2不能放在第一次分配
(2)在第一次使用type0分配时,在函数mac_calc_dl_rb_num_type0()和mac_calc_dl_rb_num_type0_ri1()会判断first_meet_type0的标志位,若为0即首次遇到type0则更新current_prb。
MAC_RB_HOLE
Type0
Type1
Type2
rb_start
×
×
×
free_rb_num
√
√
√
current_prb
√
×
×
RBG_SUBSET
×
√
×
表1PRB分配后对节点参数的更新
具体的为某个UE实际分配RB的函数为mac_make_pdsch_cfg_for_1ue(),即1.2节的所有的分配都在这个函数中,详见该函数的流程图5。
图5mac_make_pdsch_cfg_for_1ue流程图
1.2.2下行重传的RB分配
在mac_dl_process_retr()函数中会对重传的UE按照MIMIO和非MIMO的分别排序。
在代码中重传的资源分配主要在mac_dl_process_retr()中,该函数的流程图见图6。
图6TDD中下行重传处理图
2PUSCH分配
相对于下行调度RB的分配,上行RB的分配就没有那么的复杂了,下行RB的分配有3中分配方式,而上行的资源分配只有一种方式,即给一个UE分配的PRB必须是连续的,可以说上行的RB分配方式就只有下行RB分配方式中的TYPE2这一种。
2.1上行hole相关
2.1.1上行hole初始化
在上行调度中,cell结构体下面会存在2个结构体,一个是子帧配置的结构体ul_subframe_hole_config[10],另外一个是调度用的结构体sched_ul_free_hole[10]。
2.1.1.1子帧配置链表初始化
与下行不同的是由于上行物理信道中存在PRACH信道与PUSCH抢占RB资源,而且PRACH的配置又存在奇帧和偶帧的差别,所以在上行的子帧配置的结构体ul_subframe_hole_config[10]中存在3条链表:
(1)没有PRACH的子帧配置链表no_pra_hole_cfg
(2)偶帧时存在PRACH的子帧配置链表even_frame_hole_cfg
(3)奇帧时存在PRACH的子帧配置链表odd_frame_hole_cfg
这3条链表的初始化在函数mac_subframe_hole_init()处理,详见图1。
2.1.1.2上行调度链表初始化
调度用的结构体sched_ul_free_hole[10]中存在一条给当前调度用的链表,该链表的初始化在函数mac_ul_sched_freehole_list_init()。
对上行调度链表的初始化即函数mac_ul_sched_freehole_list_init的流程,详见图7。
图7上行调度链表初始化流程图
2.1.2上行hole分配
上行hole分配包括2个函数mac_get_ul_hole()和mac_harq_ul_get_hole()即初传和重传的分配。
2.1.2.1上行初传hole分配
上行初传hole分配的过程即函数mac_get_ul_hole的流程。
该函数就是对当前调度的链表中的的节点一个一个的查找。
并且在mac_get_ul_hole的第二个参数会按1个RB的要求去申请,即UE申请所得到的hole内PRB的数目必须大于或等于1个PRB。
,若该节点中rbs_free大于或等于UE所申请的就将该节点返回给UE,并停止查找。
调度链表中节点的内容为MAC_RB_HOLE所定义的参数,其中参数rbs_free决定当前节点可不可以继续为UE分配hole,只有该参数大于1,该节点才能为UE分配hole。
在每次为UE成功分配一个hole时只会更新rbs_free这一个参数。
在使用mac_get_ul_hole()函数成功为UE申请hole后,会对节点中的参数rbs_free的更新。
首先将rbs_free减去1个PRB(此处可能会造成资源浪费),然后计算UE待发数据与其MACPDU子头部之和所需PRB数目(此处的计算是将UE的实际所需PRB数目减1,所以不会造成资源浪费)与当前节点中的rbs_free比较,取最小的那个值即为该UE的实际分配的PRB数目,之后将节点中的rbs_free减去该UE实际分配的PRB数目。
更新完毕之后将UE的实际分配的PRB数目填写到UE节点中,方便在实际PRB的分配时获取。
说明:
说明:
gethole在lte_mac_get_hole.c文件中,更新hole在调用mac_get_ul_hole()函数的lte_mac_ul_sched.c文件中,实际的RB分配在lte_mac_ul_sched.c文件中。
2.1.2.2上行重传hole分配
上行重传hole的分配的过程即函数mac_harq_ul_get_hole的流程,此过程比较复杂,但总体思想是为了做到上行HARQ是同步非自适应的过程。
但由于存在PRACH的配置并且PRACH信道不是在每个子帧上都存在,所以上行重传时不可能每次都能申请到与上一次传输时使用相同的PRB,所以当申请到相同的资源时就不申请CCE,没有申请到相同的资源时则会申请CCE。
详细过程见图8。
图8上行重传hole分配流程图
2.2上行RB分配
上行分配给UE的PRB数目必须满足条件2,3,5的幂。
2.2.1上行初传RB分配
上行调度中为UE分配RB的函数为mac_make_pusch_cfg_for_ue(),PUSCH中RB的分配是按照ue_id轮询分配的。
具体的见图9,
图9上行初传PRB分配
2.2.2上行重传RB分配
上行HAEQ重传包括2个部分:
msg3的重传和UE的重传。
2.2.2.1msg3的重传
Msg3的重传调用ul_harq_msg3_retr()分配资源,上行HARQ反馈信息TS36.300Table9.1-1,对于Msg3的重传目前只考虑在相同RB资源上重传,所以比较简单,此处不做介绍,详细可参看代码中的函数ul_harq_msg3_retr()。
2.2.2.2UE的重传
对于UE的重传调用ul_harq_ue_retr()分配资源,具体过程见图10。
图10上行HARQ重传资源分配(UE)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RB 分配 总结