fix for fr2 sl_ahead
This commit is contained in:
@@ -227,6 +227,7 @@ RUs = (
|
|||||||
att_tx = 0;
|
att_tx = 0;
|
||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
bands = [7];
|
bands = [7];
|
||||||
|
sl_ahead = 12;
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 75;
|
max_rxgain = 75;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ extern const char *prachfmt[];
|
|||||||
// - idft for short sequence assumes we are transmitting starting in symbol 0 of a PRACH slot
|
// - idft for short sequence assumes we are transmitting starting in symbol 0 of a PRACH slot
|
||||||
// - Assumes that PRACH SCS is same as PUSCH SCS @ 30 kHz, take values for formats 0-2 and adjust for others below
|
// - Assumes that PRACH SCS is same as PUSCH SCS @ 30 kHz, take values for formats 0-2 and adjust for others below
|
||||||
// - Preamble index different from 0 is not detected by gNB
|
// - Preamble index different from 0 is not detected by gNB
|
||||||
int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
|
int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t slot){
|
||||||
|
|
||||||
NR_DL_FRAME_PARMS *fp=&ue->frame_parms;
|
NR_DL_FRAME_PARMS *fp=&ue->frame_parms;
|
||||||
fapi_nr_config_request_t *nrUE_config = &ue->nrUE_config;
|
fapi_nr_config_request_t *nrUE_config = &ue->nrUE_config;
|
||||||
@@ -190,8 +190,9 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
|
|||||||
// now generate PRACH signal
|
// now generate PRACH signal
|
||||||
#ifdef NR_PRACH_DEBUG
|
#ifdef NR_PRACH_DEBUG
|
||||||
if (NCS>0)
|
if (NCS>0)
|
||||||
LOG_I(PHY, "PRACH [UE %d] generate PRACH in slot %d for RootSeqIndex %d, Preamble Index %d, PRACH Format %s, NCS %d (N_ZC %d): Preamble_offset %d, Preamble_shift %d msg1 frequency start %d\n",
|
LOG_I(PHY, "PRACH [UE %d] generate PRACH in frame.slot %d.%d for RootSeqIndex %d, Preamble Index %d, PRACH Format %s, NCS %d (N_ZC %d): Preamble_offset %d, Preamble_shift %d msg1 frequency start %d\n",
|
||||||
Mod_id,
|
Mod_id,
|
||||||
|
frame,
|
||||||
slot,
|
slot,
|
||||||
rootSequenceIndex,
|
rootSequenceIndex,
|
||||||
preamble_index,
|
preamble_index,
|
||||||
@@ -221,7 +222,9 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
|
|||||||
k += kbar;
|
k += kbar;
|
||||||
k *= 2;
|
k *= 2;
|
||||||
|
|
||||||
LOG_I(PHY, "PRACH [UE %d] in slot %d, placing PRACH in position %d, msg1 frequency start %d (k1 %d), preamble_offset %d, first_nonzero_root_idx %d\n", Mod_id,
|
LOG_I(PHY, "PRACH [UE %d] in frame.slot %d.%d, placing PRACH in position %d, msg1 frequency start %d (k1 %d), preamble_offset %d, first_nonzero_root_idx %d\n",
|
||||||
|
Mod_id,
|
||||||
|
frame,
|
||||||
slot,
|
slot,
|
||||||
k,
|
k,
|
||||||
n_ra_prb,
|
n_ra_prb,
|
||||||
|
|||||||
@@ -1704,7 +1704,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
unsigned char i_mod,
|
unsigned char i_mod,
|
||||||
unsigned char harq_pid);
|
unsigned char harq_pid);
|
||||||
|
|
||||||
int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t subframe);
|
int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t slot);
|
||||||
|
|
||||||
void dump_nrdlsch(PHY_VARS_NR_UE *ue,uint8_t gNB_id,uint8_t nr_slot_rx,unsigned int *coded_bits_per_codeword,int round, unsigned char harq_pid);
|
void dump_nrdlsch(PHY_VARS_NR_UE *ue,uint8_t gNB_id,uint8_t nr_slot_rx,unsigned int *coded_bits_per_codeword,int round, unsigned char harq_pid);
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|||||||
@@ -1801,7 +1801,7 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
|
|||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_IN);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
prach_power = generate_nr_prach(ue, gNB_id, nr_slot_tx);
|
prach_power = generate_nr_prach(ue, gNB_id, frame_tx, nr_slot_tx);
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
|
|||||||
@@ -466,12 +466,12 @@ void nr_schedule_msg2(uint16_t rach_frame, uint16_t rach_slot,
|
|||||||
uint8_t start_next_period = (rach_slot-(rach_slot%tdd_period_slot)+tdd_period_slot)%nr_slots_per_frame[mu];
|
uint8_t start_next_period = (rach_slot-(rach_slot%tdd_period_slot)+tdd_period_slot)%nr_slots_per_frame[mu];
|
||||||
*msg2_slot = start_next_period + last_dl_slot_period; // initializing scheduling of slot to next mixed (or last dl) slot
|
*msg2_slot = start_next_period + last_dl_slot_period; // initializing scheduling of slot to next mixed (or last dl) slot
|
||||||
*msg2_frame = ((*msg2_slot>(rach_slot))? rach_frame : (rach_frame+1))%1024;
|
*msg2_frame = ((*msg2_slot>(rach_slot))? rach_frame : (rach_frame+1))%1024;
|
||||||
|
|
||||||
// we can't schedule msg2 before sl_ahead since prach
|
// we can't schedule msg2 before sl_ahead since prach
|
||||||
int eff_slot = *msg2_slot+(*msg2_frame-rach_frame)*nr_slots_per_frame[mu];
|
int eff_slot = *msg2_slot+(*msg2_frame-rach_frame)*nr_slots_per_frame[mu];
|
||||||
if ((eff_slot-rach_slot)<=sl_ahead) {
|
while ((eff_slot-rach_slot)<=sl_ahead) {
|
||||||
*msg2_slot = (*msg2_slot+tdd_period_slot)%nr_slots_per_frame[mu];
|
*msg2_slot = (*msg2_slot+tdd_period_slot)%nr_slots_per_frame[mu];
|
||||||
*msg2_frame = ((*msg2_slot>(rach_slot))? rach_frame : (rach_frame+1))%1024;
|
*msg2_frame = ((*msg2_slot>(rach_slot))? rach_frame : (rach_frame+1))%1024;
|
||||||
|
eff_slot = *msg2_slot+(*msg2_frame-rach_frame)*nr_slots_per_frame[mu];
|
||||||
}
|
}
|
||||||
if (FR==nr_FR2) {
|
if (FR==nr_FR2) {
|
||||||
int num_tdd_period = *msg2_slot/tdd_period_slot;
|
int num_tdd_period = *msg2_slot/tdd_period_slot;
|
||||||
|
|||||||
Reference in New Issue
Block a user