mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	Modernize code
Automatize memory management De-clutter clan-tidy warnings by fixing obvious issues
This commit is contained in:
		| @@ -40,9 +40,9 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <volk/volk.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <exception> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
|  | ||||
|  | ||||
| galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr galileo_e5a_noncoherentIQ_make_acquisition_caf_cc( | ||||
| @@ -310,9 +310,8 @@ void galileo_e5a_noncoherentIQ_acquisition_caf_cc::init() | ||||
|             d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex *>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment())); | ||||
|             int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index; | ||||
|             float phase_step_rad = GALILEO_TWO_PI * doppler / static_cast<float>(d_fs_in); | ||||
|             float _phase[1]; | ||||
|             _phase[0] = 0; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size); | ||||
|             std::array<float, 1> _phase{}; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size); | ||||
|         } | ||||
|  | ||||
|     /* CAF Filtering to resolve doppler ambiguity. Phase and quadrature must be processed | ||||
|   | ||||
| @@ -34,9 +34,9 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <volk/volk.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <exception> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
|  | ||||
|  | ||||
| galileo_pcps_8ms_acquisition_cc_sptr galileo_pcps_8ms_make_acquisition_cc( | ||||
| @@ -192,9 +192,8 @@ void galileo_pcps_8ms_acquisition_cc::init() | ||||
|             d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex *>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment())); | ||||
|             int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index; | ||||
|             float phase_step_rad = static_cast<float>(GALILEO_TWO_PI) * doppler / static_cast<float>(d_fs_in); | ||||
|             float _phase[1]; | ||||
|             _phase[0] = 0; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size); | ||||
|             std::array<float, 1> _phase{}; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size); | ||||
|         } | ||||
| } | ||||
|  | ||||
| @@ -358,7 +357,7 @@ int galileo_pcps_8ms_acquisition_cc::general_work(int noutput_items, | ||||
|                                 std::streamsize n = 2 * sizeof(float) * (d_fft_size);  // complex file write | ||||
|                                 filename.str(""); | ||||
|                                 filename << "../data/test_statistics_" << d_gnss_synchro->System | ||||
|                                          << "_" << d_gnss_synchro->Signal << "_sat_" | ||||
|                                          << "_" << d_gnss_synchro->Signal[0] << d_gnss_synchro->Signal[1] << "_sat_" | ||||
|                                          << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; | ||||
|                                 d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); | ||||
|                                 d_dump_file.write(reinterpret_cast<char *>(d_ifft->get_outbuf()), n);  //write directly |abs(x)|^2 in this Doppler bin? | ||||
|   | ||||
| @@ -284,9 +284,8 @@ void pcps_acquisition::update_local_carrier(gsl::span<gr_complex> carrier_vector | ||||
|         { | ||||
|             phase_step_rad = GPS_TWO_PI * freq / static_cast<float>(acq_parameters.fs_in); | ||||
|         } | ||||
|     float _phase[1]; | ||||
|     _phase[0] = 0.0; | ||||
|     volk_gnsssdr_s32f_sincos_32fc(carrier_vector.data(), -phase_step_rad, _phase, carrier_vector.length()); | ||||
|     std::array<float, 1> _phase{}; | ||||
|     volk_gnsssdr_s32f_sincos_32fc(carrier_vector.data(), -phase_step_rad, _phase.data(), carrier_vector.length()); | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -158,11 +158,11 @@ pcps_acquisition_fine_doppler_cc::pcps_acquisition_fine_doppler_cc(const Acq_Con | ||||
| unsigned int pcps_acquisition_fine_doppler_cc::nextPowerOf2(unsigned int n) | ||||
| { | ||||
|     n--; | ||||
|     n |= n >> 1; | ||||
|     n |= n >> 2; | ||||
|     n |= n >> 4; | ||||
|     n |= n >> 8; | ||||
|     n |= n >> 16; | ||||
|     n |= n >> 1U; | ||||
|     n |= n >> 2U; | ||||
|     n |= n >> 4U; | ||||
|     n |= n >> 8U; | ||||
|     n |= n >> 16U; | ||||
|     n++; | ||||
|     return n; | ||||
| } | ||||
|   | ||||
| @@ -38,6 +38,7 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <volk/volk.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <exception> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
| @@ -233,9 +234,8 @@ void pcps_assisted_acquisition_cc::redefine_grid() | ||||
|             // doppler search steps | ||||
|             // compute the carrier doppler wipe-off signal and store it | ||||
|             phase_step_rad = static_cast<float>(GPS_TWO_PI) * doppler_hz / static_cast<float>(d_fs_in); | ||||
|             float _phase[1]; | ||||
|             _phase[0] = 0; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index].data(), -phase_step_rad, _phase, d_fft_size); | ||||
|             std::array<float, 1> _phase{}; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index].data(), -phase_step_rad, _phase.data(), d_fft_size); | ||||
|         } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -206,9 +206,8 @@ void pcps_cccwsr_acquisition_cc::init() | ||||
|  | ||||
|             int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index; | ||||
|             float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in); | ||||
|             float _phase[1]; | ||||
|             _phase[0] = 0; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size); | ||||
|             std::array<float, 1> _phase{}; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size); | ||||
|         } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -57,11 +57,11 @@ | ||||
| #include <volk/volk.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <algorithm> | ||||
| #include <array> | ||||
| #include <exception> | ||||
| #include <fstream> | ||||
| #include <iostream> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
|  | ||||
|  | ||||
| pcps_opencl_acquisition_cc_sptr pcps_make_opencl_acquisition_cc( | ||||
| @@ -324,9 +324,8 @@ void pcps_opencl_acquisition_cc::init() | ||||
|  | ||||
|             int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index; | ||||
|             float phase_step_rad = static_cast<float>(GPS_TWO_PI) * doppler / static_cast<float>(d_fs_in); | ||||
|             float _phase[1]; | ||||
|             _phase[0] = 0; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size); | ||||
|             std::array<float, 1> _phase{}; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size); | ||||
|  | ||||
|             if (d_opencl == 0) | ||||
|                 { | ||||
|   | ||||
| @@ -38,7 +38,6 @@ | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
|  | ||||
|  | ||||
| pcps_quicksync_acquisition_cc_sptr pcps_quicksync_make_acquisition_cc( | ||||
| @@ -235,9 +234,8 @@ void pcps_quicksync_acquisition_cc::init() | ||||
|             d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_samples_per_code * d_folding_factor * sizeof(gr_complex), volk_gnsssdr_get_alignment())); | ||||
|             int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index; | ||||
|             float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in); | ||||
|             float _phase[1]; | ||||
|             _phase[0] = 0; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_samples_per_code * d_folding_factor); | ||||
|             std::array<float, 1> _phase{}; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_samples_per_code * d_folding_factor); | ||||
|         } | ||||
|     // DLOG(INFO) << "end init"; | ||||
| } | ||||
|   | ||||
| @@ -54,9 +54,9 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <volk/volk.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <exception> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
|  | ||||
|  | ||||
| pcps_tong_acquisition_cc_sptr pcps_tong_make_acquisition_cc( | ||||
| @@ -211,9 +211,8 @@ void pcps_tong_acquisition_cc::init() | ||||
|  | ||||
|             int32_t doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index; | ||||
|             float phase_step_rad = GPS_TWO_PI * doppler / static_cast<float>(d_fs_in); | ||||
|             float _phase[1]; | ||||
|             _phase[0] = 0; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase, d_fft_size); | ||||
|             std::array<float, 1> _phase{}; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(d_grid_doppler_wipeoffs[doppler_index], -phase_step_rad, _phase.data(), d_fft_size); | ||||
|  | ||||
|             d_grid_data[doppler_index] = static_cast<float *>(volk_gnsssdr_malloc(d_fft_size * sizeof(float), volk_gnsssdr_get_alignment())); | ||||
|  | ||||
|   | ||||
| @@ -28,7 +28,6 @@ add_library(signal_generator_gr_blocks | ||||
|  | ||||
| target_link_libraries(signal_generator_gr_blocks | ||||
|     PUBLIC | ||||
|         Boost::boost | ||||
|         Gnuradio::runtime | ||||
|         core_system_parameters | ||||
|     PRIVATE | ||||
|   | ||||
| @@ -97,7 +97,7 @@ void signal_generator_c::init() | ||||
| { | ||||
|     work_counter_ = 0; | ||||
|  | ||||
|     complex_phase_ = static_cast<gr_complex *>(volk_gnsssdr_malloc(vector_length_ * sizeof(gr_complex), volk_gnsssdr_get_alignment())); | ||||
|     complex_phase_.reserve(vector_length_); | ||||
|  | ||||
|     // True if Galileo satellites are present | ||||
|     bool galileo_signal = std::find(system_.begin(), system_.end(), "E") != system_.end(); | ||||
| @@ -152,13 +152,13 @@ void signal_generator_c::init() | ||||
|  | ||||
| void signal_generator_c::generate_codes() | ||||
| { | ||||
|     sampled_code_data_.reset(new gr_complex *[num_sats_]); | ||||
|     sampled_code_pilot_.reset(new gr_complex *[num_sats_]); | ||||
|     //sampled_code_data_.reset(new gr_complex *[num_sats_]); | ||||
|     //sampled_code_pilot_.reset(new gr_complex *[num_sats_]); | ||||
|     sampled_code_data_ = std::vector<std::vector<gr_complex>>(num_sats_, std::vector<gr_complex>(vector_length_)); | ||||
|     sampled_code_pilot_ = std::vector<std::vector<gr_complex>>(num_sats_, std::vector<gr_complex>(vector_length_)); | ||||
|  | ||||
|     for (unsigned int sat = 0; sat < num_sats_; sat++) | ||||
|         { | ||||
|             sampled_code_data_[sat] = static_cast<gr_complex *>(std::malloc(vector_length_ * sizeof(gr_complex))); | ||||
|  | ||||
|             std::array<gr_complex, 64000> code{};  //[samples_per_code_[sat]]; | ||||
|  | ||||
|             if (system_[sat] == "G") | ||||
| @@ -211,7 +211,7 @@ void signal_generator_c::generate_codes() | ||||
|                         { | ||||
|                             std::array<char, 3> signal = {{'5', 'X', '\0'}}; | ||||
|  | ||||
|                             galileo_e5_a_code_gen_complex_sampled(gsl::span<gr_complex>(sampled_code_data_[sat], vector_length_), signal, PRN_[sat], fs_in_, | ||||
|                             galileo_e5_a_code_gen_complex_sampled(sampled_code_data_[sat], signal, PRN_[sat], fs_in_, | ||||
|                                 static_cast<int>(GALILEO_E5A_CODE_LENGTH_CHIPS) - delay_chips_[sat]); | ||||
|                             //noise | ||||
|                             if (noise_flag_) | ||||
| @@ -248,11 +248,10 @@ void signal_generator_c::generate_codes() | ||||
|                                 } | ||||
|  | ||||
|                             // Generate E1C signal (25 code-periods, with secondary code) | ||||
|                             sampled_code_pilot_[sat] = static_cast<gr_complex *>(std::malloc(vector_length_ * sizeof(gr_complex))); | ||||
|  | ||||
|                             std::array<char, 3> signal_1C = {{'1', 'C', '\0'}}; | ||||
|  | ||||
|                             galileo_e1_code_gen_complex_sampled(gsl::span<gr_complex>(sampled_code_pilot_[sat], vector_length_), signal_1C, cboc, PRN_[sat], fs_in_, | ||||
|                             galileo_e1_code_gen_complex_sampled(gsl::span<gr_complex>(sampled_code_pilot_[sat].data(), vector_length_), signal_1C, cboc, PRN_[sat], fs_in_, | ||||
|                                 static_cast<int>(GALILEO_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat], true); | ||||
|  | ||||
|                             // Obtain the desired CN0 assuming that Pn = 1. | ||||
| @@ -269,20 +268,6 @@ void signal_generator_c::generate_codes() | ||||
| } | ||||
|  | ||||
|  | ||||
| signal_generator_c::~signal_generator_c() | ||||
| { | ||||
|     /*  for (unsigned int sat = 0; sat < num_sats_; sat++) | ||||
|         { | ||||
|             std::free(sampled_code_data_[sat]); | ||||
|             if (system_[sat] == "E" && signal_[sat].at(0) != '5') | ||||
|                 { | ||||
|                     std::free(sampled_code_pilot_[sat]); | ||||
|                 } | ||||
|         } */ | ||||
|     volk_gnsssdr_free(complex_phase_); | ||||
| } | ||||
|  | ||||
|  | ||||
| int signal_generator_c::general_work(int noutput_items __attribute__((unused)), | ||||
|     gr_vector_int &ninput_items __attribute__((unused)), | ||||
|     gr_vector_const_void_star &input_items __attribute__((unused)), | ||||
| @@ -306,9 +291,9 @@ int signal_generator_c::general_work(int noutput_items __attribute__((unused)), | ||||
|     for (unsigned int sat = 0; sat < num_sats_; sat++) | ||||
|         { | ||||
|             float phase_step_rad = -static_cast<float>(GPS_TWO_PI) * doppler_Hz_[sat] / static_cast<float>(fs_in_); | ||||
|             float _phase[1]; | ||||
|             std::array<float, 1> _phase{}; | ||||
|             _phase[0] = -start_phase_rad_[sat]; | ||||
|             volk_gnsssdr_s32f_sincos_32fc(complex_phase_, -phase_step_rad, _phase, vector_length_); | ||||
|             volk_gnsssdr_s32f_sincos_32fc(complex_phase_.data(), -phase_step_rad, _phase.data(), vector_length_); | ||||
|             start_phase_rad_[sat] += vector_length_ * phase_step_rad; | ||||
|  | ||||
|             out_idx = 0; | ||||
| @@ -346,7 +331,7 @@ int signal_generator_c::general_work(int noutput_items __attribute__((unused)), | ||||
|                     phase_step_rad = -static_cast<float>(GPS_TWO_PI) * (freq + (DFRQ1_GLO * GLONASS_PRN.at(PRN_[sat])) + doppler_Hz_[sat]) / static_cast<float>(fs_in_); | ||||
|                     // std::cout << "sat " << PRN_[sat] << " SG - Freq = " << (freq + (DFRQ1_GLO * GLONASS_PRN.at(PRN_[sat]))) << " Doppler = " << doppler_Hz_[sat] << std::endl; | ||||
|                     _phase[0] = -start_phase_rad_[sat]; | ||||
|                     volk_gnsssdr_s32f_sincos_32fc(complex_phase_, -phase_step_rad, _phase, vector_length_); | ||||
|                     volk_gnsssdr_s32f_sincos_32fc(complex_phase_.data(), -phase_step_rad, _phase.data(), vector_length_); | ||||
|  | ||||
|                     unsigned int delay_samples = (delay_chips_[sat] % static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS)) * samples_per_code_[sat] / GLONASS_L1_CA_CODE_LENGTH_CHIPS; | ||||
|  | ||||
|   | ||||
| @@ -32,7 +32,6 @@ | ||||
| #define GNSS_SDR_SIGNAL_GENERATOR_C_H | ||||
|  | ||||
| #include "gnss_signal.h" | ||||
| #include <boost/scoped_array.hpp> | ||||
| #include <gnuradio/block.h> | ||||
| #include <random> | ||||
| #include <string> | ||||
| @@ -83,7 +82,7 @@ signal_generator_c_sptr signal_make_generator_c( | ||||
| class signal_generator_c : public gr::block | ||||
| { | ||||
| public: | ||||
|     ~signal_generator_c();  // public destructor | ||||
|     ~signal_generator_c() = default;  // public destructor | ||||
|  | ||||
|     // Where all the action really happens | ||||
|     int general_work(int noutput_items, | ||||
| @@ -146,9 +145,9 @@ private: | ||||
|     std::vector<signed int> current_data_bit_int_; | ||||
|     std::vector<signed int> data_modulation_; | ||||
|     std::vector<signed int> pilot_modulation_; | ||||
|     boost::scoped_array<gr_complex *> sampled_code_data_; | ||||
|     boost::scoped_array<gr_complex *> sampled_code_pilot_; | ||||
|     gr_complex *complex_phase_; | ||||
|     std::vector<std::vector<gr_complex>> sampled_code_data_; | ||||
|     std::vector<std::vector<gr_complex>> sampled_code_pilot_; | ||||
|     std::vector<gr_complex> complex_phase_; | ||||
|     unsigned int work_counter_; | ||||
|     std::random_device r; | ||||
|     std::default_random_engine e1; | ||||
|   | ||||
| @@ -56,7 +56,6 @@ target_link_libraries(telemetry_decoder_gr_blocks | ||||
|         telemetry_decoder_libs | ||||
|         core_system_parameters | ||||
|         Gnuradio::runtime | ||||
|         Volkgnsssdr::volkgnsssdr | ||||
|         Boost::boost | ||||
|     PRIVATE | ||||
|         Gflags::gflags | ||||
|   | ||||
| @@ -42,8 +42,6 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cstdlib>          // for abs | ||||
| #include <exception>        // for exception | ||||
| #include <iostream>         // for cout | ||||
| @@ -78,7 +76,6 @@ beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs( | ||||
|     d_symbol_duration_ms = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS; | ||||
|     d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|     d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|     d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS; | ||||
|  | ||||
|     // Setting samples of preamble code | ||||
| @@ -94,7 +91,6 @@ beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs( | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment())); | ||||
|     d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble; | ||||
|     d_symbol_history.set_capacity(d_required_symbols); | ||||
|  | ||||
| @@ -118,9 +114,6 @@ beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs( | ||||
|  | ||||
| beidou_b1i_telemetry_decoder_gs::~beidou_b1i_telemetry_decoder_gs() | ||||
| { | ||||
|     volk_gnsssdr_free(d_preamble_samples); | ||||
|     volk_gnsssdr_free(d_subframe_symbols); | ||||
|  | ||||
|     if (d_dump_file.is_open() == true) | ||||
|         { | ||||
|             try | ||||
| @@ -299,13 +292,8 @@ void beidou_b1i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satell | ||||
|     // Update tel dec parameters for D2 NAV Messages | ||||
|     if (sat_prn > 0 and sat_prn < 6) | ||||
|         { | ||||
|             // Clear values from previous declaration | ||||
|             volk_gnsssdr_free(d_preamble_samples); | ||||
|             volk_gnsssdr_free(d_subframe_symbols); | ||||
|  | ||||
|             d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|             d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|             d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|             d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS; | ||||
|  | ||||
|             // Setting samples of preamble code | ||||
| @@ -322,20 +310,15 @@ void beidou_b1i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satell | ||||
|                 } | ||||
|  | ||||
|             d_symbol_duration_ms = BEIDOU_B1I_GEO_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS; | ||||
|             d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment())); | ||||
|             d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble; | ||||
|             d_symbol_history.set_capacity(d_required_symbols); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             // Clear values from previous declaration | ||||
|             volk_gnsssdr_free(d_preamble_samples); | ||||
|             volk_gnsssdr_free(d_subframe_symbols); | ||||
|             //back to normal satellites | ||||
|             d_symbol_duration_ms = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS; | ||||
|             d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|             d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|             d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|             d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS; | ||||
|  | ||||
|             // Setting samples of preamble code | ||||
| @@ -351,7 +334,6 @@ void beidou_b1i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satell | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment())); | ||||
|             d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble; | ||||
|             d_symbol_history.set_capacity(d_required_symbols); | ||||
|         } | ||||
| @@ -470,7 +452,7 @@ int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute_ | ||||
|                                 } | ||||
|  | ||||
|                             // call the decoder | ||||
|                             decode_subframe(d_subframe_symbols); | ||||
|                             decode_subframe(d_subframe_symbols.data()); | ||||
|  | ||||
|                             if (d_nav.flag_crc_test == true) | ||||
|                                 { | ||||
| @@ -527,7 +509,7 @@ int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute_ | ||||
|                         } | ||||
|  | ||||
|                     // call the decoder | ||||
|                     decode_subframe(d_subframe_symbols); | ||||
|                     decode_subframe(d_subframe_symbols.data()); | ||||
|  | ||||
|                     if (d_nav.flag_crc_test == true) | ||||
|                         { | ||||
|   | ||||
| @@ -43,6 +43,7 @@ | ||||
| #include <cstdint> | ||||
| #include <fstream> | ||||
| #include <string> | ||||
| #include <array> | ||||
|  | ||||
|  | ||||
| class beidou_b1i_telemetry_decoder_gs; | ||||
| @@ -79,13 +80,12 @@ private: | ||||
|     void decode_word(int32_t word_counter, const float *enc_word_symbols, int32_t *dec_word_symbols); | ||||
|     void decode_bch15_11_01(const int32_t *bits, int32_t *decbits); | ||||
|  | ||||
|  | ||||
|     // Preamble decoding | ||||
|     int32_t *d_preamble_samples; | ||||
|     std::array<int32_t, BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS> d_preamble_samples{}; | ||||
|     int32_t d_symbols_per_preamble; | ||||
|     int32_t d_samples_per_preamble; | ||||
|     int32_t d_preamble_period_samples; | ||||
|     float *d_subframe_symbols; | ||||
|     std::array<float, BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS> d_subframe_symbols{}; | ||||
|     uint32_t d_required_symbols; | ||||
|  | ||||
|     // Storage for incoming data | ||||
| @@ -100,7 +100,7 @@ private: | ||||
|     int32_t d_CRC_error_counter;  // Number of failed CRC operations | ||||
|     bool flag_SOW_set;            // Indicates when time of week is set | ||||
|  | ||||
|     //!< Navigation Message variable | ||||
|     // Navigation Message variable | ||||
|     Beidou_Dnav_Navigation_Message d_nav; | ||||
|  | ||||
|     // Values to populate gnss synchronization structure | ||||
|   | ||||
| @@ -41,8 +41,6 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cstdlib>          // for abs | ||||
| #include <exception>        // for exception | ||||
| #include <iostream>         // for cout | ||||
| @@ -78,7 +76,6 @@ beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs( | ||||
|     d_symbol_duration_ms = BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS; | ||||
|     d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|     d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|     d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS; | ||||
|  | ||||
|     // Setting samples of preamble code | ||||
| @@ -94,7 +91,6 @@ beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs( | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment())); | ||||
|     d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble; | ||||
|     d_symbol_history.set_capacity(d_required_symbols); | ||||
|  | ||||
| @@ -118,9 +114,6 @@ beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs( | ||||
|  | ||||
| beidou_b3i_telemetry_decoder_gs::~beidou_b3i_telemetry_decoder_gs() | ||||
| { | ||||
|     volk_gnsssdr_free(d_preamble_samples); | ||||
|     volk_gnsssdr_free(d_subframe_symbols); | ||||
|  | ||||
|     if (d_dump_file.is_open() == true) | ||||
|         { | ||||
|             try | ||||
| @@ -317,15 +310,8 @@ void beidou_b3i_telemetry_decoder_gs::set_satellite( | ||||
|     // Update tel dec parameters for D2 NAV Messages | ||||
|     if (sat_prn > 0 and sat_prn < 6) | ||||
|         { | ||||
|             // Clear values from previous declaration | ||||
|             volk_gnsssdr_free(d_preamble_samples); | ||||
|             volk_gnsssdr_free(d_subframe_symbols); | ||||
|  | ||||
|  | ||||
|             d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|             d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|             d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), | ||||
|                 volk_gnsssdr_get_alignment())); | ||||
|             d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS; | ||||
|  | ||||
|             // Setting samples of preamble code | ||||
| @@ -341,22 +327,15 @@ void beidou_b3i_telemetry_decoder_gs::set_satellite( | ||||
|                         } | ||||
|                 } | ||||
|             d_symbol_duration_ms = BEIDOU_B3I_GEO_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS; | ||||
|             d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc( | ||||
|                 BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), | ||||
|                 volk_gnsssdr_get_alignment())); | ||||
|             d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble; | ||||
|             d_symbol_history.set_capacity(d_required_symbols); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             // Clear values from previous declaration | ||||
|             volk_gnsssdr_free(d_preamble_samples); | ||||
|             volk_gnsssdr_free(d_subframe_symbols); | ||||
|             // back to normal satellites | ||||
|             d_symbol_duration_ms = BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS; | ||||
|             d_symbols_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|             d_samples_per_preamble = BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|             d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|             d_preamble_period_samples = BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS; | ||||
|  | ||||
|             // Setting samples of preamble code | ||||
| @@ -372,7 +351,6 @@ void beidou_b3i_telemetry_decoder_gs::set_satellite( | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             d_subframe_symbols = static_cast<float *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(float), volk_gnsssdr_get_alignment())); | ||||
|             d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS + d_samples_per_preamble; | ||||
|             d_symbol_history.set_capacity(d_required_symbols); | ||||
|         } | ||||
| @@ -498,7 +476,7 @@ int beidou_b3i_telemetry_decoder_gs::general_work( | ||||
|                                 } | ||||
|  | ||||
|                             // call the decoder | ||||
|                             decode_subframe(d_subframe_symbols); | ||||
|                             decode_subframe(d_subframe_symbols.data()); | ||||
|  | ||||
|                             if (d_nav.flag_crc_test == true) | ||||
|                                 { | ||||
| @@ -558,7 +536,7 @@ int beidou_b3i_telemetry_decoder_gs::general_work( | ||||
|                         } | ||||
|  | ||||
|                     // call the decoder | ||||
|                     decode_subframe(d_subframe_symbols); | ||||
|                     decode_subframe(d_subframe_symbols.data()); | ||||
|  | ||||
|                     if (d_nav.flag_crc_test == true) | ||||
|                         { | ||||
|   | ||||
| @@ -40,14 +40,15 @@ | ||||
| #include <cstdint> | ||||
| #include <fstream> | ||||
| #include <string> | ||||
| #include <array> | ||||
|  | ||||
| class beidou_b3i_telemetry_decoder_gs; | ||||
|  | ||||
| using beidou_b3i_telemetry_decoder_gs_sptr = | ||||
|     boost::shared_ptr<beidou_b3i_telemetry_decoder_gs>; | ||||
|  | ||||
| beidou_b3i_telemetry_decoder_gs_sptr | ||||
| beidou_b3i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, | ||||
| beidou_b3i_telemetry_decoder_gs_sptr beidou_b3i_make_telemetry_decoder_gs( | ||||
|     const Gnss_Satellite &satellite, | ||||
|     bool dump); | ||||
|  | ||||
| /*! | ||||
| @@ -81,11 +82,11 @@ private: | ||||
|     void decode_bch15_11_01(const int32_t *bits, int32_t *decbits); | ||||
|  | ||||
|     // Preamble decoding | ||||
|     int32_t *d_preamble_samples; | ||||
|     std::array<int32_t, BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS> d_preamble_samples{}; | ||||
|     int32_t d_symbols_per_preamble; | ||||
|     int32_t d_samples_per_preamble; | ||||
|     int32_t d_preamble_period_samples; | ||||
|     float *d_subframe_symbols; | ||||
|     std::array<float, BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS> d_subframe_symbols{}; | ||||
|     uint32_t d_required_symbols; | ||||
|  | ||||
|     // Storage for incoming data | ||||
|   | ||||
| @@ -43,7 +43,6 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <cmath>            // for fmod | ||||
| #include <cstdlib>          // for abs | ||||
| #include <exception>        // for exception | ||||
| @@ -75,7 +74,6 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( | ||||
|     d_last_valid_preamble = 0; | ||||
|     d_sent_tlm_failed_msg = false; | ||||
|  | ||||
|  | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); | ||||
| @@ -93,7 +91,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( | ||||
|                 d_preamble_period_symbols = GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS; | ||||
|                 d_required_symbols = static_cast<uint32_t>(GALILEO_INAV_PAGE_SYMBOLS) + d_samples_per_preamble; | ||||
|                 // preamble bits to sampled symbols | ||||
|                 d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|                 d_preamble_samples.reserve(d_samples_per_preamble); | ||||
|                 d_frame_length_symbols = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS; | ||||
|                 CodeLength = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS; | ||||
|                 DataLength = (CodeLength / nn) - mm; | ||||
| @@ -110,7 +108,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( | ||||
|                 d_preamble_period_symbols = GALILEO_FNAV_SYMBOLS_PER_PAGE; | ||||
|                 d_required_symbols = static_cast<uint32_t>(GALILEO_FNAV_SYMBOLS_PER_PAGE) + d_samples_per_preamble; | ||||
|                 // preamble bits to sampled symbols | ||||
|                 d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|                 d_preamble_samples.reserve(d_samples_per_preamble); | ||||
|                 d_frame_length_symbols = GALILEO_FNAV_SYMBOLS_PER_PAGE - GALILEO_FNAV_PREAMBLE_LENGTH_BITS; | ||||
|                 CodeLength = GALILEO_FNAV_SYMBOLS_PER_PAGE - GALILEO_FNAV_PREAMBLE_LENGTH_BITS; | ||||
|                 DataLength = (CodeLength / nn) - mm; | ||||
| @@ -121,7 +119,6 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( | ||||
|             d_bits_per_preamble = 0; | ||||
|             d_samples_per_preamble = 0; | ||||
|             d_preamble_period_symbols = 0; | ||||
|             d_preamble_samples = nullptr; | ||||
|             d_PRN_code_period_ms = 0U; | ||||
|             d_required_symbols = 0U; | ||||
|             d_frame_length_symbols = 0U; | ||||
| @@ -131,7 +128,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( | ||||
|             std::cout << "Galileo unified telemetry decoder error: Unknown frame type " << std::endl; | ||||
|         } | ||||
|  | ||||
|     d_page_part_symbols = static_cast<double *>(volk_gnsssdr_malloc(d_frame_length_symbols * sizeof(double), volk_gnsssdr_get_alignment())); | ||||
|     d_page_part_symbols.reserve(d_frame_length_symbols); | ||||
|     for (int32_t i = 0; i < d_bits_per_preamble; i++) | ||||
|         { | ||||
|             switch (d_frame_type) | ||||
| @@ -184,24 +181,18 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( | ||||
|     int32_t max_states = 1U << static_cast<uint32_t>(mm);  // 2^mm | ||||
|     g_encoder[0] = 121;                                    // Polynomial G1 | ||||
|     g_encoder[1] = 91;                                     // Polynomial G2 | ||||
|     out0 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     out1 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     state0 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     state1 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     out0.reserve(max_states); | ||||
|     out1.reserve(max_states); | ||||
|     state0.reserve(max_states); | ||||
|     state1.reserve(max_states); | ||||
|     // create appropriate transition matrices | ||||
|     nsc_transit(out0, state0, 0, g_encoder, KK, nn); | ||||
|     nsc_transit(out1, state1, 1, g_encoder, KK, nn); | ||||
|     nsc_transit(out0.data(), state0.data(), 0, g_encoder.data(), KK, nn); | ||||
|     nsc_transit(out1.data(), state1.data(), 1, g_encoder.data(), KK, nn); | ||||
| } | ||||
|  | ||||
|  | ||||
| galileo_telemetry_decoder_gs::~galileo_telemetry_decoder_gs() | ||||
| { | ||||
|     volk_gnsssdr_free(d_preamble_samples); | ||||
|     volk_gnsssdr_free(d_page_part_symbols); | ||||
|     volk_gnsssdr_free(out0); | ||||
|     volk_gnsssdr_free(out1); | ||||
|     volk_gnsssdr_free(state0); | ||||
|     volk_gnsssdr_free(state1); | ||||
|     if (d_dump_file.is_open() == true) | ||||
|         { | ||||
|             try | ||||
| @@ -218,7 +209,7 @@ galileo_telemetry_decoder_gs::~galileo_telemetry_decoder_gs() | ||||
|  | ||||
| void galileo_telemetry_decoder_gs::viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits) | ||||
| { | ||||
|     Viterbi(page_part_bits, out0, state0, out1, state1, | ||||
|     Viterbi(page_part_bits, out0.data(), state0.data(), out1.data(), state1.data(), | ||||
|         page_part_symbols, KK, nn, DataLength); | ||||
| } | ||||
|  | ||||
| @@ -238,8 +229,8 @@ void galileo_telemetry_decoder_gs::deinterleaver(int32_t rows, int32_t cols, con | ||||
| void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, int32_t frame_length) | ||||
| { | ||||
|     // 1. De-interleave | ||||
|     auto *page_part_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment())); | ||||
|     deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint); | ||||
|     std::vector<double> page_part_symbols_deint(frame_length); | ||||
|     deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint.data()); | ||||
|  | ||||
|     // 2. Viterbi decoder | ||||
|     // 2.1 Take into account the NOT gate in G2 polynomial (Galileo ICD Figure 13, FEC encoder) | ||||
| @@ -252,9 +243,8 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, i | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     auto *page_part_bits = static_cast<int32_t *>(volk_gnsssdr_malloc((frame_length / 2) * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     viterbi_decoder(page_part_symbols_deint, page_part_bits); | ||||
|     volk_gnsssdr_free(page_part_symbols_deint); | ||||
|     std::vector<int32_t> page_part_bits(frame_length / 2); | ||||
|     viterbi_decoder(page_part_symbols_deint.data(), page_part_bits.data()); | ||||
|  | ||||
|     // 3. Call the Galileo page decoder | ||||
|     std::string page_String; | ||||
| @@ -290,7 +280,6 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, i | ||||
|             d_inav_nav.split_page(page_String, flag_even_word_arrived); | ||||
|             flag_even_word_arrived = 1; | ||||
|         } | ||||
|     volk_gnsssdr_free(page_part_bits); | ||||
|  | ||||
|     // 4. Push the new navigation data to the queues | ||||
|     if (d_inav_nav.have_new_ephemeris() == true) | ||||
| @@ -332,8 +321,8 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, i | ||||
| void galileo_telemetry_decoder_gs::decode_FNAV_word(double *page_symbols, int32_t frame_length) | ||||
| { | ||||
|     // 1. De-interleave | ||||
|     auto *page_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment())); | ||||
|     deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint); | ||||
|     std::vector<double> page_symbols_deint(frame_length); | ||||
|     deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint.data()); | ||||
|  | ||||
|     // 2. Viterbi decoder | ||||
|     // 2.1 Take into account the NOT gate in G2 polynomial (Galileo ICD Figure 13, FEC encoder) | ||||
| @@ -345,9 +334,8 @@ void galileo_telemetry_decoder_gs::decode_FNAV_word(double *page_symbols, int32_ | ||||
|                     page_symbols_deint[i] = -page_symbols_deint[i]; | ||||
|                 } | ||||
|         } | ||||
|     auto *page_bits = static_cast<int32_t *>(volk_gnsssdr_malloc((frame_length / 2) * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     viterbi_decoder(page_symbols_deint, page_bits); | ||||
|     volk_gnsssdr_free(page_symbols_deint); | ||||
|     std::vector<int32_t> page_bits(frame_length / 2); | ||||
|     viterbi_decoder(page_symbols_deint.data(), page_bits.data()); | ||||
|  | ||||
|     // 3. Call the Galileo page decoder | ||||
|     std::string page_String; | ||||
| @@ -362,7 +350,6 @@ void galileo_telemetry_decoder_gs::decode_FNAV_word(double *page_symbols, int32_ | ||||
|                     page_String.push_back('0'); | ||||
|                 } | ||||
|         } | ||||
|     volk_gnsssdr_free(page_bits); | ||||
|  | ||||
|     // DECODE COMPLETE WORD (even + odd) and TEST CRC | ||||
|     d_fnav_nav.split_page(page_String); | ||||
| @@ -594,7 +581,7 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__(( | ||||
|                                                 d_page_part_symbols[i] = -d_symbol_history.at(i + d_samples_per_preamble);  // because last symbol of the preamble is just received now! | ||||
|                                             } | ||||
|                                     } | ||||
|                                 decode_INAV_word(d_page_part_symbols, d_frame_length_symbols); | ||||
|                                 decode_INAV_word(d_page_part_symbols.data(), d_frame_length_symbols); | ||||
|                                 break; | ||||
|                             case 2:  // FNAV | ||||
|                                      // NEW Galileo page part is received | ||||
| @@ -619,7 +606,7 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__(( | ||||
|                                                     } | ||||
|                                             } | ||||
|                                     } | ||||
|                                 decode_FNAV_word(d_page_part_symbols, d_frame_length_symbols); | ||||
|                                 decode_FNAV_word(d_page_part_symbols.data(), d_frame_length_symbols); | ||||
|                                 break; | ||||
|                             default: | ||||
|                                 return -1; | ||||
|   | ||||
| @@ -43,6 +43,8 @@ | ||||
| #include <cstdint> | ||||
| #include <fstream> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include <array> | ||||
|  | ||||
| class galileo_telemetry_decoder_gs; | ||||
|  | ||||
| @@ -84,11 +86,11 @@ private: | ||||
|     int32_t d_bits_per_preamble; | ||||
|     int32_t d_samples_per_preamble; | ||||
|     int32_t d_preamble_period_symbols; | ||||
|     int32_t *d_preamble_samples; | ||||
|     std::vector<int32_t> d_preamble_samples; | ||||
|     uint32_t d_PRN_code_period_ms; | ||||
|     uint32_t d_required_symbols; | ||||
|     uint32_t d_frame_length_symbols; | ||||
|     double *d_page_part_symbols; | ||||
|     std::vector<double> d_page_part_symbols; | ||||
|  | ||||
|     boost::circular_buffer<float> d_symbol_history; | ||||
|  | ||||
| @@ -124,8 +126,11 @@ private: | ||||
|     std::ofstream d_dump_file; | ||||
|  | ||||
|     // vars for Viterbi decoder | ||||
|     int32_t *out0, *out1, *state0, *state1; | ||||
|     int32_t g_encoder[2]{}; | ||||
|     std::vector<int32_t> out0; | ||||
|     std::vector<int32_t> out1; | ||||
|     std::vector<int32_t> state0; | ||||
|     std::vector<int32_t> state1; | ||||
|     std::array<int32_t,2> g_encoder{}; | ||||
|     const int32_t nn = 2;  // Coding rate 1/n | ||||
|     const int32_t KK = 7;  // Constraint Length | ||||
|     int32_t mm = KK - 1; | ||||
|   | ||||
| @@ -38,10 +38,8 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <array> | ||||
| #include <cmath>            // for floor, round | ||||
| #include <cstdlib>    // for abs, malloc | ||||
| #include <cstring>    // for memcpy | ||||
| #include <cstdlib>          // for abs | ||||
| #include <exception>        // for exception | ||||
| #include <iostream>         // for cout | ||||
| #include <memory>           // for shared_ptr, make_shared | ||||
| @@ -71,19 +69,8 @@ glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs( | ||||
|     d_dump = dump; | ||||
|     d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); | ||||
|     LOG(INFO) << "Initializing GLONASS L1 CA TELEMETRY DECODING"; | ||||
|     // Define the number of sampes per symbol. Notice that GLONASS has 2 rates, | ||||
|     // one for the navigation data and the other for the preamble information | ||||
|     d_samples_per_symbol = (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS) / GLONASS_L1_CA_SYMBOL_RATE_BPS; | ||||
|  | ||||
|     // Set the preamble information | ||||
|     std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> preambles_bits{GLONASS_GNAV_PREAMBLE}; | ||||
|     // Since preamble rate is different than navigation data rate we use a constant | ||||
|     d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|  | ||||
|     memcpy(static_cast<uint16_t *>(this->d_preambles_bits), preambles_bits.data(), GLONASS_GNAV_PREAMBLE_LENGTH_BITS * sizeof(uint16_t)); | ||||
|  | ||||
|     // preamble bits to sampled symbols | ||||
|     d_preambles_symbols = static_cast<int32_t *>(malloc(sizeof(int32_t) * d_symbols_per_preamble)); | ||||
|     int32_t n = 0; | ||||
|     for (uint16_t d_preambles_bit : d_preambles_bits) | ||||
|         { | ||||
| @@ -120,7 +107,6 @@ glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs( | ||||
|  | ||||
| glonass_l1_ca_telemetry_decoder_gs::~glonass_l1_ca_telemetry_decoder_gs() | ||||
| { | ||||
|     delete d_preambles_symbols; | ||||
|     if (d_dump_file.is_open() == true) | ||||
|         { | ||||
|             try | ||||
|   | ||||
| @@ -41,6 +41,7 @@ | ||||
| #include <boost/shared_ptr.hpp>  // for boost::shared_ptr | ||||
| #include <gnuradio/block.h>      // for block | ||||
| #include <gnuradio/types.h>      // for gr_vector_const_void_star | ||||
| #include <array> | ||||
| #include <cstdint> | ||||
| #include <fstream>  // for ofstream | ||||
| #include <string> | ||||
| @@ -50,7 +51,9 @@ class glonass_l1_ca_telemetry_decoder_gs; | ||||
|  | ||||
| using glonass_l1_ca_telemetry_decoder_gs_sptr = boost::shared_ptr<glonass_l1_ca_telemetry_decoder_gs>; | ||||
|  | ||||
| glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump); | ||||
| glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs( | ||||
|     const Gnss_Satellite &satellite, | ||||
|     bool dump); | ||||
|  | ||||
| /*! | ||||
|  * \brief This class implements a block that decodes the GNAV data defined in GLONASS ICD v5.1 | ||||
| @@ -75,43 +78,45 @@ public: | ||||
|         gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); | ||||
|  | ||||
| private: | ||||
|     friend glonass_l1_ca_telemetry_decoder_gs_sptr | ||||
|     glonass_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump); | ||||
|     friend glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs( | ||||
|         const Gnss_Satellite &satellite, | ||||
|         bool dump); | ||||
|  | ||||
|     glonass_l1_ca_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump); | ||||
|  | ||||
|     void decode_string(const double *symbols, int32_t frame_length); | ||||
|  | ||||
|     //!< Help with coherent tracking | ||||
|     // Help with coherent tracking | ||||
|     double d_preamble_time_samples; | ||||
|  | ||||
|     //!< Preamble decoding | ||||
|     uint16_t d_preambles_bits[GLONASS_GNAV_PREAMBLE_LENGTH_BITS]{}; | ||||
|     int32_t *d_preambles_symbols; | ||||
|     uint32_t d_samples_per_symbol; | ||||
|     int32_t d_symbols_per_preamble; | ||||
|     // Preamble decoding | ||||
|     const std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> d_preambles_bits{GLONASS_GNAV_PREAMBLE}; | ||||
|     std::array<int32_t, GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS> d_preambles_symbols{}; | ||||
|     uint32_t d_samples_per_symbol = (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS) / GLONASS_L1_CA_SYMBOL_RATE_BPS; | ||||
|     const int32_t d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|  | ||||
|     //!< Storage for incoming data | ||||
|     // Storage for incoming data | ||||
|     boost::circular_buffer<Gnss_Synchro> d_symbol_history; | ||||
|  | ||||
|     //!< Variables for internal functionality | ||||
|     uint64_t d_sample_counter;    //!< Sample counter as an index (1,2,3,..etc) indicating number of samples processed | ||||
|     uint64_t d_preamble_index;    //!< Index of sample number where preamble was found | ||||
|     uint32_t d_stat;              //!< Status of decoder | ||||
|     bool d_flag_frame_sync;       //!< Indicate when a frame sync is achieved | ||||
|     bool d_flag_parity;           //!< Flag indicating when parity check was achieved (crc check) | ||||
|     bool d_flag_preamble;         //!< Flag indicating when preamble was found | ||||
|     int32_t d_CRC_error_counter;  //!< Number of failed CRC operations | ||||
|     bool flag_TOW_set;            //!< Indicates when time of week is set | ||||
|     double delta_t;               //!< GPS-GLONASS time offset | ||||
|     // Variables for internal functionality | ||||
|     uint64_t d_sample_counter;    // Sample counter as an index (1,2,3,..etc) indicating number of samples processed | ||||
|     uint64_t d_preamble_index;    // Index of sample number where preamble was found | ||||
|     uint32_t d_stat;              // Status of decoder | ||||
|     bool d_flag_frame_sync;       // Indicate when a frame sync is achieved | ||||
|     bool d_flag_parity;           // Flag indicating when parity check was achieved (crc check) | ||||
|     bool d_flag_preamble;         // Flag indicating when preamble was found | ||||
|     int32_t d_CRC_error_counter;  // Number of failed CRC operations | ||||
|     bool flag_TOW_set;            // Indicates when time of week is set | ||||
|     double delta_t;               // GPS-GLONASS time offset | ||||
|  | ||||
|     //!< Navigation Message variable | ||||
|     // Navigation Message variable | ||||
|     Glonass_Gnav_Navigation_Message d_nav; | ||||
|  | ||||
|     //!< Values to populate gnss synchronization structure | ||||
|     // Values to populate gnss synchronization structure | ||||
|     double d_TOW_at_current_symbol; | ||||
|     bool Flag_valid_word; | ||||
|  | ||||
|     //!< Satellite Information and logging capacity | ||||
|     // Satellite Information and logging capacity | ||||
|     Gnss_Satellite d_satellite; | ||||
|     int32_t d_channel; | ||||
|     bool d_dump; | ||||
|   | ||||
| @@ -38,10 +38,8 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <array> | ||||
| #include <cmath>            // for floor, round | ||||
| #include <cstdlib>    // for abs, malloc | ||||
| #include <cstring>    // for memcpy | ||||
| #include <cstdlib>          // for abs | ||||
| #include <exception>        // for exception | ||||
| #include <iostream>         // for cout | ||||
| #include <memory>           // for shared_ptr, make_shared | ||||
| @@ -71,19 +69,8 @@ glonass_l2_ca_telemetry_decoder_gs::glonass_l2_ca_telemetry_decoder_gs( | ||||
|     d_dump = dump; | ||||
|     d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); | ||||
|     LOG(INFO) << "Initializing GLONASS L2 CA TELEMETRY DECODING"; | ||||
|     // Define the number of sampes per symbol. Notice that GLONASS has 2 rates, | ||||
|     // one for the navigation data and the other for the preamble information | ||||
|     d_samples_per_symbol = (GLONASS_L2_CA_CODE_RATE_HZ / GLONASS_L2_CA_CODE_LENGTH_CHIPS) / GLONASS_L2_CA_SYMBOL_RATE_BPS; | ||||
|  | ||||
|     // Set the preamble information | ||||
|     std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> preambles_bits{GLONASS_GNAV_PREAMBLE}; | ||||
|     // Since preamble rate is different than navigation data rate we use a constant | ||||
|     d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|  | ||||
|     memcpy(static_cast<uint16_t *>(this->d_preambles_bits), preambles_bits.data(), GLONASS_GNAV_PREAMBLE_LENGTH_BITS * sizeof(uint16_t)); | ||||
|  | ||||
|     // preamble bits to sampled symbols | ||||
|     d_preambles_symbols = static_cast<int32_t *>(malloc(sizeof(int32_t) * d_symbols_per_preamble)); | ||||
|     int32_t n = 0; | ||||
|     for (uint16_t d_preambles_bit : d_preambles_bits) | ||||
|         { | ||||
| @@ -105,9 +92,7 @@ glonass_l2_ca_telemetry_decoder_gs::glonass_l2_ca_telemetry_decoder_gs( | ||||
|     d_sample_counter = 0ULL; | ||||
|     d_stat = 0; | ||||
|     d_preamble_index = 0ULL; | ||||
|  | ||||
|     d_flag_frame_sync = false; | ||||
|  | ||||
|     d_flag_parity = false; | ||||
|     d_TOW_at_current_symbol = 0; | ||||
|     Flag_valid_word = false; | ||||
| @@ -122,7 +107,6 @@ glonass_l2_ca_telemetry_decoder_gs::glonass_l2_ca_telemetry_decoder_gs( | ||||
|  | ||||
| glonass_l2_ca_telemetry_decoder_gs::~glonass_l2_ca_telemetry_decoder_gs() | ||||
| { | ||||
|     delete d_preambles_symbols; | ||||
|     if (d_dump_file.is_open() == true) | ||||
|         { | ||||
|             try | ||||
|   | ||||
| @@ -40,6 +40,7 @@ | ||||
| #include <boost/shared_ptr.hpp>  // for boost::shared_ptr | ||||
| #include <gnuradio/block.h> | ||||
| #include <gnuradio/types.h>  // for gr_vector_const_void_star | ||||
| #include <array> | ||||
| #include <cstdint> | ||||
| #include <fstream> | ||||
| #include <string> | ||||
| @@ -79,37 +80,37 @@ private: | ||||
|  | ||||
|     void decode_string(const double *symbols, int32_t frame_length); | ||||
|  | ||||
|     //!< Help with coherent tracking | ||||
|     // Help with coherent tracking | ||||
|     double d_preamble_time_samples; | ||||
|  | ||||
|     //!< Preamble decoding | ||||
|     uint16_t d_preambles_bits[GLONASS_GNAV_PREAMBLE_LENGTH_BITS]{}; | ||||
|     int32_t *d_preambles_symbols; | ||||
|     uint32_t d_samples_per_symbol; | ||||
|     int32_t d_symbols_per_preamble; | ||||
|     // Preamble decoding | ||||
|     const std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> d_preambles_bits{GLONASS_GNAV_PREAMBLE}; | ||||
|     std::array<int32_t, GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS> d_preambles_symbols{}; | ||||
|     uint32_t d_samples_per_symbol = (GLONASS_L2_CA_CODE_RATE_HZ / GLONASS_L2_CA_CODE_LENGTH_CHIPS) / GLONASS_L2_CA_SYMBOL_RATE_BPS; | ||||
|     const int32_t d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|  | ||||
|     //!< Storage for incoming data | ||||
|     // Storage for incoming data | ||||
|     boost::circular_buffer<Gnss_Synchro> d_symbol_history; | ||||
|  | ||||
|     //!< Variables for internal functionality | ||||
|     uint64_t d_sample_counter;    //!< Sample counter as an index (1,2,3,..etc) indicating number of samples processed | ||||
|     uint64_t d_preamble_index;    //!< Index of sample number where preamble was found | ||||
|     uint32_t d_stat;              //!< Status of decoder | ||||
|     bool d_flag_frame_sync;       //!< Indicate when a frame sync is achieved | ||||
|     bool d_flag_parity;           //!< Flag indicating when parity check was achieved (crc check) | ||||
|     bool d_flag_preamble;         //!< Flag indicating when preamble was found | ||||
|     int32_t d_CRC_error_counter;  //!< Number of failed CRC operations | ||||
|     bool flag_TOW_set;            //!< Indicates when time of week is set | ||||
|     double delta_t;               //!< GPS-GLONASS time offset | ||||
|     // Variables for internal functionality | ||||
|     uint64_t d_sample_counter;    // Sample counter as an index (1,2,3,..etc) indicating number of samples processed | ||||
|     uint64_t d_preamble_index;    // Index of sample number where preamble was found | ||||
|     uint32_t d_stat;              // Status of decoder | ||||
|     bool d_flag_frame_sync;       // Indicate when a frame sync is achieved | ||||
|     bool d_flag_parity;           // Flag indicating when parity check was achieved (crc check) | ||||
|     bool d_flag_preamble;         // Flag indicating when preamble was found | ||||
|     int32_t d_CRC_error_counter;  // Number of failed CRC operations | ||||
|     bool flag_TOW_set;            // Indicates when time of week is set | ||||
|     double delta_t;               // GPS-GLONASS time offset | ||||
|  | ||||
|     //!< Navigation Message variable | ||||
|     // Navigation Message variable | ||||
|     Glonass_Gnav_Navigation_Message d_nav; | ||||
|  | ||||
|     //!< Values to populate gnss synchronization structure | ||||
|     // Values to populate gnss synchronization structure | ||||
|     double d_TOW_at_current_symbol; | ||||
|     bool Flag_valid_word; | ||||
|  | ||||
|     //!< Satellite Information and logging capacity | ||||
|     // Satellite Information and logging capacity | ||||
|     Gnss_Satellite d_satellite; | ||||
|     int32_t d_channel; | ||||
|     bool d_dump; | ||||
|   | ||||
| @@ -37,8 +37,6 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath>            // for round | ||||
| #include <cstring>          // for memcpy | ||||
| #include <exception>        // for exception | ||||
| @@ -73,7 +71,6 @@ gps_l1_ca_telemetry_decoder_gs::gps_l1_ca_telemetry_decoder_gs( | ||||
|     d_last_valid_preamble = 0; | ||||
|     d_sent_tlm_failed_msg = false; | ||||
|  | ||||
|  | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); | ||||
| @@ -85,7 +82,6 @@ gps_l1_ca_telemetry_decoder_gs::gps_l1_ca_telemetry_decoder_gs( | ||||
|     // set the preamble | ||||
|     d_required_symbols = GPS_SUBFRAME_BITS; | ||||
|     // preamble bits to sampled symbols | ||||
|     d_preamble_samples = static_cast<int32_t *>(volk_gnsssdr_malloc(d_samples_per_preamble * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     d_frame_length_symbols = GPS_SUBFRAME_BITS * GPS_CA_TELEMETRY_SYMBOLS_PER_BIT; | ||||
|     d_max_symbols_without_valid_frame = d_required_symbols * 20;  // rise alarm 120 segs without valid tlm | ||||
|     int32_t n = 0; | ||||
| @@ -123,7 +119,6 @@ gps_l1_ca_telemetry_decoder_gs::gps_l1_ca_telemetry_decoder_gs( | ||||
|  | ||||
| gps_l1_ca_telemetry_decoder_gs::~gps_l1_ca_telemetry_decoder_gs() | ||||
| { | ||||
|     volk_gnsssdr_free(d_preamble_samples); | ||||
|     if (d_dump_file.is_open() == true) | ||||
|         { | ||||
|             try | ||||
|   | ||||
| @@ -39,6 +39,7 @@ | ||||
| #include <boost/shared_ptr.hpp>  // for boost::shared_ptr | ||||
| #include <gnuradio/block.h>      // for block | ||||
| #include <gnuradio/types.h>      // for gr_vector_const_void_star | ||||
| #include <array>                 // for array | ||||
| #include <cstdint>               // for int32_t | ||||
| #include <fstream>               // for ofstream | ||||
| #include <string>                // for string | ||||
| @@ -80,7 +81,7 @@ private: | ||||
|     int32_t d_bits_per_preamble; | ||||
|     int32_t d_samples_per_preamble; | ||||
|     int32_t d_preamble_period_symbols; | ||||
|     int32_t *d_preamble_samples; | ||||
|     std::array<int32_t, GPS_CA_PREAMBLE_LENGTH_BITS> d_preamble_samples; | ||||
|     uint32_t d_required_symbols; | ||||
|     uint32_t d_frame_length_symbols; | ||||
|     bool flag_PLL_180_deg_phase_locked; | ||||
|   | ||||
| @@ -33,13 +33,13 @@ | ||||
| #include "fec.h" | ||||
| #include <stdlib.h> | ||||
|  | ||||
| static inline int parity(int x) | ||||
| static inline unsigned int parity(unsigned int x) | ||||
| { | ||||
|     x ^= x >> 16; | ||||
|     x ^= x >> 8; | ||||
|     x ^= x >> 4; | ||||
|     x &= 0xf; | ||||
|     return (0x6996 >> x) & 1; | ||||
|     x ^= x >> 16U; | ||||
|     x ^= x >> 8U; | ||||
|     x ^= x >> 4U; | ||||
|     x &= 0xFU; | ||||
|     return (0x6996U >> x) & 1U; | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -101,12 +101,12 @@ void v27_init(v27_t *v, v27_decision_t *decisions, unsigned int decisions_count, | ||||
|         m1 = v->old_metrics[(i) + 32] + (510 - metric);             \ | ||||
|         decision = (signed int)(m0 - m1) > 0;                       \ | ||||
|         v->new_metrics[2 * (i)] = decision ? m1 : m0;               \ | ||||
|         d->w[(i) / 16] |= decision << ((2 * (i)) & 31);             \ | ||||
|         d->w[(i) / 16] |= decision << ((2U * (i)) & 31U);           \ | ||||
|         m0 -= (metric + metric - 510);                              \ | ||||
|         m1 += (metric + metric - 510);                              \ | ||||
|         decision = (signed int)(m0 - m1) > 0;                       \ | ||||
|         v->new_metrics[2 * (i) + 1] = decision ? m1 : m0;           \ | ||||
|         d->w[(i) / 16] |= decision << ((2 * (i) + 1) & 31);         \ | ||||
|         d->w[(i) / 16] |= decision << ((2U * (i) + 1U) & 31U);      \ | ||||
|     } | ||||
|  | ||||
| /** Update a v27_t decoder with a block of symbols. | ||||
| @@ -130,44 +130,44 @@ void v27_update(v27_t *v, const unsigned char *syms, int nbits) | ||||
|             sym0 = *syms++; | ||||
|             sym1 = *syms++; | ||||
|  | ||||
|             BFLY(0); | ||||
|             BFLY(1); | ||||
|             BFLY(2); | ||||
|             BFLY(3); | ||||
|             BFLY(4); | ||||
|             BFLY(5); | ||||
|             BFLY(6); | ||||
|             BFLY(7); | ||||
|             BFLY(8); | ||||
|             BFLY(9); | ||||
|             BFLY(10); | ||||
|             BFLY(11); | ||||
|             BFLY(12); | ||||
|             BFLY(13); | ||||
|             BFLY(14); | ||||
|             BFLY(15); | ||||
|             BFLY(16); | ||||
|             BFLY(17); | ||||
|             BFLY(18); | ||||
|             BFLY(19); | ||||
|             BFLY(20); | ||||
|             BFLY(21); | ||||
|             BFLY(22); | ||||
|             BFLY(23); | ||||
|             BFLY(24); | ||||
|             BFLY(25); | ||||
|             BFLY(26); | ||||
|             BFLY(27); | ||||
|             BFLY(28); | ||||
|             BFLY(29); | ||||
|             BFLY(30); | ||||
|             BFLY(31); | ||||
|             BFLY(0U); | ||||
|             BFLY(1U); | ||||
|             BFLY(2U); | ||||
|             BFLY(3U); | ||||
|             BFLY(4U); | ||||
|             BFLY(5U); | ||||
|             BFLY(6U); | ||||
|             BFLY(7U); | ||||
|             BFLY(8U); | ||||
|             BFLY(9U); | ||||
|             BFLY(10U); | ||||
|             BFLY(11U); | ||||
|             BFLY(12U); | ||||
|             BFLY(13U); | ||||
|             BFLY(14U); | ||||
|             BFLY(15U); | ||||
|             BFLY(16U); | ||||
|             BFLY(17U); | ||||
|             BFLY(18U); | ||||
|             BFLY(19U); | ||||
|             BFLY(20U); | ||||
|             BFLY(21U); | ||||
|             BFLY(22U); | ||||
|             BFLY(23U); | ||||
|             BFLY(24U); | ||||
|             BFLY(25U); | ||||
|             BFLY(26U); | ||||
|             BFLY(27U); | ||||
|             BFLY(28U); | ||||
|             BFLY(29U); | ||||
|             BFLY(30U); | ||||
|             BFLY(31U); | ||||
|  | ||||
|             /* Normalize metrics if they are nearing overflow */ | ||||
|             if (v->new_metrics[0] > (1 << 30)) | ||||
|             if (v->new_metrics[0] > (1U << 30U)) | ||||
|                 { | ||||
|                     int i; | ||||
|                     unsigned int minmetric = 1 << 31; | ||||
|                     unsigned int minmetric = 1U << 31U; | ||||
|  | ||||
|                     for (i = 0; i < 64; i++) | ||||
|                         { | ||||
| @@ -210,11 +210,11 @@ void v27_update(v27_t *v, const unsigned char *syms, int nbits) | ||||
| void v27_chainback_fixed(v27_t *v, unsigned char *data, unsigned int nbits, | ||||
|     unsigned char final_state) | ||||
| { | ||||
|     int k; | ||||
|     unsigned int k; | ||||
|     unsigned int decisions_index = v->decisions_index; | ||||
|  | ||||
|     final_state %= 64; | ||||
|     final_state <<= 2; | ||||
|     final_state <<= 2U; | ||||
|  | ||||
|     while (nbits-- != 0) | ||||
|         { | ||||
| @@ -222,12 +222,12 @@ void v27_chainback_fixed(v27_t *v, unsigned char *data, unsigned int nbits, | ||||
|             decisions_index = (decisions_index == 0) ? v->decisions_count - 1 : decisions_index - 1; | ||||
|  | ||||
|             v27_decision_t *d = &v->decisions[decisions_index]; | ||||
|             k = (d->w[(final_state >> 2) / 32] >> ((final_state >> 2) % 32)) & 1; | ||||
|             k = (d->w[(final_state >> 2U) / 32] >> ((final_state >> 2U) % 32)) & 1U; | ||||
|             /* The store into data[] only needs to be done every 8 bits. | ||||
|              * But this avoids a conditional branch, and the writes will | ||||
|              * combine in the cache anyway | ||||
|              */ | ||||
|             data[nbits >> 3] = final_state = (final_state >> 1) | (k << 7); | ||||
|             data[nbits >> 3U] = final_state = (final_state >> 1U) | (k << 7U); | ||||
|         } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -51,17 +51,17 @@ Viterbi_Decoder::Viterbi_Decoder(const int g_encoder[], const int KK, const int | ||||
|  | ||||
|     // derived code properties | ||||
|     d_mm = d_KK - 1; | ||||
|     d_states = 1 << d_mm;         /* 2^mm */ | ||||
|     d_number_symbols = 1 << d_nn; /* 2^nn */ | ||||
|     d_states = 1U << d_mm;         /* 2^mm */ | ||||
|     d_number_symbols = 1U << d_nn; /* 2^nn */ | ||||
|  | ||||
|     /* create appropriate transition matrices (trellis) */ | ||||
|     d_out0 = new int[d_states]; | ||||
|     d_out1 = new int[d_states]; | ||||
|     d_state0 = new int[d_states]; | ||||
|     d_state1 = new int[d_states]; | ||||
|     d_out0.reserve(d_states); | ||||
|     d_out1.reserve(d_states); | ||||
|     d_state0.reserve(d_states); | ||||
|     d_state1.reserve(d_states); | ||||
|  | ||||
|     nsc_transit(d_out0, d_state0, 0, g_encoder, d_KK, d_nn); | ||||
|     nsc_transit(d_out1, d_state1, 1, g_encoder, d_KK, d_nn); | ||||
|     nsc_transit(d_out0.data(), d_state0.data(), 0, g_encoder, d_KK, d_nn); | ||||
|     nsc_transit(d_out1.data(), d_state1.data(), 1, g_encoder, d_KK, d_nn); | ||||
|  | ||||
|     // initialise trellis state | ||||
|     d_trellis_state_is_initialised = false; | ||||
| @@ -69,21 +69,6 @@ Viterbi_Decoder::Viterbi_Decoder(const int g_encoder[], const int KK, const int | ||||
| } | ||||
|  | ||||
|  | ||||
| Viterbi_Decoder::~Viterbi_Decoder() | ||||
| { | ||||
|     // trellis definition | ||||
|     delete[] d_out0; | ||||
|     delete[] d_out1; | ||||
|     delete[] d_state0; | ||||
|     delete[] d_state1; | ||||
|  | ||||
|     // init trellis state | ||||
|     delete[] d_pm_t; | ||||
|     delete[] d_rec_array; | ||||
|     delete[] d_metric_c; | ||||
| } | ||||
|  | ||||
|  | ||||
| void Viterbi_Decoder::reset() | ||||
| { | ||||
|     init_trellis_state(); | ||||
| @@ -153,16 +138,16 @@ void Viterbi_Decoder::init_trellis_state() | ||||
|     if (d_trellis_state_is_initialised) | ||||
|         { | ||||
|             // init trellis state | ||||
|             delete[] d_pm_t; | ||||
|             delete[] d_rec_array; | ||||
|             delete[] d_metric_c; | ||||
|             d_pm_t.clear(); | ||||
|             d_rec_array.clear(); | ||||
|             d_metric_c.clear(); | ||||
|         } | ||||
|  | ||||
|     // reserve new trellis state memory | ||||
|     d_pm_t = new float[d_states]; | ||||
|     d_pm_t.reserve(d_states); | ||||
|     d_trellis_paths = std::deque<Prev>(); | ||||
|     d_rec_array = new float[d_nn]; | ||||
|     d_metric_c = new float[d_number_symbols]; | ||||
|     d_rec_array.reserve(d_nn); | ||||
|     d_metric_c.reserve(d_number_symbols); | ||||
|     d_trellis_state_is_initialised = true; | ||||
|  | ||||
|     /* initialize trellis */ | ||||
| @@ -182,7 +167,7 @@ int Viterbi_Decoder::do_acs(const double sym[], int nbits) | ||||
|     int t, i, state_at_t; | ||||
|     float metric; | ||||
|     float max_val; | ||||
|     auto* pm_t_next = new float[d_states]; | ||||
|     std::vector<float> pm_t_next(d_states); | ||||
|  | ||||
|     /* t: | ||||
|      *    - state: state at t | ||||
| @@ -208,7 +193,7 @@ int Viterbi_Decoder::do_acs(const double sym[], int nbits) | ||||
|             /* precompute all possible branch metrics */ | ||||
|             for (i = 0; i < d_number_symbols; i++) | ||||
|                 { | ||||
|                     d_metric_c[i] = gamma(d_rec_array, i, d_nn); | ||||
|                     d_metric_c[i] = gamma(d_rec_array.data(), i, d_nn); | ||||
|                     VLOG(LMORE) << "metric for (tx_sym=" << i << "|ry_sym=(" << d_rec_array[0] << ", " << d_rec_array[1] << ") = " << d_metric_c[i]; | ||||
|                 } | ||||
|  | ||||
| @@ -267,8 +252,6 @@ int Viterbi_Decoder::do_acs(const double sym[], int nbits) | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     delete[] pm_t_next; | ||||
|  | ||||
|     return t; | ||||
| } | ||||
|  | ||||
| @@ -362,16 +345,15 @@ float Viterbi_Decoder::gamma(const float rec_array[], int symbol, int nn) | ||||
| { | ||||
|     float rm = 0; | ||||
|     int i; | ||||
|     int mask; | ||||
|     unsigned int mask = 1U; | ||||
|     float txsym; | ||||
|  | ||||
|     mask = 1; | ||||
|     for (i = 0; i < nn; i++) | ||||
|         { | ||||
|             //if (symbol & mask) rm += rec_array[nn - i - 1]; | ||||
|             txsym = symbol & mask ? 1 : -1; | ||||
|             rm += txsym * rec_array[nn - i - 1]; | ||||
|             mask = mask << 1; | ||||
|             mask = mask << 1U; | ||||
|         } | ||||
|     //rm = rm > 50 ? rm : -1000; | ||||
|  | ||||
| @@ -384,7 +366,7 @@ void Viterbi_Decoder::nsc_transit(int output_p[], int trans_p[], int input, cons | ||||
| { | ||||
|     int nextstate[1]; | ||||
|     int state, states; | ||||
|     states = (1 << (KK - 1)); /* The number of states: 2^mm */ | ||||
|     states = (1U << (KK - 1)); /* The number of states: 2^mm */ | ||||
|  | ||||
|     /* Determine the output and next state for each possible starting state */ | ||||
|     for (state = 0; state < states; state++) | ||||
| @@ -452,11 +434,11 @@ int Viterbi_Decoder::nsc_enc_bit(int state_out_p[], int input, int state_in, | ||||
| int Viterbi_Decoder::parity_counter(int symbol, int length) | ||||
| { | ||||
|     int counter; | ||||
|     int temp_parity = 0; | ||||
|     unsigned int temp_parity = 0; | ||||
|     for (counter = 0; counter < length; counter++) | ||||
|         { | ||||
|             temp_parity = temp_parity ^ (symbol & 1); | ||||
|             symbol = symbol >> 1; | ||||
|             temp_parity = temp_parity ^ (symbol & 1U); | ||||
|             symbol = symbol >> 1U; | ||||
|         } | ||||
|     return (temp_parity); | ||||
| } | ||||
|   | ||||
| @@ -34,6 +34,7 @@ | ||||
|  | ||||
| #include <cstddef>  // for size_t | ||||
| #include <deque> | ||||
| #include <vector> | ||||
|  | ||||
| /*! | ||||
|  * \brief Class that implements a Viterbi decoder | ||||
| @@ -42,7 +43,7 @@ class Viterbi_Decoder | ||||
| { | ||||
| public: | ||||
|     Viterbi_Decoder(const int g_encoder[], const int KK, const int nn); | ||||
|     ~Viterbi_Decoder(); | ||||
|     ~Viterbi_Decoder() = default; | ||||
|     void reset(); | ||||
|  | ||||
|     /*! | ||||
| @@ -94,16 +95,16 @@ private: | ||||
|     int d_number_symbols; | ||||
|  | ||||
|     // trellis definition | ||||
|     int* d_out0; | ||||
|     int* d_state0; | ||||
|     int* d_out1; | ||||
|     int* d_state1; | ||||
|     std::vector<int> d_out0; | ||||
|     std::vector<int> d_state0; | ||||
|     std::vector<int> d_out1; | ||||
|     std::vector<int> d_state1; | ||||
|  | ||||
|     // trellis state | ||||
|     float* d_pm_t; | ||||
|     std::vector<float> d_pm_t; | ||||
|     std::deque<Prev> d_trellis_paths; | ||||
|     float* d_metric_c;  /* Set of all possible branch metrics */ | ||||
|     float* d_rec_array; /* Received values for one trellis section */ | ||||
|     std::vector<float> d_metric_c;  /* Set of all possible branch metrics */ | ||||
|     std::vector<float> d_rec_array; /* Received values for one trellis section */ | ||||
|     bool d_trellis_state_is_initialised; | ||||
|  | ||||
|     // measures | ||||
|   | ||||
| @@ -542,19 +542,11 @@ void dll_pll_veml_tracking::msg_handler_telemetry_to_trk(const pmt::pmt_t &msg) | ||||
|                     int tlm_event; | ||||
|                     tlm_event = boost::any_cast<int>(pmt::any_ref(msg)); | ||||
|  | ||||
|                     switch (tlm_event) | ||||
|                         { | ||||
|                         case 1:  // tlm fault in current channel | ||||
|                     if (tlm_event == 1) | ||||
|                         { | ||||
|                             DLOG(INFO) << "Telemetry fault received in ch " << this->d_channel; | ||||
|                             gr::thread::scoped_lock lock(d_setlock); | ||||
|                             d_carrier_lock_fail_counter = 200000;  //force loss-of-lock condition | ||||
|                                 break; | ||||
|                             } | ||||
|                         default: | ||||
|                             { | ||||
|                                 break; | ||||
|                             } | ||||
|                         } | ||||
|                 } | ||||
|         } | ||||
|   | ||||
| @@ -446,6 +446,7 @@ dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga & | ||||
|     d_sample_counter_next = 0ULL; | ||||
| } | ||||
|  | ||||
|  | ||||
| void dll_pll_veml_tracking_fpga::msg_handler_telemetry_to_trk(const pmt::pmt_t &msg) | ||||
| { | ||||
|     try | ||||
| @@ -455,20 +456,13 @@ void dll_pll_veml_tracking_fpga::msg_handler_telemetry_to_trk(const pmt::pmt_t & | ||||
|                     int tlm_event; | ||||
|                     tlm_event = boost::any_cast<int>(pmt::any_ref(msg)); | ||||
|  | ||||
|                     switch (tlm_event) | ||||
|                         { | ||||
|                         case 1:  //tlm fault in current channel | ||||
|                     if (tlm_event == 1) | ||||
|                         { | ||||
|                             DLOG(INFO) << "Telemetry fault received in ch " << this->d_channel; | ||||
|                             gr::thread::scoped_lock lock(d_setlock); | ||||
|                             d_carrier_lock_fail_counter = 10000;  //force loss-of-lock condition | ||||
|                             break; | ||||
|                         } | ||||
|                         default: | ||||
|                             { | ||||
|                                 break; | ||||
|                             } | ||||
|                         } | ||||
|                 } | ||||
|         } | ||||
|     catch (boost::bad_any_cast &e) | ||||
|   | ||||
| @@ -46,13 +46,11 @@ const double BEIDOU_DNAV_F = -4.442807309e-10;            //!< Constant, [s/(m)^ | ||||
|  | ||||
| const int32_t BEIDOU_DNAV_PREAMBLE_LENGTH_BITS = 11; | ||||
| const int32_t BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS = 11;  // ************** | ||||
| const double BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS = 300; | ||||
| const double BEIDOU_DNAV_SUBFRAME_SYMBOLS = 300; | ||||
| const int32_t BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS = 300; | ||||
| const uint32_t BEIDOU_DNAV_SUBFRAME_SYMBOLS = 300; | ||||
| const int32_t BEIDOU_DNAV_SUBFRAME_DATA_BITS = 300;  //!< Number of bits per subframe in the NAV message [bits] | ||||
| const double BEIDOU_DNAV_WORDS_SUBFRAME = 10; | ||||
| const double BEIDOU_DNAV_WORD_LENGTH_BITS = 30; | ||||
| const double BEIDOU_D1NAV_SYMBOL_RATE_SPS = 50; | ||||
| const double BEIDOU_D2NAV_SYMBOL_RATE_SPS = 500; | ||||
| const uint32_t BEIDOU_DNAV_WORDS_SUBFRAME = 10; | ||||
| const uint32_t BEIDOU_DNAV_WORD_LENGTH_BITS = 30; | ||||
| const std::string BEIDOU_DNAV_PREAMBLE = "11100010010"; | ||||
|  | ||||
| // Number of leap seconds passed from the start of the GPS epoch up to the start of BeiDou epoch | ||||
|   | ||||
| @@ -256,10 +256,10 @@ uint64_t Beidou_Dnav_Navigation_Message::read_navigation_unsigned( | ||||
|         { | ||||
|             for (int32_t j = 0; j < parameter[i].second; j++) | ||||
|                 { | ||||
|                     value <<= 1;  //shift left | ||||
|                     value <<= 1U;  // shift left | ||||
|                     if (bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - parameter[i].first - j] == 1) | ||||
|                         { | ||||
|                             value += 1;  // insert the bit | ||||
|                             value += 1U;  // insert the bit | ||||
|                         } | ||||
|                 } | ||||
|         } | ||||
| @@ -544,7 +544,7 @@ int32_t Beidou_Dnav_Navigation_Message::d1_subframe_decoder(std::string const& s | ||||
|             d_sqrt_A = d_sqrt_A * D1_SQRT_A_LSB; | ||||
|  | ||||
|             d_Toe_sf2 = static_cast<double>(read_navigation_unsigned(subframe_bits, D1_TOE_SF2)); | ||||
|             d_Toe_sf2 = static_cast<double>((static_cast<int>(d_Toe_sf2) << 15)); | ||||
|             d_Toe_sf2 = static_cast<double>((static_cast<uint32_t>(d_Toe_sf2) << 15U)); | ||||
|  | ||||
|             // Set system flags for message reception | ||||
|             flag_d1_sf2 = true; | ||||
| @@ -800,7 +800,7 @@ int32_t Beidou_Dnav_Navigation_Message::d2_subframe_decoder(std::string const& s | ||||
|                     d_A_f0 = static_cast<double>(read_navigation_signed(subframe_bits, D2_A0)) * D1_A0_LSB; | ||||
|                     d_A_f1_msb_bits = (read_navigation_unsigned(subframe_bits, D2_A1_MSB)); | ||||
|                     // Adjust for lsb in next page | ||||
|                     d_A_f1_msb_bits = d_A_f1_msb_bits << 18; | ||||
|                     d_A_f1_msb_bits = d_A_f1_msb_bits << 18ULL; | ||||
|  | ||||
|                     // Set system flags for message reception | ||||
|                     flag_sf1_p3 = true; | ||||
| @@ -815,7 +815,7 @@ int32_t Beidou_Dnav_Navigation_Message::d2_subframe_decoder(std::string const& s | ||||
|                     d_Delta_n = static_cast<double>(read_navigation_signed(subframe_bits, D2_DELTA_N)) * D1_DELTA_N_LSB; | ||||
|                     d_Cuc_msb_bits = (read_navigation_unsigned(subframe_bits, D2_CUC_MSB)); | ||||
|                     // Adjust for lsb in next page | ||||
|                     d_Cuc_msb_bits = d_Cuc_msb_bits << 4; | ||||
|                     d_Cuc_msb_bits = d_Cuc_msb_bits << 4U; | ||||
|  | ||||
|                     // Set system flags for message reception | ||||
|                     flag_sf1_p4 = true; | ||||
| @@ -830,8 +830,8 @@ int32_t Beidou_Dnav_Navigation_Message::d2_subframe_decoder(std::string const& s | ||||
|                     d_eccentricity_msb = static_cast<double>(read_navigation_unsigned(subframe_bits, D2_E_MSB)); | ||||
|                     d_eccentricity_msb_bits = (read_navigation_unsigned(subframe_bits, D2_E_MSB)); | ||||
|                     // Adjust for lsb in next page (shift number of lsb to the left) | ||||
|                     d_eccentricity_msb = static_cast<uint64_t>((static_cast<uint64_t>(d_eccentricity_msb) << 22)); | ||||
|                     d_eccentricity_msb_bits = d_eccentricity_msb_bits << 22; | ||||
|                     d_eccentricity_msb = static_cast<uint64_t>((static_cast<uint64_t>(d_eccentricity_msb) << 22U)); | ||||
|                     d_eccentricity_msb_bits = d_eccentricity_msb_bits << 22U; | ||||
|  | ||||
|                     // Set system flags for message reception | ||||
|                     flag_sf1_p5 = true; | ||||
| @@ -845,7 +845,7 @@ int32_t Beidou_Dnav_Navigation_Message::d2_subframe_decoder(std::string const& s | ||||
|                     d_sqrt_A = static_cast<double>(read_navigation_unsigned(subframe_bits, D2_SQRT_A)) * D1_SQRT_A_LSB; | ||||
|                     d_Cic_msb_bits = (read_navigation_unsigned(subframe_bits, D2_CIC_MSB)); | ||||
|                     // Adjust for lsb in next page (shift number of lsb to the left) | ||||
|                     d_Cic_msb_bits = d_Cic_msb_bits << 8; | ||||
|                     d_Cic_msb_bits = d_Cic_msb_bits << 8U; | ||||
|  | ||||
|                     // Set system flags for message reception | ||||
|                     flag_sf1_p6 = true; | ||||
| @@ -859,7 +859,7 @@ int32_t Beidou_Dnav_Navigation_Message::d2_subframe_decoder(std::string const& s | ||||
|                     d_Toe = static_cast<double>(read_navigation_unsigned(subframe_bits, D2_TOE)) * D1_TOE_LSB; | ||||
|                     d_i_0_msb_bits = (read_navigation_unsigned(subframe_bits, D2_I0_MSB)); | ||||
|                     // Adjust for lsb in next page (shift number of lsb to the left) | ||||
|                     d_i_0_msb_bits = d_i_0_msb_bits << 11; | ||||
|                     d_i_0_msb_bits = d_i_0_msb_bits << 11U; | ||||
|  | ||||
|                     // Set system flags for message reception | ||||
|                     flag_sf1_p7 = true; | ||||
| @@ -873,7 +873,7 @@ int32_t Beidou_Dnav_Navigation_Message::d2_subframe_decoder(std::string const& s | ||||
|                     d_Crs = static_cast<double>(read_navigation_signed(subframe_bits, D2_CRS)) * D1_CRS_LSB; | ||||
|                     d_OMEGA_DOT_msb_bits = (read_navigation_unsigned(subframe_bits, D2_OMEGA_DOT_MSB)); | ||||
|                     // Adjust for lsb in next page (shift number of lsb to the left) | ||||
|                     d_OMEGA_DOT_msb_bits = d_OMEGA_DOT_msb_bits << 5; | ||||
|                     d_OMEGA_DOT_msb_bits = d_OMEGA_DOT_msb_bits << 5ULL; | ||||
|  | ||||
|                     // Set system flags for message reception | ||||
|                     flag_sf1_p8 = true; | ||||
| @@ -886,7 +886,7 @@ int32_t Beidou_Dnav_Navigation_Message::d2_subframe_decoder(std::string const& s | ||||
|                     d_OMEGA0 = static_cast<double>(read_navigation_signed(subframe_bits, D2_OMEGA0)) * D1_OMEGA0_LSB; | ||||
|                     d_OMEGA_msb_bits = (read_navigation_unsigned(subframe_bits, D2_OMEGA_MSB)); | ||||
|                     // Adjust for lsb in next page (shift number of lsb to the left) | ||||
|                     d_OMEGA_msb_bits = d_OMEGA_msb_bits << 5; | ||||
|                     d_OMEGA_msb_bits = d_OMEGA_msb_bits << 5U; | ||||
|  | ||||
|                     // Set system flags for message reception | ||||
|                     flag_sf1_p9 = true; | ||||
|   | ||||
| @@ -439,7 +439,7 @@ uint64_t Galileo_Fnav_Message::read_navigation_unsigned(std::bitset<GALILEO_FNAV | ||||
|         { | ||||
|             for (int j = 0; j < parameter[i].second; j++) | ||||
|                 { | ||||
|                     value <<= 1;  // shift left | ||||
|                     value <<= 1U;  // shift left | ||||
|                     if (static_cast<int>(bits[GALILEO_FNAV_DATA_FRAME_BITS - parameter[i].first - j]) == 1) | ||||
|                         { | ||||
|                             value += 1;  // insert the bit | ||||
|   | ||||
| @@ -266,7 +266,7 @@ uint64_t Galileo_Navigation_Message::read_navigation_unsigned(std::bitset<GALILE | ||||
|         { | ||||
|             for (int32_t j = 0; j < parameter[i].second; j++) | ||||
|                 { | ||||
|                     value <<= 1;  // shift left | ||||
|                     value <<= 1U;  // shift left | ||||
|                     if (static_cast<int>(bits[GALILEO_DATA_JK_BITS - parameter[i].first - j]) == 1) | ||||
|                         { | ||||
|                             value += 1;  // insert the bit | ||||
| @@ -285,7 +285,7 @@ uint64_t Galileo_Navigation_Message::read_page_type_unsigned(std::bitset<GALILEO | ||||
|         { | ||||
|             for (int32_t j = 0; j < parameter[i].second; j++) | ||||
|                 { | ||||
|                     value <<= 1;  // shift left | ||||
|                     value <<= 1U;  // shift left | ||||
|                     if (static_cast<int>(bits[GALILEO_PAGE_TYPE_BITS - parameter[i].first - j]) == 1) | ||||
|                         { | ||||
|                             value += 1ULL;  // insert the bit | ||||
| @@ -965,6 +965,9 @@ int32_t Galileo_Navigation_Message::page_jk_decoder(const char* data_jk) | ||||
|             DLOG(INFO) << "TOW_0= " << TOW_0; | ||||
|             DLOG(INFO) << "flag_tow_set" << flag_TOW_set; | ||||
|             break; | ||||
|  | ||||
|         default: | ||||
|             break; | ||||
|         } | ||||
|     return page_number; | ||||
| } | ||||
|   | ||||
| @@ -111,7 +111,7 @@ Glonass_Gnav_Navigation_Message::Glonass_Gnav_Navigation_Message() | ||||
|  | ||||
| bool Glonass_Gnav_Navigation_Message::CRC_test(std::bitset<GLONASS_GNAV_STRING_BITS> bits) | ||||
| { | ||||
|     int32_t sum_bits = 0; | ||||
|     uint32_t sum_bits = 0; | ||||
|     int32_t sum_hamming = 0; | ||||
|     int32_t C1 = 0; | ||||
|     int32_t C2 = 0; | ||||
| @@ -121,12 +121,12 @@ bool Glonass_Gnav_Navigation_Message::CRC_test(std::bitset<GLONASS_GNAV_STRING_B | ||||
|     int32_t C6 = 0; | ||||
|     int32_t C7 = 0; | ||||
|     int32_t C_Sigma = 0; | ||||
|     std::vector<int32_t> string_bits(GLONASS_GNAV_STRING_BITS); | ||||
|     std::vector<uint32_t> string_bits(GLONASS_GNAV_STRING_BITS); | ||||
|  | ||||
|     // Populate data and hamming code vectors | ||||
|     for (int32_t i = 0; i < static_cast<int32_t>(GLONASS_GNAV_STRING_BITS); i++) | ||||
|     for (int32_t i = 0; i < string_bits.size(); i++) | ||||
|         { | ||||
|             string_bits[i] = static_cast<int32_t>(bits[i]); | ||||
|             string_bits[i] = static_cast<uint32_t>(bits[i]); | ||||
|         } | ||||
|  | ||||
|     // Compute C1 term | ||||
| @@ -239,7 +239,7 @@ uint64_t Glonass_Gnav_Navigation_Message::read_navigation_unsigned(std::bitset<G | ||||
|         { | ||||
|             for (int32_t j = 0; j < parameter[i].second; j++) | ||||
|                 { | ||||
|                     value <<= 1;  // shift left | ||||
|                     value <<= 1ULL;  // shift left | ||||
|                     if (bits[GLONASS_GNAV_STRING_BITS - parameter[i].first - j] == 1) | ||||
|                         { | ||||
|                             value += 1ULL;  // insert the bit | ||||
|   | ||||
| @@ -96,7 +96,7 @@ uint64_t Gps_CNAV_Navigation_Message::read_navigation_unsigned(std::bitset<GPS_C | ||||
|         { | ||||
|             for (int32_t j = 0; j < parameter[i].second; j++) | ||||
|                 { | ||||
|                     value <<= 1;  // shift left | ||||
|                     value <<= 1ULL;  // shift left | ||||
|                     if (static_cast<int>(bits[GPS_CNAV_DATA_PAGE_BITS - parameter[i].first - j]) == 1) | ||||
|                         { | ||||
|                             value += 1ULL;  // insert the bit | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez