Delay compensation for PUCCH2
This commit is contained in:
@@ -25,6 +25,8 @@
|
||||
#define USE_128BIT
|
||||
#endif
|
||||
|
||||
#define PEAK_DETECT_THRESHOLD 15
|
||||
|
||||
int16_t saturating_sub(int16_t a, int16_t b)
|
||||
{
|
||||
int32_t result = (int32_t)a - (int32_t)b;
|
||||
@@ -367,20 +369,28 @@ void nr_est_delay(int ofdm_symbol_size, const c16_t *ls_est, c16_t *ch_estimates
|
||||
int max_val = delay->delay_max_val;
|
||||
const int sync_pos = 0;
|
||||
|
||||
uint64_t mean_val = 0;
|
||||
for (int i = 0; i < ofdm_symbol_size; i++) {
|
||||
int temp = c16amp2(ch_estimates_time[i]) >> 1;
|
||||
mean_val += temp;
|
||||
if (temp > max_val) {
|
||||
max_pos = i;
|
||||
max_val = temp;
|
||||
}
|
||||
}
|
||||
mean_val /= ofdm_symbol_size;
|
||||
|
||||
if (max_pos > ofdm_symbol_size / 2)
|
||||
max_pos = max_pos - ofdm_symbol_size;
|
||||
|
||||
delay->delay_max_pos = max_pos;
|
||||
delay->delay_max_val = max_val;
|
||||
delay->est_delay = max_pos - sync_pos;
|
||||
|
||||
// The peak in general is quite clear. It only gives a small peak when the noise is high, generally obtaining an incorrect
|
||||
// estimated delay, and causing the delay compensation to worsen the result instead of improving it. After analyzing several
|
||||
// peaks, and doing many tests, a PEAK_DETECT_THRESHOLD = 15 is an adequate value, to apply delay compensation only when there is
|
||||
// clearly a peak
|
||||
delay->est_delay = mean_val > 0 && max_val / mean_val > PEAK_DETECT_THRESHOLD ? max_pos - sync_pos : 0;
|
||||
}
|
||||
|
||||
unsigned int nr_get_tx_amp(int power_dBm, int power_max_dBm, int total_nb_rb, int nb_rb)
|
||||
|
||||
Reference in New Issue
Block a user