1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2026-06-02 10:42:17 +00:00

Merge branch 'mmajoral-fix/fpga-acquisition-init' into next

This commit is contained in:
Carles Fernandez
2025-12-10 18:48:10 +01:00
13 changed files with 178 additions and 103 deletions
@@ -183,6 +183,13 @@ void BasePcpsAcquisitionFpga::stop_acquisition()
}
}
void BasePcpsAcquisitionFpga::init()
{
if (acquisition_fpga_)
{
acquisition_fpga_->init();
}
}
signed int BasePcpsAcquisitionFpga::mag()
{
@@ -86,6 +86,9 @@ protected:
static const uint32_t ACQ_BUFF_0 = 0; // FPGA Acquisition IP buffer containing L1/E1 frequency band samples by default.
static const uint32_t ACQ_BUFF_1 = 1; // FPGA Acquisition IP buffer containing L2 or L5/E5 frequency band samples by default.
// parameter initialization
void init();
// Members subclasses must set
volk_gnsssdr::vector<uint32_t> d_all_fft_codes_;
Acq_Conf_Fpga acq_parameters_;
@@ -52,6 +52,7 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
acquire_pilot_(configuration->property(role + ".acquire_pilot", false))
{
generate_galileo_e1_prn_codes();
init();
DLOG(INFO) << "Initialized FPGA acquisition adapter for role " << role;
}
@@ -51,6 +51,7 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(
acq_pilot_ = configuration->property(role + ".acquire_pilot", false);
acq_iq_ = configuration->property(role + ".acquire_iq", false);
generate_galileo_e5a_prn_codes();
init();
DLOG(INFO) << "Initialized FPGA acquisition adapter for role " << role;
}
@@ -51,6 +51,7 @@ GalileoE5bPcpsAcquisitionFpga::GalileoE5bPcpsAcquisitionFpga(
acq_iq_(configuration->property(role + ".acquire_iq", false))
{
generate_galileo_e5b_prn_codes();
init();
DLOG(INFO) << "Initialized FPGA acquisition adapter for role " << role;
}
@@ -50,6 +50,7 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
out_streams)
{
generate_gps_l1_ca_prn_codes();
init();
DLOG(INFO) << "Initialized FPGA acquisition adapter for role " << role;
}
@@ -50,6 +50,7 @@ GpsL2MPcpsAcquisitionFpga::GpsL2MPcpsAcquisitionFpga(
out_streams)
{
generate_gps_l2c_m_prn_codes();
init();
DLOG(INFO) << "Initialized FPGA acquisition adapter for role " << role;
}
@@ -51,6 +51,7 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
out_streams)
{
generate_gps_l5i_prn_codes();
init();
DLOG(INFO) << "Initialized FPGA acquisition adapter for role " << role;
}
@@ -74,8 +74,6 @@ pcps_acquisition_fpga::pcps_acquisition_fpga(Acq_Conf_Fpga *conf_,
acq_buff_num,
downsampling_filter_specs,
max_FFT_size);
d_acquisition_fpga->init(d_acq_parameters->code_length, d_acq_parameters->fft_size,
d_acq_parameters->resampled_fs, d_acq_parameters->downsampling_filter_num, d_acq_parameters->excludelimit, d_acq_parameters->all_fft_codes);
}
void pcps_acquisition_fpga::set_local_code()
@@ -83,6 +81,12 @@ void pcps_acquisition_fpga::set_local_code()
d_acquisition_fpga->set_local_code(d_gnss_synchro->PRN);
}
void pcps_acquisition_fpga::init()
{
d_acquisition_fpga->init(d_acq_parameters->code_length, d_acq_parameters->fft_size,
d_acq_parameters->resampled_fs, d_acq_parameters->downsampling_filter_num, d_acq_parameters->excludelimit, d_acq_parameters->all_fft_codes);
}
void pcps_acquisition_fpga::send_positive_acquisition()
{
@@ -81,6 +81,11 @@ public:
return d_mag;
}
/*!
* \brief Initializes acquisition algorithm.
*/
void init();
/*!
* \brief Sets local code for PCPS acquisition algorithm.
*/
@@ -401,10 +401,12 @@ int32_t Glonass_Ca_Dll_Pll_C_Aid_Tracking_cc::save_matfile() const
{
// READ DUMP FILE
std::ifstream::pos_type size;
const int32_t number_of_double_vars = 11;
const int32_t number_of_float_vars = 5;
const int32_t number_of_double_vars = 1;
const int32_t number_of_float_vars = 19;
const int32_t epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars +
sizeof(float) * number_of_float_vars + sizeof(uint32_t);
sizeof(float) * number_of_float_vars + sizeof(uint32_t) +
sizeof(uint64_t) + sizeof(int32_t);
std::ifstream dump_file;
dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
try
@@ -428,24 +430,28 @@ int32_t Glonass_Ca_Dll_Pll_C_Aid_Tracking_cc::save_matfile() const
{
return 1;
}
auto abs_VE = std::vector<float>(num_epoch);
auto abs_E = std::vector<float>(num_epoch);
auto abs_P = std::vector<float>(num_epoch);
auto abs_L = std::vector<float>(num_epoch);
auto abs_VL = std::vector<float>(num_epoch);
auto Prompt_I = std::vector<float>(num_epoch);
auto Prompt_Q = std::vector<float>(num_epoch);
auto PRN_start_sample_count = std::vector<uint64_t>(num_epoch);
auto acc_carrier_phase_rad = std::vector<double>(num_epoch);
auto carrier_doppler_hz = std::vector<double>(num_epoch);
auto code_freq_chips = std::vector<double>(num_epoch);
auto carr_error_hz = std::vector<double>(num_epoch);
auto carr_error_filt_hz = std::vector<double>(num_epoch);
auto code_error_chips = std::vector<double>(num_epoch);
auto code_error_filt_chips = std::vector<double>(num_epoch);
auto CN0_SNV_dB_Hz = std::vector<double>(num_epoch);
auto carrier_lock_test = std::vector<double>(num_epoch);
auto aux1 = std::vector<double>(num_epoch);
auto acc_carrier_phase_rad = std::vector<float>(num_epoch);
auto carrier_doppler_hz = std::vector<float>(num_epoch);
auto code_freq_chips = std::vector<float>(num_epoch);
auto carr_error_hz = std::vector<float>(num_epoch);
auto carr_error_filt_hz = std::vector<float>(num_epoch);
auto code_error_chips = std::vector<float>(num_epoch);
auto code_error_filt_chips = std::vector<float>(num_epoch);
auto CN0_SNV_dB_Hz = std::vector<float>(num_epoch);
auto carrier_lock_test = std::vector<float>(num_epoch);
auto aux1 = std::vector<float>(num_epoch);
auto aux2 = std::vector<double>(num_epoch);
auto PRN = std::vector<uint32_t>(num_epoch);
auto TOW = std::vector<uint64_t>(num_epoch);
auto WN = std::vector<uint32_t>(num_epoch);
try
{
@@ -453,24 +459,28 @@ int32_t Glonass_Ca_Dll_Pll_C_Aid_Tracking_cc::save_matfile() const
{
for (int64_t i = 0; i < num_epoch; i++)
{
dump_file.read(reinterpret_cast<char *>(&abs_VE[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_E[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_P[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_L[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_VL[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&Prompt_I[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&Prompt_Q[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&PRN_start_sample_count[i]), sizeof(uint64_t));
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&aux2[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&PRN[i]), sizeof(uint32_t));
dump_file.read(reinterpret_cast<char *>(&TOW[i]), sizeof(uint64_t));
dump_file.read(reinterpret_cast<char *>(&WN[i]), sizeof(uint32_t));
}
}
dump_file.close();
@@ -496,18 +506,20 @@ int32_t Glonass_Ca_Dll_Pll_C_Aid_Tracking_cc::save_matfile() const
write_matlab_var<2, float>("Prompt_I", Prompt_I.data(), matfp, dims);
write_matlab_var<2, float>("Prompt_Q", Prompt_Q.data(), matfp, dims);
write_matlab_var<2, uint64_t>("PRN_start_sample_count", PRN_start_sample_count.data(), matfp, dims);
write_matlab_var<2, double>("acc_carrier_phase_rad", acc_carrier_phase_rad.data(), matfp, dims);
write_matlab_var<2, double>("carrier_doppler_hz", carrier_doppler_hz.data(), matfp, dims);
write_matlab_var<2, double>("code_freq_chips", code_freq_chips.data(), matfp, dims);
write_matlab_var<2, double>("carr_error_hz", carr_error_hz.data(), matfp, dims);
write_matlab_var<2, double>("carr_error_filt_hz", carr_error_filt_hz.data(), matfp, dims);
write_matlab_var<2, double>("code_error_chips", code_error_chips.data(), matfp, dims);
write_matlab_var<2, double>("code_error_filt_chips", code_error_filt_chips.data(), matfp, dims);
write_matlab_var<2, double>("CN0_SNV_dB_Hz", CN0_SNV_dB_Hz.data(), matfp, dims);
write_matlab_var<2, double>("carrier_lock_test", carrier_lock_test.data(), matfp, dims);
write_matlab_var<2, double>("aux1", aux1.data(), matfp, dims);
write_matlab_var<2, float>("acc_carrier_phase_rad", acc_carrier_phase_rad.data(), matfp, dims);
write_matlab_var<2, float>("carrier_doppler_hz", carrier_doppler_hz.data(), matfp, dims);
write_matlab_var<2, float>("code_freq_chips", code_freq_chips.data(), matfp, dims);
write_matlab_var<2, float>("carr_error_hz", carr_error_hz.data(), matfp, dims);
write_matlab_var<2, float>("carr_error_filt_hz", carr_error_filt_hz.data(), matfp, dims);
write_matlab_var<2, float>("code_error_chips", code_error_chips.data(), matfp, dims);
write_matlab_var<2, float>("code_error_filt_chips", code_error_filt_chips.data(), matfp, dims);
write_matlab_var<2, float>("CN0_SNV_dB_Hz", CN0_SNV_dB_Hz.data(), matfp, dims);
write_matlab_var<2, float>("carrier_lock_test", carrier_lock_test.data(), matfp, dims);
write_matlab_var<2, float>("aux1", aux1.data(), matfp, dims);
write_matlab_var<2, double>("aux2", aux2.data(), matfp, dims);
write_matlab_var<2, uint32_t>("PRN", PRN.data(), matfp, dims);
write_matlab_var<2, uint64_t>("TOW", TOW.data(), matfp, dims);
write_matlab_var<2, uint32_t>("WN", WN.data(), matfp, dims);
}
Mat_Close(matfp);
return 0;
@@ -911,6 +923,12 @@ int Glonass_Ca_Dll_Pll_C_Aid_Tracking_cc::general_work(int noutput_items __attri
// PRN
uint32_t prn_ = d_acquisition_gnss_synchro->PRN;
d_dump_file.write(reinterpret_cast<char *>(&prn_), sizeof(uint32_t));
// TOW
uint64_t tow_ = 0;
d_dump_file.write(reinterpret_cast<char *>(&tow_), sizeof(uint64_t));
// Week Number
uint32_t wn_ = 0;
d_dump_file.write(reinterpret_cast<char *>(&wn_), sizeof(uint32_t));
}
catch (const std::ofstream::failure &e)
{
@@ -323,10 +323,10 @@ int32_t Glonass_Ca_Dll_Pll_C_Aid_Tracking_sc::save_matfile() const
{
// READ DUMP FILE
std::ifstream::pos_type size;
const int32_t number_of_double_vars = 11;
const int32_t number_of_float_vars = 5;
const int32_t epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars +
sizeof(float) * number_of_float_vars + sizeof(uint32_t);
const int32_t number_of_double_vars = 1;
const int32_t number_of_float_vars = 19;
const int32_t epoch_size_bytes = 2 * sizeof(uint64_t) + sizeof(double) * number_of_double_vars +
sizeof(float) * number_of_float_vars + 2 * sizeof(uint32_t);
std::ifstream dump_file;
dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
try
@@ -350,24 +350,28 @@ int32_t Glonass_Ca_Dll_Pll_C_Aid_Tracking_sc::save_matfile() const
{
return 1;
}
auto abs_VE = std::vector<float>(num_epoch);
auto abs_E = std::vector<float>(num_epoch);
auto abs_P = std::vector<float>(num_epoch);
auto abs_L = std::vector<float>(num_epoch);
auto abs_VL = std::vector<float>(num_epoch);
auto Prompt_I = std::vector<float>(num_epoch);
auto Prompt_Q = std::vector<float>(num_epoch);
auto PRN_start_sample_count = std::vector<uint64_t>(num_epoch);
auto acc_carrier_phase_rad = std::vector<double>(num_epoch);
auto carrier_doppler_hz = std::vector<double>(num_epoch);
auto code_freq_chips = std::vector<double>(num_epoch);
auto carr_error_hz = std::vector<double>(num_epoch);
auto carr_error_filt_hz = std::vector<double>(num_epoch);
auto code_error_chips = std::vector<double>(num_epoch);
auto code_error_filt_chips = std::vector<double>(num_epoch);
auto CN0_SNV_dB_Hz = std::vector<double>(num_epoch);
auto carrier_lock_test = std::vector<double>(num_epoch);
auto aux1 = std::vector<double>(num_epoch);
auto acc_carrier_phase_rad = std::vector<float>(num_epoch);
auto carrier_doppler_hz = std::vector<float>(num_epoch);
auto code_freq_chips = std::vector<float>(num_epoch);
auto carr_error_hz = std::vector<float>(num_epoch);
auto carr_error_filt_hz = std::vector<float>(num_epoch);
auto code_error_chips = std::vector<float>(num_epoch);
auto code_error_filt_chips = std::vector<float>(num_epoch);
auto CN0_SNV_dB_Hz = std::vector<float>(num_epoch);
auto carrier_lock_test = std::vector<float>(num_epoch);
auto aux1 = std::vector<float>(num_epoch);
auto aux2 = std::vector<double>(num_epoch);
auto PRN = std::vector<uint32_t>(num_epoch);
auto TOW = std::vector<uint64_t>(num_epoch);
auto WN = std::vector<uint32_t>(num_epoch);
try
{
@@ -375,24 +379,28 @@ int32_t Glonass_Ca_Dll_Pll_C_Aid_Tracking_sc::save_matfile() const
{
for (int64_t i = 0; i < num_epoch; i++)
{
dump_file.read(reinterpret_cast<char *>(&abs_VE[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_E[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_P[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_L[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_VL[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&Prompt_I[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&Prompt_Q[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&PRN_start_sample_count[i]), sizeof(uint64_t));
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&aux2[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&PRN[i]), sizeof(uint32_t));
dump_file.read(reinterpret_cast<char *>(&TOW[i]), sizeof(uint64_t));
dump_file.read(reinterpret_cast<char *>(&WN[i]), sizeof(uint32_t));
}
}
dump_file.close();
@@ -418,18 +426,20 @@ int32_t Glonass_Ca_Dll_Pll_C_Aid_Tracking_sc::save_matfile() const
write_matlab_var<2, float>("Prompt_I", Prompt_I.data(), matfp, dims);
write_matlab_var<2, float>("Prompt_Q", Prompt_Q.data(), matfp, dims);
write_matlab_var<2, uint64_t>("PRN_start_sample_count", PRN_start_sample_count.data(), matfp, dims);
write_matlab_var<2, double>("acc_carrier_phase_rad", acc_carrier_phase_rad.data(), matfp, dims);
write_matlab_var<2, double>("carrier_doppler_hz", carrier_doppler_hz.data(), matfp, dims);
write_matlab_var<2, double>("code_freq_chips", code_freq_chips.data(), matfp, dims);
write_matlab_var<2, double>("carr_error_hz", carr_error_hz.data(), matfp, dims);
write_matlab_var<2, double>("carr_error_filt_hz", carr_error_filt_hz.data(), matfp, dims);
write_matlab_var<2, double>("code_error_chips", code_error_chips.data(), matfp, dims);
write_matlab_var<2, double>("code_error_filt_chips", code_error_filt_chips.data(), matfp, dims);
write_matlab_var<2, double>("CN0_SNV_dB_Hz", CN0_SNV_dB_Hz.data(), matfp, dims);
write_matlab_var<2, double>("carrier_lock_test", carrier_lock_test.data(), matfp, dims);
write_matlab_var<2, double>("aux1", aux1.data(), matfp, dims);
write_matlab_var<2, float>("acc_carrier_phase_rad", acc_carrier_phase_rad.data(), matfp, dims);
write_matlab_var<2, float>("carrier_doppler_hz", carrier_doppler_hz.data(), matfp, dims);
write_matlab_var<2, float>("code_freq_chips", code_freq_chips.data(), matfp, dims);
write_matlab_var<2, float>("carr_error_hz", carr_error_hz.data(), matfp, dims);
write_matlab_var<2, float>("carr_error_filt_hz", carr_error_filt_hz.data(), matfp, dims);
write_matlab_var<2, float>("code_error_chips", code_error_chips.data(), matfp, dims);
write_matlab_var<2, float>("code_error_filt_chips", code_error_filt_chips.data(), matfp, dims);
write_matlab_var<2, float>("CN0_SNV_dB_Hz", CN0_SNV_dB_Hz.data(), matfp, dims);
write_matlab_var<2, float>("carrier_lock_test", carrier_lock_test.data(), matfp, dims);
write_matlab_var<2, float>("aux1", aux1.data(), matfp, dims);
write_matlab_var<2, double>("aux2", aux2.data(), matfp, dims);
write_matlab_var<2, uint32_t>("PRN", PRN.data(), matfp, dims);
write_matlab_var<2, uint64_t>("TOW", TOW.data(), matfp, dims);
write_matlab_var<2, uint32_t>("WN", WN.data(), matfp, dims);
}
Mat_Close(matfp);
return 0;
@@ -879,6 +889,12 @@ int Glonass_Ca_Dll_Pll_C_Aid_Tracking_sc::general_work(int noutput_items __attri
// PRN
uint32_t prn_ = d_acquisition_gnss_synchro->PRN;
d_dump_file.write(reinterpret_cast<char *>(&prn_), sizeof(uint32_t));
// TOW
uint64_t tow_ = 0;
d_dump_file.write(reinterpret_cast<char *>(&tow_), sizeof(uint64_t));
// Week Number
uint32_t wn_ = 0;
d_dump_file.write(reinterpret_cast<char *>(&wn_), sizeof(uint32_t));
}
catch (const std::ofstream::failure &e)
{
@@ -349,10 +349,10 @@ int32_t Glonass_Ca_Dll_Pll_Tracking_cc::save_matfile() const
{
// READ DUMP FILE
std::ifstream::pos_type size;
const int32_t number_of_double_vars = 11;
const int32_t number_of_float_vars = 5;
const int32_t epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars +
sizeof(float) * number_of_float_vars + sizeof(uint32_t);
const int32_t number_of_double_vars = 1;
const int32_t number_of_float_vars = 19;
const int32_t epoch_size_bytes = 2 * sizeof(uint64_t) + sizeof(double) * number_of_double_vars +
sizeof(float) * number_of_float_vars + 2 * sizeof(uint32_t);
std::ifstream dump_file;
dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
try
@@ -376,24 +376,28 @@ int32_t Glonass_Ca_Dll_Pll_Tracking_cc::save_matfile() const
{
return 1;
}
auto abs_VE = std::vector<float>(num_epoch);
auto abs_E = std::vector<float>(num_epoch);
auto abs_P = std::vector<float>(num_epoch);
auto abs_L = std::vector<float>(num_epoch);
auto abs_VL = std::vector<float>(num_epoch);
auto Prompt_I = std::vector<float>(num_epoch);
auto Prompt_Q = std::vector<float>(num_epoch);
auto PRN_start_sample_count = std::vector<uint64_t>(num_epoch);
auto acc_carrier_phase_rad = std::vector<double>(num_epoch);
auto carrier_doppler_hz = std::vector<double>(num_epoch);
auto code_freq_chips = std::vector<double>(num_epoch);
auto carr_error_hz = std::vector<double>(num_epoch);
auto carr_error_filt_hz = std::vector<double>(num_epoch);
auto code_error_chips = std::vector<double>(num_epoch);
auto code_error_filt_chips = std::vector<double>(num_epoch);
auto CN0_SNV_dB_Hz = std::vector<double>(num_epoch);
auto carrier_lock_test = std::vector<double>(num_epoch);
auto aux1 = std::vector<double>(num_epoch);
auto acc_carrier_phase_rad = std::vector<float>(num_epoch);
auto carrier_doppler_hz = std::vector<float>(num_epoch);
auto code_freq_chips = std::vector<float>(num_epoch);
auto carr_error_hz = std::vector<float>(num_epoch);
auto carr_error_filt_hz = std::vector<float>(num_epoch);
auto code_error_chips = std::vector<float>(num_epoch);
auto code_error_filt_chips = std::vector<float>(num_epoch);
auto CN0_SNV_dB_Hz = std::vector<float>(num_epoch);
auto carrier_lock_test = std::vector<float>(num_epoch);
auto aux1 = std::vector<float>(num_epoch);
auto aux2 = std::vector<double>(num_epoch);
auto PRN = std::vector<uint32_t>(num_epoch);
auto TOW = std::vector<uint64_t>(num_epoch);
auto WN = std::vector<uint32_t>(num_epoch);
try
{
@@ -401,24 +405,28 @@ int32_t Glonass_Ca_Dll_Pll_Tracking_cc::save_matfile() const
{
for (int64_t i = 0; i < num_epoch; i++)
{
dump_file.read(reinterpret_cast<char *>(&abs_VE[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_E[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_P[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_L[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&abs_VL[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&Prompt_I[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&Prompt_Q[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&PRN_start_sample_count[i]), sizeof(uint64_t));
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(float));
dump_file.read(reinterpret_cast<char *>(&aux2[i]), sizeof(double));
dump_file.read(reinterpret_cast<char *>(&PRN[i]), sizeof(uint32_t));
dump_file.read(reinterpret_cast<char *>(&TOW[i]), sizeof(uint64_t));
dump_file.read(reinterpret_cast<char *>(&WN[i]), sizeof(uint32_t));
}
}
dump_file.close();
@@ -444,18 +452,20 @@ int32_t Glonass_Ca_Dll_Pll_Tracking_cc::save_matfile() const
write_matlab_var<2, float>("Prompt_I", Prompt_I.data(), matfp, dims);
write_matlab_var<2, float>("Prompt_Q", Prompt_Q.data(), matfp, dims);
write_matlab_var<2, uint64_t>("PRN_start_sample_count", PRN_start_sample_count.data(), matfp, dims);
write_matlab_var<2, double>("acc_carrier_phase_rad", acc_carrier_phase_rad.data(), matfp, dims);
write_matlab_var<2, double>("carrier_doppler_hz", carrier_doppler_hz.data(), matfp, dims);
write_matlab_var<2, double>("code_freq_chips", code_freq_chips.data(), matfp, dims);
write_matlab_var<2, double>("carr_error_hz", carr_error_hz.data(), matfp, dims);
write_matlab_var<2, double>("carr_error_filt_hz", carr_error_filt_hz.data(), matfp, dims);
write_matlab_var<2, double>("code_error_chips", code_error_chips.data(), matfp, dims);
write_matlab_var<2, double>("code_error_filt_chips", code_error_filt_chips.data(), matfp, dims);
write_matlab_var<2, double>("CN0_SNV_dB_Hz", CN0_SNV_dB_Hz.data(), matfp, dims);
write_matlab_var<2, double>("carrier_lock_test", carrier_lock_test.data(), matfp, dims);
write_matlab_var<2, double>("aux1", aux1.data(), matfp, dims);
write_matlab_var<2, float>("acc_carrier_phase_rad", acc_carrier_phase_rad.data(), matfp, dims);
write_matlab_var<2, float>("carrier_doppler_hz", carrier_doppler_hz.data(), matfp, dims);
write_matlab_var<2, float>("code_freq_chips", code_freq_chips.data(), matfp, dims);
write_matlab_var<2, float>("carr_error_hz", carr_error_hz.data(), matfp, dims);
write_matlab_var<2, float>("carr_error_filt_hz", carr_error_filt_hz.data(), matfp, dims);
write_matlab_var<2, float>("code_error_chips", code_error_chips.data(), matfp, dims);
write_matlab_var<2, float>("code_error_filt_chips", code_error_filt_chips.data(), matfp, dims);
write_matlab_var<2, float>("CN0_SNV_dB_Hz", CN0_SNV_dB_Hz.data(), matfp, dims);
write_matlab_var<2, float>("carrier_lock_test", carrier_lock_test.data(), matfp, dims);
write_matlab_var<2, float>("aux1", aux1.data(), matfp, dims);
write_matlab_var<2, double>("aux2", aux2.data(), matfp, dims);
write_matlab_var<2, uint32_t>("PRN", PRN.data(), matfp, dims);
write_matlab_var<2, uint64_t>("TOW", TOW.data(), matfp, dims);
write_matlab_var<2, uint32_t>("WN", WN.data(), matfp, dims);
}
Mat_Close(matfp);
return 0;
@@ -729,6 +739,12 @@ int Glonass_Ca_Dll_Pll_Tracking_cc::general_work(int noutput_items __attribute__
// PRN
uint32_t prn_ = d_acquisition_gnss_synchro->PRN;
d_dump_file.write(reinterpret_cast<char *>(&prn_), sizeof(uint32_t));
// TOW
uint64_t tow_ = 0;
d_dump_file.write(reinterpret_cast<char *>(&tow_), sizeof(uint64_t));
// Week Number
uint32_t wn_ = 0;
d_dump_file.write(reinterpret_cast<char *>(&wn_), sizeof(uint32_t));
}
catch (const std::ofstream::failure &e)
{