OAILTE代码解读资料Word文档下载推荐.docx

上传人:b****2 文档编号:5660246 上传时间:2023-05-05 格式:DOCX 页数:23 大小:96.44KB
下载 相关 举报
OAILTE代码解读资料Word文档下载推荐.docx_第1页
第1页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第2页
第2页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第3页
第3页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第4页
第4页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第5页
第5页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第6页
第6页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第7页
第7页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第8页
第8页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第9页
第9页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第10页
第10页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第11页
第11页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第12页
第12页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第13页
第13页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第14页
第14页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第15页
第15页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第16页
第16页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第17页
第17页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第18页
第18页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第19页
第19页 / 共23页
OAILTE代码解读资料Word文档下载推荐.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

OAILTE代码解读资料Word文档下载推荐.docx

《OAILTE代码解读资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《OAILTE代码解读资料Word文档下载推荐.docx(23页珍藏版)》请在冰点文库上搜索。

OAILTE代码解读资料Word文档下载推荐.docx

if(RA_template->

generate_rar==1)

后给eNB->

common_channels[CC_id].RA_template[i]->

RA_alloc_pdu1赋值。

然后调用add_common_dci

将eNB->

RA_alloc_pdu1

复制到&

eNB->

common_channels[CC_id].DCI_pdu。

并将ra_flag置1

接着在

这个函数里查到ra_flag为1后

elseif(DCI_pdu->

dci_alloc[i].ra_flag==1)

调用

generate_eNB_dlsch_params_from_dci

将根据DCI里的信息计算出的dlsch的参数放到phy_vars_eNB->

dlsch_eNB_ra,并将phy_vars_eNB->

dlsch_eNB_ra->

active置1。

接着接着在

判断if(phy_vars_eNB->

active==1)

在这个函数里填充RAR。

crnti=mac_xface->

fill_rar

在fill_rar里清除generate_rar标志。

eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[i].generate_rar=0;

根据RAR算出接收MSG3的参数和子帧位置。

并置位Msg3_active。

generate_eNB_ulsch_params_from_rar

phy_vars_eNB->

ulsch_eNB[(uint32_t)UE_id]->

Msg3_active=1;

get_Msg3_alloc(&

lte_frame_parms,

subframe,

phy_vars_eNB->

proc[sched_subframe].frame_tx,

&

Msg3_frame,

Msg3_subframe);

接着物理层处理RAR并清除active标志。

dlsch_encoding

dlsch_scrambling

dlsch_modulation

active=0;

1.3接收MSG3

phy_procedures_eNB_RX

里调用

process_Msg3

这个函数里看Msg3_active是否为1,并且检查是否到了接收Msg3的子帧。

if((phy_vars_eNB->

Msg3_active==1)&

&

(phy_vars_eNB->

Msg3_subframe==subframe)&

Msg3_frame==frame))

phy_vars_eNB->

Msg3_active=0;

Msg3_flag=1;

harq_processes[harq_pid]->

subframe_scheduling_flag=1;

接着在phy_procedures_eNB_RX检查

ulsch_eNB[i])&

ulsch_eNB[i]->

rnti>

0)&

subframe_scheduling_flag==1))

{

ulsch_decoding

if(ret==(1+MAX_TURBO_ITERATIONS))//接收失败,重传MSG3

if(phy_vars_eNB->

Msg3_flag==1)

//到达最大重传次数,取消随机接入

round==

lte_frame_parms.maxHARQ_Msg3Tx)

cancel_ra_proc(phy_vars_eNB->

Mod_id,

phy_vars_eNB->

CC_id,

frame,

eNB_UE_stats[i].crnti);

//Msg3重新,重新计算接收的子帧。

else

ulsch_eNB[(uint32_t)i]->

get_Msg3_alloc_ret(&

subframe,

frame,

&

}

else//接收正确

rx_sdu

Msg3_flag=0;

在这个函数里判断如果是随机接则置位generate_Msg4

if((eNB->

common_channels[CC_id].RA_template[ii].rnti==rntiP)&

(eNB->

common_channels[CC_id].RA_template[ii].RA_active==TRUE))

eNB->

common_channels[CC_id].RA_template[ii].generate_Msg4=1;

common_channels[CC_id].RA_template[ii].wait_ack_Msg4=0;

1.4发送MSG4

elseif(RA_template[i].generate_Msg4==1)

给eNB->

common_channels[CC_id].RA_template[i].RA_alloc_pdu2这个DCI赋值。

RA_template[i].generate_Msg4=0;

RA_template[i].generate_Msg4_dci=1;

RA_template[i].wait_ack_Msg4=1;

RA_template[i].RA_active=FALSE;

generate_Msg4_dci==1)

RA_alloc_pdu2赋值

add_ue_spec_dci

RA_template->

generate_Msg4_dci=0;

elseif(RA_template->

wait_ack_Msg4==1)

if(round>

0)

//重传Msg4

2上行HARQ

2.1eNB检测UE发送上行SR

//checkSRavailability

do_SR=is_SR_subframe(phy_vars_eNB,i,sched_subframe);

if(do_SR==1)

