1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-12-14 12:10:34 +00:00

Bug fixes for duplicated observable time

This commit is contained in:
Javier Arribas 2017-04-27 15:28:30 +02:00
parent ddcf1b1dee
commit e26ddf07bc
9 changed files with 29 additions and 19 deletions

View File

@ -188,6 +188,7 @@ int hybrid_observables_cc::general_work (int noutput_items,
gnss_synchro_map.end(),
Hybrid_pairCompare_gnss_synchro_sample_counter);
T_rx_s = (double)gnss_synchro_map_iter->second.Tracking_sample_counter/(double)gnss_synchro_map_iter->second.fs;
T_rx_s = floor(T_rx_s*1000.0)/1000.0;// truncate to ms
T_rx_s +=past_history_s; //increase T_rx to have a minimum past history to interpolate
}
@ -216,25 +217,25 @@ int hybrid_observables_cc::general_work (int noutput_items,
int distance=std::distance(d_gnss_synchro_history_queue[i].begin(), gnss_synchro_deque_iter);
if (distance>0)
{
double T_rx_channel_prev=(double)d_gnss_synchro_history_queue[i].at(distance-1).Tracking_sample_counter/(double)gnss_synchro_deque_iter->fs;
double delta_T_rx_s_prev=T_rx_channel_prev-T_rx_s;
if (fabs(delta_T_rx_s_prev)<fabs(delta_T_rx_s))
{
realigned_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(
d_gnss_synchro_history_queue[i].at(distance-1).Channel_ID,
d_gnss_synchro_history_queue[i].at(distance-1)));
adjacent_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(gnss_synchro_deque_iter->Channel_ID,
*gnss_synchro_deque_iter));
}else{
// double T_rx_channel_prev=(double)d_gnss_synchro_history_queue[i].at(distance-1).Tracking_sample_counter/(double)gnss_synchro_deque_iter->fs;
// double delta_T_rx_s_prev=T_rx_channel_prev-T_rx_s;
// if (fabs(delta_T_rx_s_prev)<fabs(delta_T_rx_s))
// {
// realigned_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(
// d_gnss_synchro_history_queue[i].at(distance-1).Channel_ID,
// d_gnss_synchro_history_queue[i].at(distance-1)));
// adjacent_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(gnss_synchro_deque_iter->Channel_ID,
// *gnss_synchro_deque_iter));
// }else{
realigned_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(gnss_synchro_deque_iter->Channel_ID,
*gnss_synchro_deque_iter));
adjacent_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(
d_gnss_synchro_history_queue[i].at(distance-1).Channel_ID,
d_gnss_synchro_history_queue[i].at(distance-1)));
}
}else{
realigned_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(gnss_synchro_deque_iter->Channel_ID,
*gnss_synchro_deque_iter));
// }
// }else{
// realigned_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(gnss_synchro_deque_iter->Channel_ID,
// *gnss_synchro_deque_iter));
}
}else{
@ -254,6 +255,9 @@ int hybrid_observables_cc::general_work (int noutput_items,
realigned_gnss_synchro_map.end(),
Hybrid_pairCompare_gnss_synchro_d_TOW);
double d_TOW_reference = gnss_synchro_map_iter->second.TOW_at_current_symbol_s;
// std::cout << std::fixed;
// std::cout << std::setprecision(2);
// std::cout<<"d_TOW_reference:"<<d_TOW_reference*1000.0<<std::endl;
double d_ref_PRN_phase_samples = gnss_synchro_map_iter->second.Code_phase_samples;
//std::cout<<"OBS SV REF SAT: "<<gnss_synchro_map_iter->second.PRN<<std::endl;

View File

@ -455,8 +455,7 @@ int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items __attribut
current_synchro_data.Flag_valid_word = false;
}
current_synchro_data.TOW_at_current_symbol_s = d_TOW_at_current_symbol;
//todo: move to observables: current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol - delta_t; //delta_t = t_gal - t_gps ----> t_gps = t_gal -delta_t
current_synchro_data.TOW_at_current_symbol_s = floor(d_TOW_at_current_symbol*1000.0)/1000.0;
if(d_dump == true)
{

View File

@ -533,7 +533,7 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
current_synchro_data.Flag_valid_word = false;
}
current_synchro_data.TOW_at_current_symbol_s = d_TOW_at_current_symbol;
current_synchro_data.TOW_at_current_symbol_s = floor(d_TOW_at_current_symbol*1000.0)/1000.0;
if(d_dump == true)
{

View File

@ -340,7 +340,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
// update TOW at the preamble instant
d_TOW_at_Preamble = d_GPS_FSM.d_nav.d_TOW + GPS_L1_CA_CODE_PERIOD;
d_TOW_at_current_symbol = d_TOW_at_Preamble;
d_TOW_at_current_symbol = floor(d_TOW_at_Preamble*1000.0)/1000.0;
flag_TOW_set = true;
d_flag_new_tow_available=false;
}

