NR_UE: fix bug in timing adjustment
This commit is contained in:
@@ -464,12 +464,14 @@ int computeSamplesShift(PHY_VARS_NR_UE *UE) {
|
|||||||
if ( UE->rx_offset < UE->frame_parms.samples_per_frame/2 &&
|
if ( UE->rx_offset < UE->frame_parms.samples_per_frame/2 &&
|
||||||
UE->rx_offset > 0 ) {
|
UE->rx_offset > 0 ) {
|
||||||
//LOG_I(PHY,"!!!adjusting -1 samples!!!\n");
|
//LOG_I(PHY,"!!!adjusting -1 samples!!!\n");
|
||||||
|
UE->rx_offset = 0; // reset so that it is not applied falsely in case of SSB being only in every second frame
|
||||||
return -1 ;
|
return -1 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( UE->rx_offset > UE->frame_parms.samples_per_frame/2 &&
|
if ( UE->rx_offset > UE->frame_parms.samples_per_frame/2 &&
|
||||||
UE->rx_offset < UE->frame_parms.samples_per_frame ) {
|
UE->rx_offset < UE->frame_parms.samples_per_frame ) {
|
||||||
//LOG_I(PHY,"!!!adjusting +1 samples!!!\n");
|
//LOG_I(PHY,"!!!adjusting +1 samples!!!\n");
|
||||||
|
UE->rx_offset = 0; // reset so that it is not applied falsely in case of SSB being only in every second frame
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,13 +55,14 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
|
|||||||
|
|
||||||
LOG_D(PHY,"AbsSubframe %d: rx_offset (before) = %d\n",subframe,ue->rx_offset);
|
LOG_D(PHY,"AbsSubframe %d: rx_offset (before) = %d\n",subframe,ue->rx_offset);
|
||||||
|
|
||||||
// we only use channel estimates from tx antenna 0 here
|
// search for maximum position within the cyclic prefix
|
||||||
for (int i = 0; i < frame_parms->nb_prefix_samples; i++) {
|
for (int i = -frame_parms->nb_prefix_samples/2; i < frame_parms->nb_prefix_samples/2; i++) {
|
||||||
int temp = 0;
|
int temp = 0;
|
||||||
|
|
||||||
|
int j = (i < 0) ? (i + frame_parms->ofdm_symbol_size) : i;
|
||||||
for (int aa = 0; aa < frame_parms->nb_antennas_rx; aa++) {
|
for (int aa = 0; aa < frame_parms->nb_antennas_rx; aa++) {
|
||||||
int Re = ((int16_t*)ue->pbch_vars[gNB_id]->dl_ch_estimates_time[aa])[(i<<1)];
|
int Re = ((int16_t*)ue->pbch_vars[gNB_id]->dl_ch_estimates_time[aa])[(j<<1)];
|
||||||
int Im = ((int16_t*)ue->pbch_vars[gNB_id]->dl_ch_estimates_time[aa])[1+(i<<1)];
|
int Im = ((int16_t*)ue->pbch_vars[gNB_id]->dl_ch_estimates_time[aa])[1+(j<<1)];
|
||||||
temp += (Re*Re/2) + (Im*Im/2);
|
temp += (Re*Re/2) + (Im*Im/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,9 +72,6 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_pos > frame_parms->ofdm_symbol_size/2)
|
|
||||||
max_pos = max_pos - frame_parms->ofdm_symbol_size;
|
|
||||||
|
|
||||||
// filter position to reduce jitter
|
// filter position to reduce jitter
|
||||||
if (clear == 1)
|
if (clear == 1)
|
||||||
max_pos_fil = max_pos;
|
max_pos_fil = max_pos;
|
||||||
|
|||||||
Reference in New Issue
Block a user