{

metric0=rx_pucch(phy_vars_eNB,

pucch_format1,

i,phy_vars_eNB->

scheduling_request_config[i].sr_PUCCH_ResourceIndex,

0,//n2_pucch

1,//shortenedformat

SR_payload,

PUCCH1_THRES);

if(SR_payload==1)

mac_xface->

SR_indication(phy_vars_eNB->

dlsch_eNB[i][0]->

rnti,subframe);

}

SR_indication

UE_list->

UE_template[cc_idP][UE_id].ul_SR=1;

UE_template[cc_idP][UE_id].ul_active=TRUE;

2.2eNb上行调度BSR和一般调度

schedule_ulsch

schedule_ulsch_rnti

ret=mac_xface->

get_ue_active_harq_pid

if(round==0)//只处理初传

UE_template->

ul_SR=0;

buffer_occupancy=((UE_template->

bsr_info[LCGID0]==0)&

(UE_template->

bsr_info[LCGID1]==0)&

bsr_info[LCGID2]==0)&

bsr_info[LCGID3]==0))?

BSR_TABLE[11]:

//Thisiswhenwe'

vereceivedSRandbuffersarefullyserved

BSR_TABLE[UE_template->

bsr_info[LCGID0]]+

bsr_info[LCGID1]]+

bsr_info[LCGID2]]+

bsr_info[LCGID3]];

根据UE侧要传送的数据大小调整发送的大小,确定rballoc和first_rb。

eNB_mac_inst[module_idP]->

ULSCH_DCI[harq_pid]赋值。

将ULSCH_dci复制到&

common_channels[CC_id].DCI_pdu

add_ue_spec_dci(DCI_pdu,

ULSCH_dci,

rnti,

sizeof(DCI0_5MHz_TDD_1_6_t),

aggregation,

sizeof_DCI0_5MHz_TDD_1_6_t,

format0,

0);

在下行发送format0的DCI的时候,计算出对应的发送PUSCH的上行子帧及HARQid,置位subframe_scheduling_flag。

for(i=0;

i<

DCI_pdu->

Num_common_dci+DCI_pdu->

Num_ue_spec_dci;

i++)

if(DCI_pdu->

dci_alloc[i].format==format0)

{

harq_pid=subframe2harq_pid(&

pdcch_alloc2ul_frame

pdcch_alloc2ul_subframe);

generate_eNB_ulsch_params_from_dciphy_vars_eNB->

subframe_scheduling_flag=1

2.3eNB接收BSR和上行初传和重传

(phy_vars_eNB->

rx_ulsch

ulsch_decoding

if(ret==(1+MAX_TURBO_ITERATIONS))//接收错误

phich_active=1;

phich_ACK=0;

round++;

if(phy_vars_eNB->

round==phy_vars_eNB->

Mdlharq)

eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]++;

eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]==ULSCH_max_consecutive_errors)

remove_ue(phy_vars_eNB->

eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);

else//正确接收

phich_ACK=1;

round=0;

//对于上行调度BSR,会在rx_sdu里处理BSRcontrolelement。

for(i=0;

num_ce;

i++)

caseTRUNCATED_BSR:

caseSHORT_BSR:

UE_template[CC_id][UE_id].bsr_info[lcgid]=(payload_ptr[0]&

0x3f);

caseLONG_BSR:

UE_template[CC_id][UE_id].bsr_info[LCGID0]=((payload_ptr[0]&

0xFC)>

>

2);

UE_list->

UE_template[CC_id][UE_id].bsr_info[LCGID1]=

((payload_ptr[0]&

0x03)<

<

4)|((payload_ptr[1]&

0xF0)>

4);

UE_template[CC_id][UE_id].bsr_info[LCGID2]=

((payload_ptr[1]&

0x0F)<

2)|((payload_ptr[2]&

0xC0)>

6);

UE_template[CC_id][UE_id].bsr_info[LCGID3]=(payload_ptr[2]&

0x3F);

//对于一般接收,将接收到的数据发到高层

num_sdu;

caseCCCH:

mac_rrc_data_ind

caseDCCH:

caseDCCH1:

mac_rlc_data_ind

caseDTCH:

2.4eNB反馈Ack/Nack

if(is_phich_subframe(&

lte_frame_parms,subframe))

generate_phich_top

//根据当前的phich子帧找到对应的上行发送PUSCH的子帧,再找到这个子帧对应的harq_pid

pusch_frame=phich_frame2_pusch_frame

pusch_subframe=phich_subframe2_pusch_subframe;

harq_pid=subframe2harq_pid(frame_parms,pusch_frame,pusch_subframe);

if(ulsch_eNB[UE_id]->

phich_active==1)

generate_phich

phich_ACK==0)

ulsch_eNB[UE_id]->

subframe_scheduling_flag=1;

//ulsch_eNB[UE_id]->

//thisisalreadydoneinphy_procedures

ulsch_eNB[UE_id]->

rvidx=rv_table[ulsch_eNB[UE_id]->

round&

3];

subframe_scheduling_flag=0;

round=0;

phich_active=0;

3下行HARQ

3.1eNB下行初传和重传

schedule_ue_spec

get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&

harq_pid,&

round,0);

//下行重传

if(round>

0)

//DLSCH_dci)->

ndi=0//NDI末赋值

DLSCH_dci)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2