Merge remote-tracking branch 'origin/NR_FR2_RRC_SSB' into rh_wk50_debug
Conflicts: openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
This commit is contained in:
@@ -41,38 +41,32 @@ int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp)
|
||||
int case_E[8] = {8, 12, 16, 20, 32, 36, 40, 44};
|
||||
|
||||
switch(mu) {
|
||||
|
||||
case NR_MU_0: // case A
|
||||
n = i_ssb >> 1;
|
||||
symbol = case_AC[i_ssb % 2] + 14*n;
|
||||
break;
|
||||
|
||||
case NR_MU_1:
|
||||
if (type == 1){ // case B
|
||||
n = i_ssb >> 2;
|
||||
symbol = case_BD[i_ssb % 4] + 28*n;
|
||||
}
|
||||
if (type == 2){ // case C
|
||||
n = i_ssb >> 1;
|
||||
symbol = case_AC[i_ssb % 2] + 14*n;
|
||||
}
|
||||
break;
|
||||
|
||||
case NR_MU_3: // case D
|
||||
n_temp = i_ssb >> 2;
|
||||
n = n_temp + (n_temp >> 2);
|
||||
symbol = case_BD[i_ssb % 4] + 28*n;
|
||||
break;
|
||||
|
||||
case NR_MU_4: // case E
|
||||
n_temp = i_ssb >> 3;
|
||||
n = n_temp + (n_temp >> 2);
|
||||
symbol = case_E[i_ssb % 8] + 56*n;
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
AssertFatal(0==1, "Invalid numerology index %d for the synchronization block\n", mu);
|
||||
case NR_MU_0: // case A
|
||||
n = i_ssb >> 1;
|
||||
symbol = case_AC[i_ssb % 2] + 14*n;
|
||||
break;
|
||||
case NR_MU_1:
|
||||
if (type == 1){ // case B
|
||||
n = i_ssb >> 2;
|
||||
symbol = case_BD[i_ssb % 4] + 28*n;
|
||||
}
|
||||
if (type == 2){ // case C
|
||||
n = i_ssb >> 1;
|
||||
symbol = case_AC[i_ssb % 2] + 14*n;
|
||||
}
|
||||
break;
|
||||
case NR_MU_3: // case D
|
||||
n_temp = i_ssb >> 2;
|
||||
n = n_temp + (n_temp >> 2);
|
||||
symbol = case_BD[i_ssb % 4] + 28*n;
|
||||
break;
|
||||
case NR_MU_4: // case E
|
||||
n_temp = i_ssb >> 3;
|
||||
n = n_temp + (n_temp >> 2);
|
||||
symbol = case_E[i_ssb % 8] + 56*n;
|
||||
break;
|
||||
default:
|
||||
AssertFatal(0==1, "Invalid numerology index %d for the synchronization block\n", mu);
|
||||
}
|
||||
|
||||
if (half_frame_index)
|
||||
|
||||
@@ -33,12 +33,12 @@
|
||||
// last channel estimate of the receiver
|
||||
|
||||
void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
|
||||
PHY_VARS_NR_UE *ue,
|
||||
module_id_t gNB_id,
|
||||
uint8_t frame,
|
||||
uint8_t subframe,
|
||||
unsigned char clear,
|
||||
short coef)
|
||||
PHY_VARS_NR_UE *ue,
|
||||
module_id_t gNB_id,
|
||||
uint8_t frame,
|
||||
uint8_t subframe,
|
||||
unsigned char clear,
|
||||
short coef)
|
||||
{
|
||||
|
||||
static int max_pos_fil = 0;
|
||||
@@ -47,6 +47,7 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
|
||||
int temp = 0, i, aa, max_val = 0, max_pos = 0;
|
||||
int diff;
|
||||
short Re,Im,ncoef;
|
||||
uint8_t sync_offset = 0;
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ADJUST_SYNCH, VCD_FUNCTION_IN);
|
||||
|
||||
@@ -80,11 +81,14 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
|
||||
// do not filter to have proactive timing adjustment
|
||||
//max_pos_fil = max_pos;
|
||||
|
||||
if(subframe == 0)
|
||||
{
|
||||
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
||||
|
||||
if ( abs(diff) < SYNCH_HYST )
|
||||
if (frame_parms->freq_range==nr_FR2)
|
||||
sync_offset = 2;
|
||||
else
|
||||
sync_offset = 0;
|
||||
|
||||
if ( abs(diff) < (SYNCH_HYST+sync_offset) )
|
||||
ue->rx_offset = 0;
|
||||
else
|
||||
ue->rx_offset = diff;
|
||||
@@ -134,5 +138,5 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
|
||||
#endif //DEBUG_PHY
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ADJUST_SYNCH, VCD_FUNCTION_OUT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -243,7 +243,7 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
|
||||
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
||||
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
||||
|
||||
symbol_offset = ue->frame_parms.ofdm_symbol_size*(ue->symbol_offset+1);
|
||||
symbol_offset = ue->frame_parms.ofdm_symbol_size*((ue->symbol_offset+1)%(ue->frame_parms.symbols_per_slot));
|
||||
|
||||
ue->measurements.rsrp[eNB_offset] = 0;
|
||||
|
||||
|
||||
@@ -373,7 +373,10 @@ void nr_pdcch_extract_rbs_single(int32_t **rxdataF,
|
||||
for (int rb=0;rb<coreset_nbr_rb;rb++,c_rb++) {
|
||||
c_rb_by6 = c_rb/6;
|
||||
// skip zeros in frequency domain bitmap
|
||||
while ((coreset_freq_dom[c_rb_by6>>3] & (1<<(c_rb_by6&7))) == 0) c_rb+=6;
|
||||
while ((coreset_freq_dom[c_rb_by6>>3] & (1<<(7-(c_rb_by6&7)))) == 0) {
|
||||
c_rb+=6;
|
||||
c_rb_by6 = c_rb/6;
|
||||
}
|
||||
|
||||
LOG_DDD("c_rb=%d\n",c_rb);
|
||||
rxF=NULL;
|
||||
|
||||
@@ -304,8 +304,11 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, runmode_t mode,
|
||||
if (ret == 0) {
|
||||
// sync at symbol ue->symbol_offset
|
||||
// computing the offset wrt the beginning of the frame
|
||||
sync_pos_frame = (fp->ofdm_symbol_size + fp->nb_prefix_samples0)+((ue->symbol_offset)-1)*(fp->ofdm_symbol_size + fp->nb_prefix_samples);
|
||||
|
||||
int mu = fp->numerology_index;
|
||||
// number of symbols with different prefix length
|
||||
// every 7*(1<<mu) symbols there is a different prefix length (38.211 5.3.1)
|
||||
int n_symb_prefix0 = (ue->symbol_offset/(7*(1<<mu)))+1;
|
||||
sync_pos_frame = n_symb_prefix0*(fp->ofdm_symbol_size + fp->nb_prefix_samples0)+(ue->symbol_offset-n_symb_prefix0)*(fp->ofdm_symbol_size + fp->nb_prefix_samples);
|
||||
if (ue->ssb_offset < sync_pos_frame)
|
||||
ue->rx_offset = fp->samples_per_frame - sync_pos_frame + ue->ssb_offset;
|
||||
else
|
||||
|
||||
@@ -62,7 +62,7 @@ uint16_t nr_pbch_extract(int **rxdataF,
|
||||
unsigned int rx_offset = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier; //and
|
||||
|
||||
// if (rx_offset>= frame_parms->ofdm_symbol_size) rx_offset-=frame_parms->ofdm_symbol_size;
|
||||
rx_offset=(rx_offset)%(frame_parms->ofdm_symbol_size);
|
||||
rx_offset=(rx_offset)%(frame_parms->ofdm_symbol_size);
|
||||
|
||||
AssertFatal(symbol>=1 && symbol<5,
|
||||
"symbol %d illegal for PBCH extraction\n",
|
||||
@@ -538,6 +538,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
|
||||
M = NR_POLAR_PBCH_E;
|
||||
nushift = (Lmax==4)? i_ssb&3 : i_ssb&7;
|
||||
uint32_t unscrambling_mask = (Lmax==64)?0x100006D:0x1000041;
|
||||
|
||||
nr_pbch_unscrambling(nr_ue_pbch_vars,frame_parms->Nid_cell,nushift,M,NR_POLAR_PBCH_E,0,0);
|
||||
//polar decoding de-rate matching
|
||||
const t_nrPolar_params *currentPtr = nr_polar_params( NR_POLAR_PBCH_MESSAGE_TYPE, NR_POLAR_PBCH_PAYLOAD_BITS, NR_POLAR_PBCH_AGGREGATION_LEVEL,1,&ue->polarList);
|
||||
|
||||
@@ -228,7 +228,7 @@ typedef struct {
|
||||
/// Pointer to Msg3 payload for UL-grant
|
||||
uint8_t *Msg3;
|
||||
/// Frame of last completed synch
|
||||
uint8_t sync_frame;
|
||||
uint16_t sync_frame;
|
||||
/// Flag to indicate that prach is ready to start: it is enabled with an initial delay after the sync
|
||||
uint8_t init_msg1;
|
||||
} NR_PRACH_RESOURCES_t;
|
||||
|
||||
Reference in New Issue
Block a user