View File

@ -155,6 +155,7 @@ int gps_l2c_telemetry_decoder_cc::general_work (int noutput_items __attribute__(
//* \code
//* symbolTime_ms = msg->tow * 6000 + *pdelay * 20
d_TOW_at_current_symbol=((double)msg.tow) * 6.0 + ((double)delay) * GPS_L2_M_PERIOD +12*GPS_L2_M_PERIOD;
d_TOW_at_current_symbol=floor(d_TOW_at_current_symbol*1000.0)/1000.0;
d_flag_valid_word=true;
}
else

View File

@ -70,7 +70,7 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking(
std::string default_dump_filename = "./track_ch";
dump_filename = configuration->property(role + ".dump_filename",
default_dump_filename); //unused!
vector_length = std::round(fs_in / (GPS_L2_M_CODE_RATE_HZ / GPS_L2_M_CODE_LENGTH_CHIPS));
vector_length = std::round((double)fs_in / ((double)GPS_L2_M_CODE_RATE_HZ / (double)GPS_L2_M_CODE_LENGTH_CHIPS));
//################# MAKE TRACKING GNURadio object ###################
if (item_type.compare("gr_complex") == 0)

View File

@ -316,6 +316,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute__
current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_rad;
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
current_synchro_data.fs=d_fs_in;
current_synchro_data.correlation_length_ms = 1;
*out[0] = current_synchro_data;
consume_each(samples_offset); // shift input to perform alignment with local replica
return 1;
@ -428,6 +429,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute__
current_synchro_data.Tracking_sample_counter =d_sample_counter + d_current_prn_length_samples;
current_synchro_data.System = {'G'};
current_synchro_data.correlation_length_ms = 1;
}
//assign the GNURadio block output data

View File

@ -319,6 +319,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work (int noutput_items __attribu
samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples);
current_synchro_data.Tracking_sample_counter = d_sample_counter + samples_offset;
current_synchro_data.fs=d_fs_in;
current_synchro_data.correlation_length_ms = 1;
*out[0] = current_synchro_data;
d_sample_counter += samples_offset; //count for the processed samples
d_pull_in = false;
@ -453,6 +454,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work (int noutput_items __attribu
}
current_synchro_data.System = {'G'};
current_synchro_data.correlation_length_ms = 1;
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_correlation_length_samples;
}

View File

@ -320,6 +320,7 @@ int gps_l2_m_dll_pll_tracking_cc::general_work (int noutput_items __attribute__(
current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_rad;
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
current_synchro_data.fs=d_fs_in;
current_synchro_data.correlation_length_ms = 20;
*out[0] = current_synchro_data;
consume_each(samples_offset); // shift input to perform alignment with local replica
return 1;
@ -429,6 +430,7 @@ int gps_l2_m_dll_pll_tracking_cc::general_work (int noutput_items __attribute__(
d_correlator_outs[n] = gr_complex(0,0);
}
current_synchro_data.Tracking_sample_counter =d_sample_counter + d_current_prn_length_samples;
current_synchro_data.correlation_length_ms = 20;
}
//assign the GNURadio block output data
current_synchro_data.fs=d_fs_in;