intN_TA_offset=config->carrier_config.uplink_frequency.value<6000000?400:431;// reference samples for 25600Tc @ 30.72 Ms/s for FR1, same @ 61.44 Ms/s for FR2
intN_TA_offset=config->carrier_config.uplink_frequency.value<6000000?400:431;// reference samples for 25600Tc @ 30.72 Ms/s for FR1, same @ 61.44 Ms/s for FR2
doublefactor=1;
doublefactor=1;
switch(mu){
switch(mu){
case0://15 kHz scs
case0://15 kHz scs
AssertFatal(N_TA_offset==400,"scs_common 15kHz only for FR1\n");
AssertFatal(N_TA_offset==400,"scs_common 15kHz only for FR1\n");
if(N_RB<=25)factor=.25;// 7.68 Ms/s
factor=fp->samples_per_subframe/30720.0;
elseif(N_RB<=50)factor=.5;// 15.36 Ms/s
break;
elseif(N_RB<=75)factor=1.0;// 30.72 Ms/s
case1://30 kHz sc
elseif(N_RB<=100)factor=1.0;// 30.72 Ms/s
AssertFatal(N_TA_offset==400,"scs_common 30kHz only for FR1\n");
elseAssertFatal(1==0,"Too many PRBS for mu=0\n");
factor=fp->samples_per_subframe/30720.0;
break;
break;
case1://30 kHz sc
case2://60 kHz scs
AssertFatal(N_TA_offset==400,"scs_common 30kHz only for FR1\n");
AssertFatal(1==0,"scs_common should not be 60 kHz\n");
if(N_RB<=106)factor=2.0;// 61.44 Ms/s
break;
elseif(N_RB<=275)factor=4.0;// 122.88 Ms/s
case3://120 kHz scs
break;
AssertFatal(N_TA_offset==431,"scs_common 120kHz only for FR2\n");
case2://60 kHz scs
factor=fp->samples_per_subframe/61440.0;
AssertFatal(1==0,"scs_common should not be 60 kHz\n");
break;
break;
case4://240 kHz scs
case3://120 kHz scs
AssertFatal(N_TA_offset==431,"scs_common 240kHz only for FR2\n");
AssertFatal(N_TA_offset==431,"scs_common 120kHz only for FR2\n");
factor=fp->samples_per_subframe/61440.0;
break;
break;
case4://240 kHz scs
default:
AssertFatal(1==0,"scs_common should not be 60 kHz\n");
AssertFatal(1==0,"Invalid scs_common!\n");
if(N_RB<=32)factor=1.0;// 61.44 Ms/s
elseif(N_RB<=66)factor=2.0;// 122.88 Ms/s
elseAssertFatal(1==0,"N_RB %d is too big for curretn FR2 implementation\n",N_RB);
elseif(ue->dmrs_DownlinkConfig.pdsch_dmrs_AdditionalPosition==pdsch_dmrs_pos1||ue->dmrs_DownlinkConfig.pdsch_dmrs_AdditionalPosition==2)// TODO set to pdsch_dmrs_pos2 when available
elseif(ue->dmrs_DownlinkConfig.pdsch_dmrs_AdditionalPosition==pdsch_dmrs_pos1||ue->dmrs_DownlinkConfig.pdsch_dmrs_AdditionalPosition==2)// TODO set to pdsch_dmrs_pos2 when available
LOG_D(PHY,"Frame %d slot %d -- Starting UL time alignment procedures. TA update will be applied at frame %d slot %d\n",frame_rx,nr_slot_rx,ul_time_alignment->ta_frame,ul_time_alignment->ta_slot);
LOG_D(PHY,"Frame %d slot %d -- Starting UL time alignment procedures. TA update will be applied at frame %d slot %d\n",frame_rx,nr_slot_rx,ul_time_alignment->ta_frame,ul_time_alignment->ta_slot);