1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2025-12-14 20:38:07 +00:00

feat: add log PVT(VTL)- TRK timing offset

This commit is contained in:
pedromiguelcp
2025-08-06 10:30:37 +01:00
committed by Carles Fernandez
parent 629656c9d3
commit 00b9632873
9 changed files with 45 additions and 17 deletions

View File

@@ -1667,7 +1667,7 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
vtl_data->CN0_dB_hz(ch_id) = gnss_observables_iter->second.CN0_dB_hz;
// observations
vtl_data->ch_sample_counter(ch_id) = gnss_observables_iter->second.Tracking_sample_counter;
vtl_data->PVT_sample_counter(ch_id) = gnss_observables_iter->second.Tracking_sample_counter;
// pseudorange
vtl_data->obs_pr(ch_id) = gnss_observables_iter->second.Pseudorange_m;

8
src/algorithms/PVT/libs/vtl_core.cc Executable file → Normal file
View File

@@ -443,13 +443,13 @@ void Vtl_Core::send_vtl_feedback(const Vtl_Data &rtk_data)
// channel info
trk_cmd.channel_id = aidx(i);
trk_cmd.prn_id = rtk_data.sv_id(aidx(i));
trk_cmd.ch_sample_counter = rtk_data.ch_sample_counter(aidx(i));
trk_cmd.PVT_sample_counter = rtk_data.PVT_sample_counter(aidx(i));
// PLL
trk_cmd.enable_pll_vtl_feedack = rtk_data.enable_VPLL(aidx(i));
trk_cmd.pll_vtl_freq_hz = -ekf_updt_comp_Z(aidx(i) + N_ch) / carrier_lambda; // pseudorange rate
trk_cmd.carrier_freq_rate_hz_s = 0; // pseudorange acceleration
// DLL
trk_cmd.enable_dll_vtl_feedack = rtk_data.enable_VDLL(aidx(i)); // VDLL
trk_cmd.enable_dll_vtl_feedack = rtk_data.enable_VDLL(aidx(i)); // VDLL
trk_cmd.dll_vtl_freq_hz = code_freq - ekf_updt_comp_Z(aidx(i) + N_ch) * range_factor; // pseudorange rate
trk_cmd_outs.push_back(trk_cmd);
@@ -460,7 +460,7 @@ void Vtl_Core::send_vtl_feedback(const Vtl_Data &rtk_data)
{
// channel info
trk_cmd.channel_id = rtk_data.rx_ch2(aidx(i));
trk_cmd.ch_sample_counter = rtk_data.ch2_sample_counter(aidx(i));
trk_cmd.PVT_sample_counter = rtk_data.ch2_sample_counter(aidx(i));
// PLL
trk_cmd.pll_vtl_freq_hz = -ekf_updt_comp_Z(aidx(i) + N_ch) / Lambda_GPS_L5; // pseudorange rate
trk_cmd.carrier_freq_rate_hz_s = 0; // pseudorange acceleration
@@ -478,7 +478,7 @@ void Vtl_Core::send_vtl_feedback(const Vtl_Data &rtk_data)
// channel info
trk_cmd.channel_id = oldidx(i);
trk_cmd.prn_id = rtk_data.sv_id(oldidx(i));
trk_cmd.ch_sample_counter = 0;
trk_cmd.PVT_sample_counter = 0;
// PLL
trk_cmd.enable_pll_vtl_feedack = false;
trk_cmd.pll_vtl_freq_hz = 0;

View File

@@ -40,7 +40,7 @@ void Vtl_Data::init_storage(int N_sv)
band = arma::vec(N_sv);
code_freq = arma::vec(N_sv);
CN0_dB_hz = arma::vec(N_sv);
ch_sample_counter = arma::vec(N_sv);
PVT_sample_counter = arma::vec(N_sv);
ch2_sample_counter = arma::vec(N_sv);
ionoopt = 0;

View File

@@ -59,7 +59,7 @@ public:
arma::colvec band; // frequency band
arma::colvec code_freq;
arma::colvec CN0_dB_hz;
arma::colvec ch_sample_counter;
arma::colvec PVT_sample_counter;
arma::colvec ch2_sample_counter;
int ionoopt; // ionosphere option

View File

@@ -33,7 +33,7 @@ public:
bool enable_smooth_pr = false;
double pll_vtl_freq_hz = 0.0;
double dll_vtl_freq_hz = 0.0;
double ch_sample_counter = 0.0;
double PVT_sample_counter = 0.0;
double carrier_freq_rate_hz_s = 0.0;
uint32_t channel_id = 0;
uint32_t prn_id = 0;

View File

@@ -625,6 +625,7 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_)
d_VTL_dll_en = false;
d_prn_id = 0;
d_W_shift_vtl = 0;
d_PVT_sample_counter = 0;
}
@@ -675,7 +676,7 @@ void dll_pll_veml_tracking::msg_handler_pvt_to_trk(const pmt::pmt_t &msg)
{
gr::thread::scoped_lock lock(d_setlock);
d_prn_id = cmd->prn_id;
d_sample_counter_VTL = cmd->ch_sample_counter;
d_PVT_sample_counter = cmd->PVT_sample_counter;
// PLL
d_carr_freq_hz_VTL = cmd->pll_vtl_freq_hz;
@@ -1196,8 +1197,8 @@ void dll_pll_veml_tracking::run_dll_pll()
// VPLL
if (d_VTL_pll_en)
{
double delta_t_s = static_cast<double>(this->nitems_read(0) - d_sample_counter_VTL) / d_trk_parameters.fs_in;
d_carrier_doppler_hz = d_W_vtl * (d_carr_freq_hz_VTL + delta_t_s * d_carr_freq_hz_s_VTL) + (1 - d_W_vtl) * d_carrier_doppler_hz;
double pvt_trk_diff_time_s = static_cast<double>(this->nitems_read(0) - d_PVT_sample_counter) / d_trk_parameters.fs_in; // time propagation of VTL feedback
d_carrier_doppler_hz = d_W_vtl * (d_carr_freq_hz_VTL + pvt_trk_diff_time_s * d_carr_freq_hz_s_VTL) + (1 - d_W_vtl) * d_carrier_doppler_hz;
}
// std::cout << "d_carrier_doppler_hz: " << d_carrier_doppler_hz << '\n';
@@ -1225,13 +1226,13 @@ void dll_pll_veml_tracking::run_dll_pll()
// VDLL
if (d_VTL_dll_en)
{
double delta_t_s = static_cast<double>(this->nitems_read(0) - d_sample_counter_VTL) / d_trk_parameters.fs_in;
d_code_freq_chips = d_W_vtl * (d_code_freq_hz_VTL + delta_t_s * d_code_freq_hz_s_VTL) + (1 - d_W_vtl) * d_code_freq_chips;
double pvt_trk_diff_time_s = static_cast<double>(this->nitems_read(0) - d_PVT_sample_counter) / d_trk_parameters.fs_in;
d_code_freq_chips = d_W_vtl * (d_code_freq_hz_VTL + pvt_trk_diff_time_s * d_code_freq_hz_s_VTL) + (1 - d_W_vtl) * d_code_freq_chips;
}
if (d_W_vtl > 0)
{
d_W_vtl -= d_W_shift_vtl;
d_W_vtl -= d_W_shift_vtl; // shift weight from VTL feedback to tracking loops
}
// Experimental: detect Carrier Doppler vs. Code Doppler incoherence and correct the Carrier Doppler
@@ -1569,6 +1570,9 @@ void dll_pll_veml_tracking::log_data()
d_dump_file.write(reinterpret_cast<char *>(&tmp_float), sizeof(float));
tmp_double = static_cast<double>(this->nitems_read(0) + d_current_prn_length_samples);
d_dump_file.write(reinterpret_cast<char *>(&tmp_double), sizeof(double));
// PVT TRK sample diff
tmp_double = static_cast<double>(this->nitems_read(0) - d_PVT_sample_counter);
d_dump_file.write(reinterpret_cast<char *>(&tmp_double), sizeof(double));
// PRN
uint32_t prn_ = d_acquisition_gnss_synchro->PRN;
d_dump_file.write(reinterpret_cast<char *>(&prn_), sizeof(uint32_t));

View File

@@ -131,7 +131,7 @@ private:
double d_carr_freq_hz_s_VTL;
double d_code_freq_hz_VTL;
double d_code_freq_hz_s_VTL;
double d_sample_counter_VTL;
double d_PVT_sample_counter;
double d_W_vtl;
double d_carrier_doppler_hz;
double d_acc_carrier_phase_rad;