diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 160083a7a..ff80de84e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -57,6 +57,8 @@ All notable changes to GNSS-SDR will be documented in this file. - Now the program exits properly if a SIGINT signal is received (_e.g._, the user pressing Ctrl+C, or another user application sending an interruption signal). +- The estimated CN0 value is now printed in the terminal when navigation data is + succesfully decoded. ## [GNSS-SDR v0.0.18](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.18) - 2023-04-06 diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.cc index 1cd4d849a..c8d512ed9 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.cc @@ -33,6 +33,7 @@ #include // for size_t #include // for abs #include // for exception +#include // for setprecision #include // for cout #include // for shared_ptr, make_shared @@ -239,7 +240,7 @@ void beidou_b1i_telemetry_decoder_gs::decode_word( } -void beidou_b1i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) +void beidou_b1i_telemetry_decoder_gs::decode_subframe(float *frame_symbols, double cn0) { // 1. Transform from symbols to bits std::string data_bits; @@ -296,32 +297,49 @@ void beidou_b1i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) // get object for this SV (mandatory) const std::shared_ptr tmp_obj = std::make_shared(d_nav.get_ephemeris()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); - LOG(INFO) << "BEIDOU DNAV Ephemeris have been received in channel" << d_channel << " from satellite " << d_satellite; - std::cout << "New BEIDOU B1I DNAV message received in channel " << d_channel << ": ephemeris from satellite " << d_satellite << '\n'; + LOG(INFO) << "BEIDOU DNAV Ephemeris have been received in channel" << d_channel << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; + const auto default_precision{std::cout.precision()}; + std::cout << "New BEIDOU B1I DNAV message received in channel " << d_channel + << ": ephemeris from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << " dB-Hz" << std::endl; + std::cout << std::setprecision(default_precision); // restore defaults } if (d_nav.have_new_utc_model() == true) { // get object for this SV (mandatory) const std::shared_ptr tmp_obj = std::make_shared(d_nav.get_utc_model()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); - LOG(INFO) << "BEIDOU DNAV UTC Model data have been received in channel" << d_channel << " from satellite " << d_satellite; - std::cout << "New BEIDOU B1I DNAV utc model message received in channel " << d_channel << ": UTC model parameters from satellite " << d_satellite << '\n'; + LOG(INFO) << "BEIDOU DNAV UTC Model data have been received in channel" << d_channel << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; + const auto default_precision{std::cout.precision()}; + std::cout << "New BEIDOU B1I DNAV utc model message received in channel " + << d_channel + << ": UTC model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } if (d_nav.have_new_iono() == true) { // get object for this SV (mandatory) const std::shared_ptr tmp_obj = std::make_shared(d_nav.get_iono()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); - LOG(INFO) << "BEIDOU DNAV Iono data have been received in channel" << d_channel << " from satellite " << d_satellite; - std::cout << "New BEIDOU B1I DNAV Iono message received in channel " << d_channel << ": Iono model parameters from satellite " << d_satellite << '\n'; + LOG(INFO) << "BEIDOU DNAV Iono data have been received in channel" << d_channel << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; + const auto default_precision{std::cout.precision()}; + std::cout << "New BEIDOU B1I DNAV Iono message received in channel " << d_channel + << ": Iono model parameters from satellite " << d_satellite + << " with CN0=" << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } if (d_nav.have_new_almanac() == true) { // uint32_t slot_nbr = d_nav.i_alm_satellite_PRN; // std::shared_ptr tmp_obj = std::make_shared(d_nav.get_almanac(slot_nbr)); // this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); - LOG(INFO) << "BEIDOU DNAV Almanac data have been received in channel" << d_channel << " from satellite " << d_satellite << '\n'; - std::cout << "New BEIDOU B1I DNAV almanac received in channel " << d_channel << " from satellite " << d_satellite << '\n'; + LOG(INFO) << "BEIDOU DNAV Almanac data have been received in channel" << d_channel << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; + const auto default_precision{std::cout.precision()}; + std::cout << "New BEIDOU B1I DNAV almanac received in channel " << d_channel + << " from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } } @@ -506,7 +524,7 @@ int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute_ } // call the decoder - decode_subframe(d_subframe_symbols.data()); + decode_subframe(d_subframe_symbols.data(), current_symbol.CN0_dB_hz); if (d_nav.get_flag_CRC_test() == true) { @@ -563,7 +581,7 @@ int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute_ } // call the decoder - decode_subframe(d_subframe_symbols.data()); + decode_subframe(d_subframe_symbols.data(), current_symbol.CN0_dB_hz); if (d_nav.get_flag_CRC_test() == true) { diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.h index b00afac59..25ef1185e 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_gs.h @@ -75,7 +75,7 @@ private: beidou_b1i_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf); - void decode_subframe(float *symbols); + void decode_subframe(float *symbols, double cn0); 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, std::array &decbits); diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.cc index 8088f51d7..07bb79339 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.cc @@ -32,6 +32,7 @@ #include // for size_t #include // for abs #include // for exception +#include // for setprecision #include // for cout #include // for shared_ptr, make_shared @@ -239,7 +240,7 @@ void beidou_b3i_telemetry_decoder_gs::decode_word( } -void beidou_b3i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) +void beidou_b3i_telemetry_decoder_gs::decode_subframe(float *frame_symbols, double cn0) { // 1. Transform from symbols to bits std::string data_bits; @@ -278,12 +279,12 @@ void beidou_b3i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) if (crc_ok) { DLOG(INFO) << "BeiDou DNAV CRC correct in channel " << d_channel - << " from satellite " << d_satellite; + << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; } else { DLOG(INFO) << "BeiDou DNAV CRC error in channel " << d_channel - << " from satellite " << d_satellite; + << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; } if (d_dump_crc_stats) { @@ -298,9 +299,12 @@ void beidou_b3i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) std::make_shared(d_nav.get_ephemeris()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "BEIDOU DNAV Ephemeris have been received in channel" - << d_channel << " from satellite " << d_satellite; + << d_channel << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; + const auto default_precision{std::cout.precision()}; std::cout << TEXT_YELLOW << "New BEIDOU B3I DNAV message received in channel " << d_channel - << ": ephemeris from satellite " << d_satellite << TEXT_RESET << '\n'; + << ": ephemeris from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } if (d_nav.have_new_utc_model() == true) { @@ -310,9 +314,12 @@ void beidou_b3i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "BEIDOU DNAV UTC Model data have been received in channel" << d_channel << " from satellite " << d_satellite; + const auto default_precision{std::cout.precision()}; std::cout << TEXT_YELLOW << "New BEIDOU B3I DNAV utc model message received in channel " << d_channel << ": UTC model parameters from satellite " - << d_satellite << TEXT_RESET << '\n'; + << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } if (d_nav.have_new_iono() == true) { @@ -321,10 +328,12 @@ void beidou_b3i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) std::make_shared(d_nav.get_iono()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "BEIDOU DNAV Iono data have been received in channel" << d_channel - << " from satellite " << d_satellite; + << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; + const auto default_precision{std::cout.precision()}; std::cout << TEXT_YELLOW << "New BEIDOU B3I DNAV Iono message received in channel " << d_channel << ": Iono model parameters from satellite " - << d_satellite << TEXT_RESET << '\n'; + << d_satellite << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } if (d_nav.have_new_almanac() == true) { @@ -334,9 +343,12 @@ void beidou_b3i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) // this->message_port_pub(pmt::mp("telemetry"), // pmt::make_any(tmp_obj)); LOG(INFO) << "BEIDOU DNAV Almanac data have been received in channel" - << d_channel << " from satellite " << d_satellite << '\n'; + << d_channel << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; + const auto default_precision{std::cout.precision()}; std::cout << TEXT_YELLOW << "New BEIDOU B3I DNAV almanac received in channel " << d_channel - << " from satellite " << d_satellite << TEXT_RESET << '\n'; + << " from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } } @@ -530,7 +542,7 @@ int beidou_b3i_telemetry_decoder_gs::general_work( } // call the decoder - decode_subframe(d_subframe_symbols.data()); + decode_subframe(d_subframe_symbols.data(), current_symbol.CN0_dB_hz); if (d_nav.get_flag_CRC_test() == true) { @@ -590,7 +602,7 @@ int beidou_b3i_telemetry_decoder_gs::general_work( } // call the decoder - decode_subframe(d_subframe_symbols.data()); + decode_subframe(d_subframe_symbols.data(), current_symbol.CN0_dB_hz); if (d_nav.get_flag_CRC_test() == true) { diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.h index a18e06ad7..eb7b14705 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b3i_telemetry_decoder_gs.h @@ -73,7 +73,7 @@ private: beidou_b3i_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf); - void decode_subframe(float *symbols); + void decode_subframe(float *symbols, double cn0); 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, std::array &decbits); diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc index 1f7678ced..50d667c81 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc @@ -41,6 +41,7 @@ #include // for std::fmod, std::abs #include // for size_t #include // for std::exception +#include // for std::setprecision #include // for std::cout #include // for std::numeric_limits #include // for std::map @@ -358,7 +359,7 @@ void galileo_telemetry_decoder_gs::deinterleaver(int32_t rows, int32_t cols, con } -void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, int32_t frame_length) +void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, int32_t frame_length, double cn0) { // 1. De-interleave std::vector page_part_symbols_soft_value(frame_length); @@ -439,11 +440,20 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, in const std::shared_ptr tmp_obj = std::make_shared(d_inav_nav.get_ephemeris()); if (d_band == '1') { - std::cout << "New Galileo E1 I/NAV message received in channel " << d_channel << ": ephemeris from satellite " << d_satellite << std::endl; + const auto default_precision{std::cout.precision()}; + std::cout << "New Galileo E1 I/NAV message received in channel " << d_channel + << ": ephemeris from satellite " << d_satellite << " with CN0=" + << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } else if (d_band == '7') { - std::cout << TEXT_BLUE << "New Galileo E5b I/NAV message received in channel " << d_channel << ": ephemeris from satellite " << d_satellite << TEXT_RESET << std::endl; + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_BLUE + << "New Galileo E5b I/NAV message received in channel " << d_channel + << ": ephemeris from satellite " << d_satellite << " with CN0=" + << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); d_first_eph_sent = true; // do not send reduced CED anymore, since we have the full ephemeris set @@ -454,8 +464,12 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, in if ((d_band == '1') && d_use_ced && !d_first_eph_sent && (d_inav_nav.have_new_reduced_ced() == true)) { const std::shared_ptr tmp_obj = std::make_shared(d_inav_nav.get_reduced_ced()); - std::cout << "New Galileo E1 I/NAV reduced CED message received in channel " << d_channel << " from satellite " << d_satellite << std::endl; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << "New Galileo E1 I/NAV reduced CED message received in channel " + << d_channel << " from satellite " << d_satellite << " with CN0=" + << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } } @@ -463,30 +477,48 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, in { // get object for this SV (mandatory) const std::shared_ptr tmp_obj = std::make_shared(d_inav_nav.get_iono()); + this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); if (d_band == '1') { - std::cout << "New Galileo E1 I/NAV message received in channel " << d_channel << ": iono/GST model parameters from satellite " << d_satellite << std::endl; + const auto default_precision{std::cout.precision()}; + std::cout << "New Galileo E1 I/NAV message received in channel " << d_channel + << ": iono/GST model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } else if (d_band == '7') { - std::cout << TEXT_BLUE << "New Galileo E5b I/NAV message received in channel " << d_channel << ": iono/GST model parameters from satellite " << d_satellite << TEXT_RESET << std::endl; + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_BLUE << "New Galileo E5b I/NAV message received in channel " + << d_channel << ": iono/GST model parameters from satellite " + << d_satellite << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } - this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); } if (d_inav_nav.have_new_utc_model() == true) { // get object for this SV (mandatory) const std::shared_ptr tmp_obj = std::make_shared(d_inav_nav.get_utc_model()); + this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); if (d_band == '1') { - std::cout << "New Galileo E1 I/NAV message received in channel " << d_channel << ": UTC model parameters from satellite " << d_satellite << std::endl; + const auto default_precision{std::cout.precision()}; + std::cout << "New Galileo E1 I/NAV message received in channel " << d_channel + << ": UTC model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } else if (d_band == '7') { - std::cout << TEXT_BLUE << "New Galileo E5b I/NAV message received in channel " << d_channel << ": UTC model parameters from satellite " << d_satellite << TEXT_RESET << std::endl; + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_BLUE << "New Galileo E5b I/NAV message received in channel " + << d_channel + << ": UTC model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } - this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + d_delta_t = tmp_obj->A_0G + tmp_obj->A_1G * (static_cast(d_TOW_at_current_symbol_ms) / 1000.0 - tmp_obj->t_0G + 604800 * (std::fmod(static_cast(d_inav_nav.get_Galileo_week() - tmp_obj->WN_0G), 64.0))); DLOG(INFO) << "delta_t=" << d_delta_t << "[s]"; } @@ -498,11 +530,18 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, in // debug if (d_band == '1') { - std::cout << "Galileo E1 I/NAV almanac received in channel " << d_channel << " from satellite " << d_satellite << std::endl; + const auto default_precision{std::cout.precision()}; + std::cout << "Galileo E1 I/NAV almanac received in channel " << d_channel + << " from satellite " << d_satellite << " with CN0=" + << std::setprecision(2) << cn0 << std::setprecision(default_precision) << " dB-Hz" << std::endl; } else if (d_band == '7') { - std::cout << TEXT_BLUE << "Galileo E5b I/NAV almanac received in channel " << d_channel << " from satellite " << d_satellite << TEXT_RESET << std::endl; + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_BLUE << "Galileo E5b I/NAV almanac received in channel " + << d_channel << " from satellite " << d_satellite << " with CN0=" + << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } DLOG(INFO) << "Current parameters:"; DLOG(INFO) << "d_TOW_at_current_symbol_ms=" << d_TOW_at_current_symbol_ms; @@ -517,7 +556,7 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, in } -void galileo_telemetry_decoder_gs::decode_FNAV_word(float *page_symbols, int32_t frame_length) +void galileo_telemetry_decoder_gs::decode_FNAV_word(float *page_symbols, int32_t frame_length, double cn0) { // 1. De-interleave std::vector page_symbols_soft_value(frame_length); @@ -561,38 +600,51 @@ void galileo_telemetry_decoder_gs::decode_FNAV_word(float *page_symbols, int32_t d_fnav_nav.split_page(page_String); if (d_fnav_nav.get_flag_CRC_test() == true) { - DLOG(INFO) << "Galileo E5a CRC correct in channel " << d_channel << " from satellite " << d_satellite; + DLOG(INFO) << "Galileo E5a CRC correct in channel " << d_channel << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; } else { - DLOG(INFO) << "Galileo E5a CRC error in channel " << d_channel << " from satellite " << d_satellite; + DLOG(INFO) << "Galileo E5a CRC error in channel " << d_channel << " from satellite " << d_satellite << " with CN0=" << cn0 << " dB-Hz"; } // 4. Push the new navigation data to the queues if (d_fnav_nav.have_new_ephemeris() == true) { const std::shared_ptr tmp_obj = std::make_shared(d_fnav_nav.get_ephemeris()); - std::cout << TEXT_MAGENTA << "New Galileo E5a F/NAV message received in channel " << d_channel << ": ephemeris from satellite " << d_satellite << TEXT_RESET << std::endl; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_MAGENTA << "New Galileo E5a F/NAV message received in channel " + << d_channel << ": ephemeris from satellite " << d_satellite << " with CN0=" << std::setprecision(2) << cn0 + << " dB-Hz" << TEXT_RESET << std::endl; + std::cout << std::setprecision(default_precision); // restore defaults } if (d_fnav_nav.have_new_iono_and_GST() == true) { const std::shared_ptr tmp_obj = std::make_shared(d_fnav_nav.get_iono()); - std::cout << TEXT_MAGENTA << "New Galileo E5a F/NAV message received in channel " << d_channel << ": iono/GST model parameters from satellite " << d_satellite << TEXT_RESET << std::endl; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_MAGENTA << "New Galileo E5a F/NAV message received in channel " + << d_channel << ": iono/GST model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 + << " dB-Hz" << TEXT_RESET << std::endl; + std::cout << std::setprecision(default_precision); // restore defaults } if (d_fnav_nav.have_new_utc_model() == true) { const std::shared_ptr tmp_obj = std::make_shared(d_fnav_nav.get_utc_model()); - std::cout << TEXT_MAGENTA << "New Galileo E5a F/NAV message received in channel " << d_channel << ": UTC model parameters from satellite " << d_satellite << TEXT_RESET << std::endl; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_MAGENTA << "New Galileo E5a F/NAV message received in channel " + << d_channel << ": UTC model parameters from satellite " << d_satellite + << " dB-Hz" << TEXT_RESET << std::endl; + std::cout << std::setprecision(default_precision); // restore defaults } } -void galileo_telemetry_decoder_gs::decode_CNAV_word(uint64_t time_stamp, float *page_symbols, int32_t page_length) +void galileo_telemetry_decoder_gs::decode_CNAV_word(uint64_t time_stamp, float *page_symbols, int32_t page_length, double cn0) { // 1. De-interleave std::vector page_symbols_soft_value(page_length); @@ -644,8 +696,10 @@ void galileo_telemetry_decoder_gs::decode_CNAV_word(uint64_t time_stamp, float * if (is_page_dummy != d_cnav_dummy_page) { d_cnav_dummy_page = is_page_dummy; - std::cout << TEXT_MAGENTA << "Receiving Galileo E6 CNAV dummy pages in channel " - << d_channel << " from satellite " << d_satellite + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_MAGENTA << "Receiving Galileo E6 CNAV dummy pages in channel " << d_channel << " from satellite " + << d_satellite << " with CN0=" + << std::setprecision(2) << cn0 << std::setprecision(default_precision) << " dB-Hz" << TEXT_RESET << std::endl; } } @@ -660,9 +714,11 @@ void galileo_telemetry_decoder_gs::decode_CNAV_word(uint64_t time_stamp, float * if (d_print_cnav_page == true) { d_print_cnav_page = false; // only print the first page + const auto default_precision{std::cout.precision()}; std::cout << TEXT_MAGENTA << "Receiving Galileo E6 HAS pages" << (d_cnav_nav.is_HAS_in_test_mode() == true ? " (test mode) " : " ") << "in channel " << d_channel << " from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) << " dB-Hz" << TEXT_RESET << std::endl; } } @@ -926,13 +982,13 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__(( switch (d_frame_type) { case 1: // INAV - decode_INAV_word(d_page_part_symbols.data(), d_frame_length_symbols); + decode_INAV_word(d_page_part_symbols.data(), d_frame_length_symbols, current_symbol.CN0_dB_hz); break; case 2: // FNAV - decode_FNAV_word(d_page_part_symbols.data(), d_frame_length_symbols); + decode_FNAV_word(d_page_part_symbols.data(), d_frame_length_symbols, current_symbol.CN0_dB_hz); break; case 3: // CNAV - decode_CNAV_word(current_symbol.Tracking_sample_counter / static_cast(current_symbol.fs), d_page_part_symbols.data(), d_frame_length_symbols); + decode_CNAV_word(current_symbol.Tracking_sample_counter / static_cast(current_symbol.fs), d_page_part_symbols.data(), d_frame_length_symbols, current_symbol.CN0_dB_hz); break; default: return -1; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.h index 30564a6f8..96666b8c0 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.h @@ -82,9 +82,9 @@ private: void msg_handler_read_galileo_tow_map(const pmt::pmt_t &msg); void deinterleaver(int32_t rows, int32_t cols, const float *in, float *out); - void decode_INAV_word(float *page_part_symbols, int32_t frame_length); - void decode_FNAV_word(float *page_symbols, int32_t frame_length); - void decode_CNAV_word(uint64_t time_stamp, float *page_symbols, int32_t page_length); + void decode_INAV_word(float *page_part_symbols, int32_t frame_length, double cn0); + void decode_FNAV_word(float *page_symbols, int32_t frame_length, double cn0); + void decode_CNAV_word(uint64_t time_stamp, float *page_symbols, int32_t page_length, double cn0); std::unique_ptr d_viterbi; std::vector d_preamble_samples; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.cc index 44d0bf1f9..b35fddef2 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.cc @@ -30,6 +30,7 @@ #include // for size_t #include // for abs #include // for exception +#include // for std::setprecision #include // for cout #include // for shared_ptr, make_shared @@ -152,7 +153,7 @@ glonass_l1_ca_telemetry_decoder_gs::~glonass_l1_ca_telemetry_decoder_gs() } -void glonass_l1_ca_telemetry_decoder_gs::decode_string(const double *frame_symbols, int32_t frame_length) +void glonass_l1_ca_telemetry_decoder_gs::decode_string(const double *frame_symbols, int32_t frame_length, double cn0) { double chip_acc = 0.0; int32_t chip_acc_counter = 0; @@ -238,7 +239,11 @@ void glonass_l1_ca_telemetry_decoder_gs::decode_string(const double *frame_symbo const std::shared_ptr tmp_obj = std::make_shared(d_nav.get_ephemeris()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "GLONASS GNAV Ephemeris have been received in channel" << d_channel << " from satellite " << d_satellite; - std::cout << "New GLONASS L1 GNAV message received in channel " << d_channel << ": ephemeris from satellite " << d_satellite << '\n'; + const auto default_precision{std::cout.precision()}; + std::cout << "New GLONASS L1 GNAV message received in channel " << d_channel + << ": ephemeris from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } if (d_nav.have_new_utc_model() == true) { @@ -246,7 +251,11 @@ void glonass_l1_ca_telemetry_decoder_gs::decode_string(const double *frame_symbo const std::shared_ptr tmp_obj = std::make_shared(d_nav.get_utc_model()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "GLONASS GNAV UTC Model data have been received in channel" << d_channel << " from satellite " << d_satellite; - std::cout << "New GLONASS L1 GNAV message received in channel " << d_channel << ": UTC model parameters from satellite " << d_satellite << '\n'; + const auto default_precision{std::cout.precision()}; + std::cout << "New GLONASS L1 GNAV message received in channel " << d_channel + << ": UTC model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } if (d_nav.have_new_almanac() == true) { @@ -255,7 +264,10 @@ void glonass_l1_ca_telemetry_decoder_gs::decode_string(const double *frame_symbo tmp_obj = std::make_shared(d_nav.get_almanac(slot_nbr)); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "GLONASS GNAV Almanac data have been received in channel" << d_channel << " in slot number " << slot_nbr; - std::cout << "New GLONASS L1 GNAV almanac received in channel " << d_channel << " from satellite " << d_satellite << '\n'; + const auto default_precision{std::cout.precision()}; + std::cout << "New GLONASS L1 GNAV almanac received in channel " << d_channel << " from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; } // 5. Update satellite information on system if (d_nav.get_flag_update_slot_number() == true) @@ -405,7 +417,7 @@ int glonass_l1_ca_telemetry_decoder_gs::general_work(int noutput_items __attribu } // call the decoder - decode_string(string_symbols.data(), string_length); + decode_string(string_symbols.data(), string_length, current_symbol.CN0_dB_hz); bool crc_ok = d_nav.get_flag_CRC_test(); if (crc_ok == true) { diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.h index af36b8b9e..e6b22ba2a 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l1_ca_telemetry_decoder_gs.h @@ -81,7 +81,7 @@ private: const int32_t d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; - void decode_string(const double *symbols, int32_t frame_length); + void decode_string(const double *symbols, int32_t frame_length, double cn0); // Help with coherent tracking diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.cc index a115907a6..8e2df1ff2 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.cc @@ -30,6 +30,7 @@ #include // for size_t #include // for abs #include // for exception +#include // for std::setprecision #include // for cout #include // for shared_ptr, make_shared @@ -152,7 +153,7 @@ glonass_l2_ca_telemetry_decoder_gs::~glonass_l2_ca_telemetry_decoder_gs() } -void glonass_l2_ca_telemetry_decoder_gs::decode_string(const double *frame_symbols, int32_t frame_length) +void glonass_l2_ca_telemetry_decoder_gs::decode_string(const double *frame_symbols, int32_t frame_length, double cn0) { double chip_acc = 0.0; int32_t chip_acc_counter = 0; @@ -238,7 +239,11 @@ void glonass_l2_ca_telemetry_decoder_gs::decode_string(const double *frame_symbo const std::shared_ptr tmp_obj = std::make_shared(d_nav.get_ephemeris()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "GLONASS GNAV Ephemeris have been received in channel" << d_channel << " from satellite " << d_satellite; - std::cout << TEXT_CYAN << "New GLONASS L2 GNAV message received in channel " << d_channel << ": ephemeris from satellite " << d_satellite << TEXT_RESET << '\n'; + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_CYAN << "New GLONASS L2 GNAV message received in channel " << d_channel + << ": ephemeris from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } if (d_nav.have_new_utc_model() == true) { @@ -246,7 +251,11 @@ void glonass_l2_ca_telemetry_decoder_gs::decode_string(const double *frame_symbo const std::shared_ptr tmp_obj = std::make_shared(d_nav.get_utc_model()); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "GLONASS GNAV UTC Model data have been received in channel" << d_channel << " from satellite " << d_satellite; - std::cout << TEXT_CYAN << "New GLONASS L2 GNAV message received in channel " << d_channel << ": UTC model parameters from satellite " << d_satellite << TEXT_RESET << '\n'; + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_CYAN << "New GLONASS L2 GNAV message received in channel " << d_channel + << ": UTC model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } if (d_nav.have_new_almanac() == true) { @@ -254,7 +263,11 @@ void glonass_l2_ca_telemetry_decoder_gs::decode_string(const double *frame_symbo const std::shared_ptr tmp_obj = std::make_shared(d_nav.get_almanac(slot_nbr)); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); LOG(INFO) << "GLONASS GNAV Almanac data have been received in channel" << d_channel << " in slot number " << slot_nbr; - std::cout << TEXT_CYAN << "New GLONASS L2 GNAV almanac received in channel " << d_channel << " from satellite " << d_satellite << TEXT_RESET << '\n'; + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_CYAN << "New GLONASS L2 GNAV almanac received in channel " << d_channel + << " from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } // 5. Update satellite information on system if (d_nav.get_flag_update_slot_number() == true) @@ -404,7 +417,7 @@ int glonass_l2_ca_telemetry_decoder_gs::general_work(int noutput_items __attribu } // call the decoder - decode_string(string_symbols.data(), string_length); + decode_string(string_symbols.data(), string_length, current_symbol.CN0_dB_hz); if (d_nav.get_flag_CRC_test() == true) { d_CRC_error_counter = 0; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.h index 53c0ed03f..fb3a93c38 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/glonass_l2_ca_telemetry_decoder_gs.h @@ -79,7 +79,7 @@ private: const int32_t d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; - void decode_string(const double *symbols, int32_t frame_length); + void decode_string(const double *symbols, int32_t frame_length, double cn0); // Storage for incoming data boost::circular_buffer d_symbol_history; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc index e03d02eaa..0ca6f9219 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc @@ -33,6 +33,7 @@ #include // for size_t #include // for memcpy #include // for exception +#include // for setprecision #include // for cout #include // for shared_ptr #include @@ -254,7 +255,7 @@ void gps_l1_ca_telemetry_decoder_gs::set_channel(int32_t channel) } -bool gps_l1_ca_telemetry_decoder_gs::decode_subframe(bool flag_invert) +bool gps_l1_ca_telemetry_decoder_gs::decode_subframe(double cn0, bool flag_invert) { std::array subframe{}; int32_t frame_bit_index = 0; @@ -350,11 +351,6 @@ bool gps_l1_ca_telemetry_decoder_gs::decode_subframe(bool flag_invert) const int32_t subframe_ID = d_nav.subframe_decoder(subframe.data()); // decode the subframe if (subframe_ID > 0 && subframe_ID < 6) { - std::cout << "New GPS NAV message received in channel " << this->d_channel << ": " - << "subframe " - << subframe_ID << " from satellite " - << Gnss_Satellite(std::string("GPS"), d_nav.get_satellite_PRN()) << '\n'; - switch (subframe_ID) { case 1: @@ -401,6 +397,13 @@ bool gps_l1_ca_telemetry_decoder_gs::decode_subframe(bool flag_invert) default: break; } + const auto default_precision{std::cout.precision()}; + std::cout << "New GPS NAV message received in channel " << this->d_channel << ": " + << "subframe " + << subframe_ID << " from satellite " + << Gnss_Satellite(std::string("GPS"), d_nav.get_satellite_PRN()) + << " with CN0=" << std::setprecision(2) << cn0 << std::setprecision(default_precision) + << " dB-Hz" << std::endl; return true; } } @@ -499,7 +502,7 @@ int gps_l1_ca_telemetry_decoder_gs::general_work(int noutput_items __attribute__ } DLOG(INFO) << "Preamble detection for GPS L1 satellite " << this->d_satellite; d_prev_GPS_frame_4bytes = 0; - if (decode_subframe(d_flag_PLL_180_deg_phase_locked)) + if (decode_subframe(current_symbol.CN0_dB_hz, d_flag_PLL_180_deg_phase_locked)) { d_CRC_error_counter = 0; d_flag_preamble = true; // valid preamble indicator (initialized to false every work()) @@ -525,7 +528,7 @@ int gps_l1_ca_telemetry_decoder_gs::general_work(int noutput_items __attribute__ // 0. fetch the symbols into an array d_preamble_index = d_sample_counter; // record the preamble sample stamp (t_P) - if (decode_subframe(d_flag_PLL_180_deg_phase_locked)) + if (decode_subframe(current_symbol.CN0_dB_hz, d_flag_PLL_180_deg_phase_locked)) { d_CRC_error_counter = 0; d_flag_preamble = true; // valid preamble indicator (initialized to false every work()) diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.h index da9dbc50d..07bfdeee2 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.h @@ -74,7 +74,7 @@ private: gps_l1_ca_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf); bool gps_word_parityCheck(uint32_t gpsword); - bool decode_subframe(bool flag_invert); + bool decode_subframe(double cn0, bool flag_invert); Gps_Navigation_Message d_nav; Gnss_Satellite d_satellite; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2c_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2c_telemetry_decoder_gs.cc index cd0c817f6..0b2947e17 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2c_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2c_telemetry_decoder_gs.cc @@ -32,6 +32,7 @@ #include // for round #include // for size_t #include // for exception +#include // for setprecision #include // for cout #include // for shared_ptr, make_shared @@ -257,21 +258,33 @@ int gps_l2c_telemetry_decoder_gs::general_work(int noutput_items __attribute__(( { // get ephemeris object for this SV const std::shared_ptr tmp_obj = std::make_shared(d_CNAV_Message.get_ephemeris()); - std::cout << TEXT_BLUE << "New GPS CNAV message received in channel " << d_channel << ": ephemeris from satellite " << d_satellite << TEXT_RESET << '\n'; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_BLUE << "New GPS CNAV message received in channel " << d_channel + << ": ephemeris from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << current_synchro_data.CN0_dB_hz << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } if (d_CNAV_Message.have_new_iono() == true) { const std::shared_ptr tmp_obj = std::make_shared(d_CNAV_Message.get_iono()); - std::cout << TEXT_BLUE << "New GPS CNAV message received in channel " << d_channel << ": iono model parameters from satellite " << d_satellite << TEXT_RESET << '\n'; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_BLUE << "New GPS CNAV message received in channel " << d_channel + << ": iono model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << current_synchro_data.CN0_dB_hz << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } if (d_CNAV_Message.have_new_utc_model() == true) { const std::shared_ptr tmp_obj = std::make_shared(d_CNAV_Message.get_utc_model()); - std::cout << TEXT_BLUE << "New GPS CNAV message received in channel " << d_channel << ": UTC model parameters from satellite " << d_satellite << TEXT_RESET << '\n'; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_BLUE << "New GPS CNAV message received in channel " << d_channel + << ": UTC model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << current_synchro_data.CN0_dB_hz << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } // update TOW at the preamble instant diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l5_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l5_telemetry_decoder_gs.cc index d4c915cc5..c93572019 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l5_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l5_telemetry_decoder_gs.cc @@ -31,6 +31,7 @@ #include // for size_t #include // for std::llabs #include // for std::exception +#include // for std::setprecision #include // for std::cout gps_l5_telemetry_decoder_gs_sptr @@ -254,21 +255,33 @@ int gps_l5_telemetry_decoder_gs::general_work(int noutput_items __attribute__((u { // get ephemeris object for this SV const std::shared_ptr tmp_obj = std::make_shared(d_CNAV_Message.get_ephemeris()); - std::cout << TEXT_MAGENTA << "New GPS L5 CNAV message received in channel " << d_channel << ": ephemeris from satellite " << d_satellite << TEXT_RESET << '\n'; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_MAGENTA << "New GPS L5 CNAV message received in channel " << d_channel + << ": ephemeris from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << current_synchro_data.CN0_dB_hz + << std::setprecision(default_precision) << " dB-Hz" << std::endl; } if (d_CNAV_Message.have_new_iono() == true) { const std::shared_ptr tmp_obj = std::make_shared(d_CNAV_Message.get_iono()); - std::cout << TEXT_MAGENTA << "New GPS L5 CNAV message received in channel " << d_channel << ": iono model parameters from satellite " << d_satellite << TEXT_RESET << '\n'; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_MAGENTA << "New GPS L5 CNAV message received in channel " << d_channel + << ": iono model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << current_synchro_data.CN0_dB_hz << std::setprecision(default_precision) + << " dB-Hz" << TEXT_RESET << std::endl; } if (d_CNAV_Message.have_new_utc_model() == true) { const std::shared_ptr tmp_obj = std::make_shared(d_CNAV_Message.get_utc_model()); - std::cout << TEXT_MAGENTA << "New GPS L5 CNAV message received in channel " << d_channel << ": UTC model parameters from satellite " << d_satellite << TEXT_RESET << '\n'; this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + const auto default_precision{std::cout.precision()}; + std::cout << TEXT_MAGENTA << "New GPS L5 CNAV message received in channel " << d_channel + << ": UTC model parameters from satellite " << d_satellite + << " with CN0=" << std::setprecision(2) << current_synchro_data.CN0_dB_hz + << std::setprecision(default_precision) << " dB-Hz" << TEXT_RESET << std::endl; } // update TOW at the preamble instant