From c080cb33950fb230aebad6ed15433ba97e695714 Mon Sep 17 00:00:00 2001 From: Xavier Arteaga Date: Tue, 28 Jan 2020 09:59:48 +0100 Subject: [PATCH] SRSUE: expose correct synch error parameter --- lib/include/srslte/interfaces/ue_interfaces.h | 1 + srsue/src/main.cc | 5 +++++ srsue/src/phy/phy_common.cc | 2 +- srsue/ue.conf.example | 3 +++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/include/srslte/interfaces/ue_interfaces.h b/lib/include/srslte/interfaces/ue_interfaces.h index 64bdcb510..d3d7f9638 100644 --- a/lib/include/srslte/interfaces/ue_interfaces.h +++ b/lib/include/srslte/interfaces/ue_interfaces.h @@ -495,6 +495,7 @@ typedef struct { float snr_ema_coeff = 0.1f; std::string snr_estim_alg = "refs"; bool agc_enable = true; + bool correct_sync_error = false; bool cfo_is_doppler = false; bool cfo_integer_enabled = false; float cfo_correct_tol_hz = 1.0f; diff --git a/srsue/src/main.cc b/srsue/src/main.cc index 0bf9fe4d8..6cee809ab 100644 --- a/srsue/src/main.cc +++ b/srsue/src/main.cc @@ -255,6 +255,11 @@ static int parse_args(all_args_t* args, int argc, char* argv[]) bpo::value(&args->phy.intra_freq_meas_period_ms)->default_value(200), "Period of intra-frequency neighbour cell measurement in ms. Maximum as per 3GPP is 200 ms.") + ("phy.correct_sync_error", + bpo::value(&args->phy.correct_sync_error)->default_value(false), + "Channel estimator measures and pre-compensates time synchronization error. Increases CPU usage, improves PDSCH " + "decoding in high SFO and high speed UE scenarios.") + ("phy.cfo_is_doppler", bpo::value(&args->phy.cfo_is_doppler)->default_value(false), "Assume detected CFO is doppler and correct the UL in the same direction. If disabled, the CFO is assumed" diff --git a/srsue/src/phy/phy_common.cc b/srsue/src/phy/phy_common.cc index 2ff07de5c..7f2e47707 100644 --- a/srsue/src/phy/phy_common.cc +++ b/srsue/src/phy/phy_common.cc @@ -104,7 +104,7 @@ void phy_common::set_ue_dl_cfg(srslte_ue_dl_cfg_t* ue_dl_cfg) } chest_cfg->rsrp_neighbour = false; - chest_cfg->sync_error_enable = false; + chest_cfg->sync_error_enable = args->correct_sync_error; chest_cfg->interpolate_subframe = args->interpolate_subframe_enabled; chest_cfg->cfo_estimate_enable = args->cfo_ref_mask != 0; chest_cfg->cfo_estimate_sf_mask = args->cfo_ref_mask; diff --git a/srsue/ue.conf.example b/srsue/ue.conf.example index c000a2f68..a4ffbdec6 100644 --- a/srsue/ue.conf.example +++ b/srsue/ue.conf.example @@ -281,6 +281,8 @@ enable = false # equalizer_mode: Selects equalizer mode. Valid modes are: "mmse", "zf" or any # non-negative real number to indicate a regularized zf coefficient. # Default is MMSE. +# correct_sync_error: Channel estimator measures and pre-compensates time synchronization error. Increases CPU usage, +# improves PDSCH decoding in high SFO and high speed UE scenarios. # sfo_ema: EMA coefficient to average sample offsets used to compute SFO # sfo_correct_period: Period in ms to correct sample time to adjust for SFO # sss_algorithm: Selects the SSS estimation algorithm. Can choose between @@ -322,6 +324,7 @@ enable = false #pdsch_max_its = 8 # These are half iterations #nof_phy_threads = 3 #equalizer_mode = mmse +#correct_sync_error = false #sfo_ema = 0.1 #sfo_correct_period = 10 #sss_algorithm = full