diff --git a/lib/src/phy/sync/sync.c b/lib/src/phy/sync/sync.c index 13a5f7e69..8b7bbd69c 100644 --- a/lib/src/phy/sync/sync.c +++ b/lib/src/phy/sync/sync.c @@ -42,6 +42,8 @@ #define DEFAULT_CFO_TOL 0.0 // Hz +#define MAX_CFO_PSS_OFFSET 7000 + static bool fft_size_isvalid(uint32_t fft_size) { if (fft_size >= SRSLTE_SYNC_FFT_SZ_MIN && fft_size <= SRSLTE_SYNC_FFT_SZ_MAX && (fft_size%64) == 0) { return true; @@ -614,7 +616,7 @@ srslte_sync_find_ret_t srslte_sync_find(srslte_sync_t *q, const cf_t *input, uin if (!q->cfo_pss_is_set) { q->cfo_pss_mean = cfo_pss; q->cfo_pss_is_set = true; - } else { + } else if (15000*fabsf(cfo_pss) < MAX_CFO_PSS_OFFSET) { q->cfo_pss_mean = SRSLTE_VEC_EMA(cfo_pss, q->cfo_pss_mean, q->cfo_ema_alpha); } diff --git a/srsue/src/main.cc b/srsue/src/main.cc index 09a382246..6df1cac99 100644 --- a/srsue/src/main.cc +++ b/srsue/src/main.cc @@ -205,7 +205,7 @@ void parse_args(all_args_t *args, int argc, char *argv[]) { "Tolerance (in Hz) for digital CFO compensation (needs to be low if average_subframe_enabled=true.") ("expert.cfo_pss_ema", - bpo::value(&args->expert.phy.cfo_pss_ema)->default_value(0.1), + bpo::value(&args->expert.phy.cfo_pss_ema)->default_value(0.01), "CFO Exponential Moving Average coefficient for PSS estimation during TRACK.") ("expert.cfo_ref_ema",