Merge branch 'NR_RRC_PRACH_procedures' of https://gitlab.eurecom.fr/oai/openairinterface5g into NR_RRC_PRACH_procedures
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
#include "phy_init.h"
|
#include "phy_init.h"
|
||||||
#include "SCHED/sched_common.h"
|
#include "SCHED/sched_common.h"
|
||||||
#include "PHY/phy_extern.h"
|
#include "PHY/phy_extern.h"
|
||||||
|
#include "PHY/NR_TRANSPORT/nr_transport.h"
|
||||||
#include "SIMULATION/TOOLS/sim.h"
|
#include "SIMULATION/TOOLS/sim.h"
|
||||||
/*#include "RadioResourceConfigCommonSIB.h"
|
/*#include "RadioResourceConfigCommonSIB.h"
|
||||||
#include "RadioResourceConfigDedicated.h"
|
#include "RadioResourceConfigDedicated.h"
|
||||||
|
|||||||
@@ -278,8 +278,10 @@ void rx_nr_prach_ru(RU_t *ru,
|
|||||||
//50 MHz @ 61.44 Ms/s
|
//50 MHz @ 61.44 Ms/s
|
||||||
prach2 = prach[aa] + (Ncp<<2);
|
prach2 = prach[aa] + (Ncp<<2);
|
||||||
if (prach_sequence_length == 0) {
|
if (prach_sequence_length == 0) {
|
||||||
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2)
|
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2) {
|
||||||
|
dftlen=49152;
|
||||||
dft49152(prach2,rxsigF[aa],1);
|
dft49152(prach2,rxsigF[aa],1);
|
||||||
|
}
|
||||||
if (prach_fmt == 1 || prach_fmt == 2) {
|
if (prach_fmt == 1 || prach_fmt == 2) {
|
||||||
dft49152(prach2+98304,rxsigF[aa]+98304,1);
|
dft49152(prach2+98304,rxsigF[aa]+98304,1);
|
||||||
reps++;
|
reps++;
|
||||||
@@ -290,11 +292,13 @@ void rx_nr_prach_ru(RU_t *ru,
|
|||||||
reps+=2;
|
reps+=2;
|
||||||
}
|
}
|
||||||
if (prach_fmt == 3) {
|
if (prach_fmt == 3) {
|
||||||
|
dftlen=12288;
|
||||||
for (int i=0;i<4;i++) dft12288(prach2+(i*12288*2),rxsigF[aa]+(i*12288*2),1);
|
for (int i=0;i<4;i++) dft12288(prach2+(i*12288*2),rxsigF[aa]+(i*12288*2),1);
|
||||||
reps=4;
|
reps=4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
dftlen=2048;
|
||||||
dft2048(prach2,rxsigF[aa],1);
|
dft2048(prach2,rxsigF[aa],1);
|
||||||
if (prach_fmt != 7) { // !=C0
|
if (prach_fmt != 7) { // !=C0
|
||||||
dft2048(prach2+4096,rxsigF[aa]+4096,1);
|
dft2048(prach2+4096,rxsigF[aa]+4096,1);
|
||||||
@@ -317,10 +321,11 @@ void rx_nr_prach_ru(RU_t *ru,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 40 MHz @ 46.08 Ms/s
|
// 40 MHz @ 46.08 Ms/s
|
||||||
|
prach2 = prach[aa] + (3*Ncp);
|
||||||
if (prach_sequence_length == 0) {
|
if (prach_sequence_length == 0) {
|
||||||
prach2 = prach[aa] + (3*Ncp);
|
|
||||||
AssertFatal(fp->N_RB_UL <= 107,"cannot do 108..136 PRBs with 3/4 sampling\n");
|
AssertFatal(fp->N_RB_UL <= 107,"cannot do 108..136 PRBs with 3/4 sampling\n");
|
||||||
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2) {
|
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2) {
|
||||||
|
dftlen=36864;
|
||||||
dft36864(prach2,rxsigF[aa],1);
|
dft36864(prach2,rxsigF[aa],1);
|
||||||
reps++;
|
reps++;
|
||||||
}
|
}
|
||||||
@@ -334,10 +339,12 @@ void rx_nr_prach_ru(RU_t *ru,
|
|||||||
reps+=2;
|
reps+=2;
|
||||||
}
|
}
|
||||||
if (prach_fmt == 3) {
|
if (prach_fmt == 3) {
|
||||||
|
dftlen=9216;
|
||||||
for (int i=0;i<4;i++) dft9216(prach2+(i*9216*2),rxsigF[aa]+(i*9216*2),1);
|
for (int i=0;i<4;i++) dft9216(prach2+(i*9216*2),rxsigF[aa]+(i*9216*2),1);
|
||||||
reps=4;
|
reps=4;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
dftlen=1536;
|
||||||
dft1536(prach2,rxsigF[aa],1);
|
dft1536(prach2,rxsigF[aa],1);
|
||||||
if (prach_fmt != 0xc0) {
|
if (prach_fmt != 0xc0) {
|
||||||
dft1536(prach2+3072,rxsigF[aa]+3072,1);
|
dft1536(prach2+3072,rxsigF[aa]+3072,1);
|
||||||
@@ -364,12 +371,13 @@ void rx_nr_prach_ru(RU_t *ru,
|
|||||||
else if (fp->N_RB_UL <= 273) {
|
else if (fp->N_RB_UL <= 273) {
|
||||||
if (fp->threequarter_fs==0) {
|
if (fp->threequarter_fs==0) {
|
||||||
prach2 = prach[aa] + (Ncp<<3);
|
prach2 = prach[aa] + (Ncp<<3);
|
||||||
dftlen=98304;
|
|
||||||
//80,90,100 MHz @ 122.88 Ms/s
|
//80,90,100 MHz @ 122.88 Ms/s
|
||||||
|
|
||||||
if (prach_sequence_length == 0) {
|
if (prach_sequence_length == 0) {
|
||||||
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2)
|
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2) {
|
||||||
|
dftlen=98304;
|
||||||
dft98304(prach2,rxsigF[aa],1);
|
dft98304(prach2,rxsigF[aa],1);
|
||||||
|
}
|
||||||
if (prach_fmt == 1 || prach_fmt == 2) {
|
if (prach_fmt == 1 || prach_fmt == 2) {
|
||||||
dft98304(prach2+196608,rxsigF[aa]+196608,1);
|
dft98304(prach2+196608,rxsigF[aa]+196608,1);
|
||||||
reps++;
|
reps++;
|
||||||
@@ -380,9 +388,9 @@ void rx_nr_prach_ru(RU_t *ru,
|
|||||||
reps+=2;
|
reps+=2;
|
||||||
}
|
}
|
||||||
if (prach_fmt == 3) {
|
if (prach_fmt == 3) {
|
||||||
|
dftlen=24576;
|
||||||
for (int i=0;i<4;i++) dft24576(prach2+(i*2*24576),rxsigF[aa]+(i*2*24576),1);
|
for (int i=0;i<4;i++) dft24576(prach2+(i*2*24576),rxsigF[aa]+(i*2*24576),1);
|
||||||
reps=4;
|
reps=4;
|
||||||
dftlen=24576;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -412,9 +420,9 @@ void rx_nr_prach_ru(RU_t *ru,
|
|||||||
AssertFatal(fp->N_RB_UL <= 217,"cannot do more than 217 PRBs with 3/4 sampling\n");
|
AssertFatal(fp->N_RB_UL <= 217,"cannot do more than 217 PRBs with 3/4 sampling\n");
|
||||||
prach2 = prach[aa] + (6*Ncp);
|
prach2 = prach[aa] + (6*Ncp);
|
||||||
// 80 MHz @ 92.16 Ms/s
|
// 80 MHz @ 92.16 Ms/s
|
||||||
dftlen=73728;
|
|
||||||
if (prach_sequence_length == 0) {
|
if (prach_sequence_length == 0) {
|
||||||
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2) {
|
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2) {
|
||||||
|
dftlen=73728;
|
||||||
dft73728(prach2,rxsigF[aa],1);
|
dft73728(prach2,rxsigF[aa],1);
|
||||||
reps++;
|
reps++;
|
||||||
}
|
}
|
||||||
@@ -423,9 +431,9 @@ void rx_nr_prach_ru(RU_t *ru,
|
|||||||
reps++;
|
reps++;
|
||||||
}
|
}
|
||||||
if (prach_fmt == 3) {
|
if (prach_fmt == 3) {
|
||||||
|
dftlen=18432;
|
||||||
for (int i=0;i<4;i++) dft18432(prach2+(i*2*18432),rxsigF[aa]+(i*2*18432),1);
|
for (int i=0;i<4;i++) dft18432(prach2+(i*2*18432),rxsigF[aa]+(i*2*18432),1);
|
||||||
reps=4;
|
reps=4;
|
||||||
dftlen=18432;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dftlen=3072;
|
dftlen=3072;
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm
|
|||||||
//cfg->prach_config.num_prach_fd_occasions_list[i].num_unused_root_sequences.value = ???
|
//cfg->prach_config.num_prach_fd_occasions_list[i].num_unused_root_sequences.value = ???
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg->prach_config.ssb_per_rach.value = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present;
|
cfg->prach_config.ssb_per_rach.value = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present-1;
|
||||||
cfg->prach_config.ssb_per_rach.tl.tag = NFAPI_NR_CONFIG_SSB_PER_RACH_TAG;
|
cfg->prach_config.ssb_per_rach.tl.tag = NFAPI_NR_CONFIG_SSB_PER_RACH_TAG;
|
||||||
cfg->num_tlv++;
|
cfg->num_tlv++;
|
||||||
|
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config));
|
NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config));
|
||||||
memset((void*)CG_Config,0,sizeof(*CG_Config));
|
memset((void*)CG_Config,0,sizeof(*CG_Config));
|
||||||
//int CG_Config_size = generate_CG_Config(rrc,CG_Config,ue_context_p->ue_context.reconfig,ue_context_p->ue_context.rb_config);
|
//int CG_Config_size = generate_CG_Config(rrc,CG_Config,ue_context_p->ue_context.reconfig,ue_context_p->ue_context.rb_config);
|
||||||
|
generate_CG_Config(rrc,CG_Config,ue_context_p->ue_context.reconfig,ue_context_p->ue_context.rb_config);
|
||||||
|
|
||||||
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
|
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
|
||||||
// Send to X2 entity to transport to MeNB
|
// Send to X2 entity to transport to MeNB
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ gNBs =
|
|||||||
#1,2,4,8,10,20,40,80
|
#1,2,4,8,10,20,40,80
|
||||||
ra_ResponseWindow = 4;
|
ra_ResponseWindow = 4;
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
#ra_ContentionResolutionTimer
|
#ra_ContentionResolutionTimer
|
||||||
@@ -114,8 +114,8 @@ gNBs =
|
|||||||
ra_ContentionResolutionTimer = 7;
|
ra_ContentionResolutionTimer = 7;
|
||||||
rsrp_ThresholdSSB = 19;
|
rsrp_ThresholdSSB = 19;
|
||||||
#prach-RootSequenceIndex_PR
|
#prach-RootSequenceIndex_PR
|
||||||
#0 = 839, 1 = 139
|
#1 = 839, 2 = 139
|
||||||
prach_RootSequenceIndex_PR = 1;
|
prach_RootSequenceIndex_PR = 2;
|
||||||
prach_RootSequenceIndex = 1;
|
prach_RootSequenceIndex = 1;
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ gNBs =
|
|||||||
#1,2,4,8,10,20,40,80
|
#1,2,4,8,10,20,40,80
|
||||||
ra_ResponseWindow = 4;
|
ra_ResponseWindow = 4;
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
#ra_ContentionResolutionTimer
|
#ra_ContentionResolutionTimer
|
||||||
@@ -114,8 +114,8 @@ gNBs =
|
|||||||
ra_ContentionResolutionTimer = 7;
|
ra_ContentionResolutionTimer = 7;
|
||||||
rsrp_ThresholdSSB = 19;
|
rsrp_ThresholdSSB = 19;
|
||||||
#prach-RootSequenceIndex_PR
|
#prach-RootSequenceIndex_PR
|
||||||
#0 = 839, 1 = 139
|
#1 = 839, 2 = 139
|
||||||
prach_RootSequenceIndex_PR = 1;
|
prach_RootSequenceIndex_PR = 2;
|
||||||
prach_RootSequenceIndex = 1;
|
prach_RootSequenceIndex = 1;
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ gNBs =
|
|||||||
#1,2,4,8,10,20,40,80
|
#1,2,4,8,10,20,40,80
|
||||||
ra_ResponseWindow = 4;
|
ra_ResponseWindow = 4;
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
#ra_ContentionResolutionTimer
|
#ra_ContentionResolutionTimer
|
||||||
@@ -114,8 +114,8 @@ gNBs =
|
|||||||
ra_ContentionResolutionTimer = 7;
|
ra_ContentionResolutionTimer = 7;
|
||||||
rsrp_ThresholdSSB = 19;
|
rsrp_ThresholdSSB = 19;
|
||||||
#prach-RootSequenceIndex_PR
|
#prach-RootSequenceIndex_PR
|
||||||
#0 = 839, 1 = 139
|
#1 = 839, 2 = 139
|
||||||
prach_RootSequenceIndex_PR = 1;
|
prach_RootSequenceIndex_PR = 2;
|
||||||
prach_RootSequenceIndex = 1;
|
prach_RootSequenceIndex = 1;
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ gNBs =
|
|||||||
#1,2,4,8,10,20,40,80
|
#1,2,4,8,10,20,40,80
|
||||||
ra_ResponseWindow = 4;
|
ra_ResponseWindow = 4;
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
#ra_ContentionResolutionTimer
|
#ra_ContentionResolutionTimer
|
||||||
@@ -114,8 +114,8 @@ gNBs =
|
|||||||
ra_ContentionResolutionTimer = 7;
|
ra_ContentionResolutionTimer = 7;
|
||||||
rsrp_ThresholdSSB = 19;
|
rsrp_ThresholdSSB = 19;
|
||||||
#prach-RootSequenceIndex_PR
|
#prach-RootSequenceIndex_PR
|
||||||
#0 = 839, 1 = 139
|
#1 = 839, 2 = 139
|
||||||
prach_RootSequenceIndex_PR = 1;
|
prach_RootSequenceIndex_PR = 2;
|
||||||
prach_RootSequenceIndex = 1;
|
prach_RootSequenceIndex = 1;
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ gNBs =
|
|||||||
#1,2,4,8,10,20,40,80
|
#1,2,4,8,10,20,40,80
|
||||||
ra_ResponseWindow = 4;
|
ra_ResponseWindow = 4;
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
#ra_ContentionResolutionTimer
|
#ra_ContentionResolutionTimer
|
||||||
@@ -114,8 +114,8 @@ gNBs =
|
|||||||
ra_ContentionResolutionTimer = 7;
|
ra_ContentionResolutionTimer = 7;
|
||||||
rsrp_ThresholdSSB = 19;
|
rsrp_ThresholdSSB = 19;
|
||||||
#prach-RootSequenceIndex_PR
|
#prach-RootSequenceIndex_PR
|
||||||
#0 = 839, 1 = 139
|
#1 = 839, 2 = 139
|
||||||
prach_RootSequenceIndex_PR = 1;
|
prach_RootSequenceIndex_PR = 2;
|
||||||
prach_RootSequenceIndex = 1;
|
prach_RootSequenceIndex = 1;
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
#
|
#
|
||||||
|
|||||||
Reference in New Issue
Block a user