Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG-RAN
Commits
dcf25f35
Commit
dcf25f35
authored
Jun 21, 2019
by
Srushti
Committed by
Florian Kaltenberger
Jun 21, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added PRACH UE Procedures into prachsim
parent
07ac703f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
201 additions
and
5 deletions
+201
-5
cmake_targets/build_oai
cmake_targets/build_oai
+1
-1
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+1
-0
openair1/PHY/defs_nr_common.h
openair1/PHY/defs_nr_common.h
+1
-0
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+190
-0
openair1/SIMULATION/NR_PHY/prachsim.c
openair1/SIMULATION/NR_PHY/prachsim.c
+8
-4
No files found.
cmake_targets/build_oai
View file @
dcf25f35
...
...
@@ -684,7 +684,7 @@ function main() {
echo_info
"Compiling unitary tests simulators"
# TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
#simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
simlist
=
"nr_p
ucchsim dlsim ulsim polartest ldpctest smallblocktest nr_pbchsim nr_dlschsim nr_dlsim nr_ulschsim nr_prachsim
"
simlist
=
"nr_p
rachsim nr_pucchsim dlsim ulsim polartest ldpctest smallblocktest nr_pbchsim nr_dlschsim nr_dlsim nr_ulschsim
"
for
f
in
$simlist
;
do
compilations
\
phy_simulators
$f
\
...
...
openair1/PHY/defs_nr_UE.h
View file @
dcf25f35
...
...
@@ -1035,6 +1035,7 @@ typedef struct {
int
current_dlsch_cqi
[
NUMBER_OF_CONNECTED_eNB_MAX
];
unsigned
char
first_run_timing_advance
[
NUMBER_OF_CONNECTED_eNB_MAX
];
uint8_t
generate_prach
;
uint8_t
generate_nr_prach
;
uint8_t
prach_cnt
;
uint8_t
prach_PreambleIndex
;
// uint8_t prach_timer;
...
...
openair1/PHY/defs_nr_common.h
View file @
dcf25f35
...
...
@@ -242,6 +242,7 @@ typedef struct NR_DL_FRAME_PARMS {
/// total Number of Resource Block Groups: this is ceil(N_PRB/P)
/// Frame type (0 FDD, 1 TDD)
lte_frame_type_t
frame_type
;
uint8_t
tdd_config
;
/// Cell ID
uint16_t
Nid_cell
;
/// subcarrier spacing (15,30,60,120)
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
dcf25f35
...
...
@@ -4798,3 +4798,193 @@ uint8_t is_ri_TXOp(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t gNB_id)
else
return
(
0
);
}
void
nr_ue_prach_procedures
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
abstraction_flag
,
runmode_t
mode
)
{
int
frame_tx
=
proc
->
frame_tx
;
int
nr_tti_tx
=
proc
->
nr_tti_tx
;
int
prach_power
;
uint16_t
preamble_tx
=
50
;
PRACH_RESOURCES_t
prach_resources
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH
,
VCD_FUNCTION_IN
);
ue
->
generate_nr_prach
=
0
;
if
(
ue
->
mac_enabled
==
0
){
ue
->
prach_resources
[
eNB_id
]
=
&
prach_resources
;
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
=
preamble_tx
;
ue
->
prach_resources
[
eNB_id
]
->
ra_TDD_map_index
=
0
;
}
if
(
ue
->
mac_enabled
==
1
){
// ask L2 for RACH transport
if
((
mode
!=
rx_calib_ue
)
&&
(
mode
!=
rx_calib_ue_med
)
&&
(
mode
!=
rx_calib_ue_byp
)
&&
(
mode
!=
no_L2_connect
)
)
{
LOG_D
(
PHY
,
"Getting PRACH resources
\n
"
);
//ue->prach_resources[eNB_id] = mac_xface->ue_get_rach(ue->Mod_id,ue->CC_id,frame_tx,eNB_id,nr_tti_tx);
// LOG_D(PHY,"Got prach_resources for eNB %d address %p, RRCCommon %p\n",eNB_id,ue->prach_resources[eNB_id],UE_mac_inst[ue->Mod_id].radioResourceConfigCommon);
// LOG_D(PHY,"Prach resources %p\n",ue->prach_resources[eNB_id]);
}
}
if
(
ue
->
prach_resources
[
eNB_id
]
!=
NULL
)
{
ue
->
generate_nr_prach
=
1
;
ue
->
prach_cnt
=
0
;
#ifdef SMBV
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
=
preamble_tx
;
#endif
#ifdef OAI_EMU
ue
->
prach_PreambleIndex
=
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
;
#endif
if
(
abstraction_flag
==
0
)
{
LOG_I
(
PHY
,
"mode %d
\n
"
,
mode
);
if
((
ue
->
mac_enabled
==
1
)
&&
(
mode
!=
calib_prach_tx
))
{
ue
->
tx_power_dBm
[
nr_tti_tx
]
=
ue
->
prach_resources
[
eNB_id
]
->
ra_PREAMBLE_RECEIVED_TARGET_POWER
+
get_nr_PL
(
ue
,
eNB_id
);
}
else
{
ue
->
tx_power_dBm
[
nr_tti_tx
]
=
ue
->
tx_power_max_dBm
;
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
=
preamble_tx
;
}
LOG_I
(
PHY
,
"[UE %d][RAPROC] Frame %d, nr_tti_rx %d : Generating PRACH, preamble %d,PL %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d
\n
"
,
ue
->
Mod_id
,
frame_tx
,
nr_tti_tx
,
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
,
get_nr_PL
(
ue
,
eNB_id
),
ue
->
tx_power_dBm
[
nr_tti_tx
],
ue
->
prach_resources
[
eNB_id
]
->
ra_PREAMBLE_RECEIVED_TARGET_POWER
,
ue
->
prach_resources
[
eNB_id
]
->
ra_TDD_map_index
,
ue
->
prach_resources
[
eNB_id
]
->
ra_RNTI
);
ue
->
tx_total_RE
[
nr_tti_tx
]
=
96
;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
ue
->
prach_vars
[
eNB_id
]
->
amp
=
get_tx_amp
(
ue
->
tx_power_dBm
[
nr_tti_tx
],
ue
->
tx_power_max_dBm
,
ue
->
frame_parms
.
N_RB_UL
,
6
);
#else
ue
->
prach_vars
[
eNB_id
]
->
amp
=
AMP
;
#endif
if
((
mode
==
calib_prach_tx
)
&&
(((
proc
->
frame_tx
&
0xfffe
)
%
100
)
==
0
))
LOG_D
(
PHY
,
"[UE %d][RAPROC] Frame %d, nr_tti_rx %d : PRACH TX power %d dBm, amp %d
\n
"
,
ue
->
Mod_id
,
proc
->
frame_rx
,
proc
->
nr_tti_tx
,
ue
->
tx_power_dBm
[
nr_tti_tx
],
ue
->
prach_vars
[
eNB_id
]
->
amp
);
// start_meas(&ue->tx_prach);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH
,
VCD_FUNCTION_IN
);
// prach_power = generate_nr_prach(ue,eNB_id,nr_tti_tx,frame_tx);
prach_power
=
generate_nr_prach
(
ue
,
0
,
9
,
0
);
//subframe number hardcoded according to the simulator
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH
,
VCD_FUNCTION_OUT
);
// stop_meas(&ue->tx_prach);
LOG_D
(
PHY
,
"[UE %d][RAPROC] PRACH PL %d dB, power %d dBm, digital power %d dB (amp %d)
\n
"
,
ue
->
Mod_id
,
get_nr_PL
(
ue
,
eNB_id
),
ue
->
tx_power_dBm
[
nr_tti_tx
],
dB_fixed
(
prach_power
),
ue
->
prach_vars
[
eNB_id
]
->
amp
);
}
/* else {
UE_transport_info[ue->Mod_id][ue->CC_id].cntl.prach_flag=1;
UE_transport_info[ue->Mod_id][ue->CC_id].cntl.prach_id=ue->prach_resources[eNB_id]->ra_PreambleIndex;
}*/
// commented for compiling as abstraction flag is 0
if
(
ue
->
mac_enabled
==
1
){
//mac_xface->Msg1_transmitted(ue->Mod_id,ue->CC_id,frame_tx,eNB_id);
}
LOG_I
(
PHY
,
"[UE %d][RAPROC] Frame %d, nr_tti_rx %d: Generating PRACH (eNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB), l3msg
\n
"
,
ue
->
Mod_id
,
frame_tx
,
nr_tti_tx
,
eNB_id
,
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
,
ue
->
prach_resources
[
eNB_id
]
->
ra_PREAMBLE_RECEIVED_TARGET_POWER
+
get_nr_PL
(
ue
,
eNB_id
),
get_nr_PL
(
ue
,
eNB_id
));
}
// if we're calibrating the PRACH kill the pointer to its resources so that the RA protocol doesn't continue
if
(
mode
==
calib_prach_tx
)
ue
->
prach_resources
[
eNB_id
]
=
NULL
;
LOG_D
(
PHY
,
"[UE %d] frame %d nr_tti_rx %d : generate_nr_prach %d, prach_cnt %d
\n
"
,
ue
->
Mod_id
,
frame_tx
,
nr_tti_tx
,
ue
->
generate_nr_prach
,
ue
->
prach_cnt
);
ue
->
prach_cnt
++
;
if
(
ue
->
prach_cnt
==
3
)
ue
->
generate_nr_prach
=
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH
,
VCD_FUNCTION_OUT
);
}
//Yet to be done
/* void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type) {
NR_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
int32_t ulsch_start=0;
int nr_tti_tx = proc->nr_tti_tx;
int frame_tx = proc->frame_tx;
unsigned int aa;
uint8_t isSubframeSRS;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX,VCD_FUNCTION_IN);
LOG_D(PHY,"****** start TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, nr_tti_tx);
ue->generate_ul_signal[eNB_id] = 0;
#if UE_TIMING_TRACE
start_meas(&ue->phy_proc_tx);
#endif
ue->tx_power_dBm[nr_tti_tx]=-127;
printf("ue mode =%d\n",ue->UE_mode[eNB_id]);
if (abstraction_flag==0) {
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
memset(&ue->common_vars.txdataF[aa][nr_tti_tx*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti],0,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t));
}
}
if (abstraction_flag == 0) {
ulsch_common_procedures(ue,proc, (ue->generate_ul_signal[eNB_id] == 0));
}
ue->UE_mode[eNB_id]=1;
ue->frame_parms.prach_config_common.prach_Config_enabled=1;
printf("S: ue->UE_mode[eNB_id] == PRACH is %d and ue->frame_parms.prach_config_common.prach_Config_enabled is %d\n", ue->UE_mode[eNB_id],ue->frame_parms.prach_config_common.prach_Config_enabled);
if ((ue->UE_mode[eNB_id] == PRACH) &&
(ue->frame_parms.prach_config_common.prach_Config_enabled==1)) {
// check if we have PRACH opportunity
if (is_nr_prach_subframe(&ue->frame_parms,frame_tx,nr_tti_tx)) {
printf("the value of is_nr_prach subframe is %d\n",is_nr_prach_subframe(&ue->frame_parms,frame_tx,nr_tti_tx));
nr_ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode);
}
} // mode is PRACH
else {
ue->generate_prach=0;
}
LOG_D(PHY,"****** end TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, nr_tti_tx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
#if UE_TIMING_TRACE
stop_meas(&ue->phy_proc_tx);
#endif
} */
openair1/SIMULATION/NR_PHY/prachsim.c
View file @
dcf25f35
...
...
@@ -114,7 +114,7 @@ int main(int argc, char **argv)
int
N_RB_UL
=
273
;
uint32_t
prach_errors
=
0
;
uint8_t
subframe
=
9
;
uint16_t
preamble_energy_list
[
64
],
preamble_tx
=
99
,
preamble_delay_list
[
64
];
uint16_t
preamble_energy_list
[
64
],
preamble_tx
=
50
,
preamble_delay_list
[
64
];
uint16_t
preamble_max
,
preamble_energy_max
;
PRACH_RESOURCES_t
prach_resources
;
//uint8_t prach_fmt;
...
...
@@ -514,10 +514,14 @@ int main(int argc, char **argv)
UE
->
prach_resources
[
0
]
->
ra_PreambleIndex
=
preamble_tx
;
UE
->
prach_resources
[
0
]
->
ra_TDD_map_index
=
0
;
tx_lev
=
generate_nr_prach
(
UE
,
/*
tx_lev = generate_nr_prach(UE,
0, //gNB_id,
subframe,
0
);
//Nf
0); //Nf */
//commented for testing purpose
UE_nr_rxtx_proc_t
proc
=
{
0
};
nr_ue_prach_procedures
(
UE
,
&
proc
,
0
,
0
,
0
);
/* tx_lev_dB not used later, no need to set */
//tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
...
...
@@ -603,7 +607,7 @@ int main(int argc, char **argv)
if
(
preamble_rx
!=
preamble_tx
)
prach_errors
++
;
else
{
delay_avg
+=
(
double
)
preamble_delay_list
[
preamble_
ma
x
];
delay_avg
+=
(
double
)
preamble_delay_list
[
preamble_
t
x
];
}
if
(
n_frames
==
1
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment