From 74d60287697a5e77c8e32411b089efb6832078ca Mon Sep 17 00:00:00 2001 From: Ismael Gomez Date: Tue, 24 Apr 2018 13:50:59 +0200 Subject: [PATCH] Delay application of time_adv by 1 subframe --- srsue/hdr/phy/phch_recv.h | 2 +- srsue/src/phy/phch_recv.cc | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/srsue/hdr/phy/phch_recv.h b/srsue/hdr/phy/phch_recv.h index faff85ca7..78559d3cd 100644 --- a/srsue/hdr/phy/phch_recv.h +++ b/srsue/hdr/phy/phch_recv.h @@ -425,7 +425,7 @@ private: // This is the primary cell srslte_cell_t cell; bool started; - float time_adv_sec; + float time_adv_sec, next_time_adv_sec; uint32_t tti; bool do_agc; diff --git a/srsue/src/phy/phch_recv.cc b/srsue/src/phy/phch_recv.cc index 687e66fea..9d6e39f4f 100644 --- a/srsue/src/phy/phch_recv.cc +++ b/srsue/src/phy/phch_recv.cc @@ -453,6 +453,9 @@ void phch_recv::run_thread() worker->set_tti(tti, tx_mutex_cnt); worker->set_tx_time(tx_time, next_offset); next_offset = 0; + if (next_time_adv_sec != time_adv_sec) { + time_adv_sec = next_time_adv_sec; + } tx_mutex_cnt = (tx_mutex_cnt+1) % nof_tx_mutex; // Advance/reset prach subframe pointer @@ -614,8 +617,11 @@ void phch_recv::set_agc_enable(bool enable) void phch_recv::set_time_adv_sec(float time_adv_sec) { - this->time_adv_sec = time_adv_sec; - next_offset = -time_adv_sec*srslte_sampling_freq_hz(cell.nof_prb); + // If transmitting earlier, transmit less samples to align time advance. If transmit later just delay next TX + if (time_adv_sec > this->time_adv_sec) { + next_offset = -floor(time_adv_sec*srslte_sampling_freq_hz(cell.nof_prb)+1); + } + this->next_time_adv_sec = time_adv_sec; Info("Applying time_adv_sec=%.1f us, next_offset=%d\n", time_adv_sec*1e6, next_offset); }