GNSS-SDR 0.0.21
An Open Source GNSS Software Defined Receiver
Loading...
Searching...
No Matches
galileo_telemetry_decoder_gs.h
Go to the documentation of this file.
1/*!
2 * \file galileo_telemetry_decoder_gs.h
3 * \brief Implementation of a Galileo unified INAV and FNAV message demodulator
4 * block
5 * \author Javier Arribas 2018. jarribas(at)cttc.es
6 * \author Carles Fernandez, 2021-2022. cfernandez(at)cttc.es
7 *
8 *
9 * -----------------------------------------------------------------------------
10 *
11 * GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
12 * This file is part of GNSS-SDR.
13 *
14 * Copyright (C) 2010-2022 (see AUTHORS file for a list of contributors)
15 * SPDX-License-Identifier: GPL-3.0-or-later
16 *
17 * -----------------------------------------------------------------------------
18 */
19
20
21#ifndef GNSS_SDR_GALILEO_TELEMETRY_DECODER_GS_H
22#define GNSS_SDR_GALILEO_TELEMETRY_DECODER_GS_H
23
24#include "galileo_cnav_message.h" // for Galileo_Cnav_Message
25#include "galileo_fnav_message.h" // for Galileo_Fnav_Message
26#include "galileo_inav_message.h" // for Galileo_Inav_Message
27#include "gnss_time.h" // for GnssTime
28#include "nav_message_packet.h" // for Nav_Message_Packet
29#include "telemetry_impl_interface.h" // for telemetry_impl_interface
30#include "tlm_conf.h" // for Tlm_Conf
31#include <boost/circular_buffer.hpp> // for boost::circular_buffer
32#include <gnuradio/types.h> // for gr_vector_const_void_star
33#include <pmt/pmt.h> // for pmt::pmt_t
34#include <vector> // for std::vector
35
36/** \addtogroup Telemetry_Decoder
37 * \{ */
38/** \addtogroup Telemetry_Decoder_gnuradio_blocks
39 * \{ */
40
41class Viterbi_Decoder; // forward declaration
42class galileo_telemetry_decoder_gs; // forward declaration
43
44using galileo_telemetry_decoder_gs_sptr = gnss_shared_ptr<galileo_telemetry_decoder_gs>;
45
46galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(
47 const Gnss_Satellite &satellite,
48 const Tlm_Conf &conf,
49 int frame_type);
50
51/*!
52 * \brief This class implements a block that decodes the INAV and FNAV data defined in Galileo ICD
53 */
54class galileo_telemetry_decoder_gs : public telemetry_impl_interface
55{
56public:
57 ~galileo_telemetry_decoder_gs() override;
58 void set_satellite(const Gnss_Satellite &satellite) override; //!< Set satellite PRN
59 void set_channel(int32_t channel) override; //!< Set receiver's channel
60 void reset() override;
61
62 /*!
63 * \brief This is where all signal processing takes place
64 */
65 int general_work(int noutput_items, gr_vector_int &ninput_items,
66 gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override;
67
68private:
69 friend galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(
70 const Gnss_Satellite &satellite,
71 const Tlm_Conf &conf,
72 int frame_type);
73
74 galileo_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf, int frame_type);
75
76 void check_tlm_separation();
77 void msg_handler_read_galileo_tow_map(const pmt::pmt_t &msg);
78 void deinterleaver(int32_t rows, int32_t cols, const float *in, float *out);
79 void decode_INAV_word(float *page_part_symbols, int32_t frame_length, double cn0);
80 void decode_FNAV_word(float *page_symbols, int32_t frame_length, double cn0);
81 void decode_CNAV_word(uint64_t time_stamp, float *page_symbols, int32_t page_length, double cn0);
82
83 std::unique_ptr<Viterbi_Decoder> d_viterbi;
84 std::vector<int32_t> d_preamble_samples;
85 std::vector<float> d_page_part_symbols;
86
87 std::string d_dump_filename;
88 std::ofstream d_dump_file;
89
90 boost::circular_buffer<float> d_symbol_history;
91
92 Gnss_Satellite d_satellite;
93
94 // navigation message vars
95 Galileo_Cnav_Message d_cnav_nav;
96 Galileo_Inav_Message d_inav_nav;
97 Galileo_Fnav_Message d_fnav_nav;
98
99 Nav_Message_Packet d_nav_msg_packet;
100 GnssTime d_current_timetag{};
101
102 std::unique_ptr<Tlm_CRC_Stats> d_Tlm_CRC_Stats;
103
104 double d_delta_t; // GPS-GALILEO time offset
105
106 uint64_t d_symbol_counter;
107 uint64_t d_preamble_index;
108 uint64_t d_last_valid_preamble;
109 uint64_t d_received_sample_counter;
110
111 int32_t d_mm;
112 int32_t d_codelength;
113 int32_t d_datalength;
114 int32_t d_frame_type;
115 int32_t d_bits_per_preamble;
116 int32_t d_samples_per_preamble;
117 int32_t d_preamble_period_symbols;
118 int32_t d_CRC_error_counter;
119 int32_t d_channel;
120 int32_t d_flag_even_word_arrived;
121
122 uint32_t d_PRN_code_period_ms;
123 uint32_t d_required_symbols;
124 uint32_t d_frame_length_symbols;
125 uint32_t d_stat;
126 uint32_t d_TOW_at_Preamble_ms;
127 uint32_t d_TOW_at_current_symbol_ms;
128 uint32_t d_max_symbols_without_valid_frame;
129 uint32_t d_received_tow_ms;
130
131 char d_band; // This variable will store which band we are dealing with (Galileo E1 or E5b)
132
133 bool d_sent_tlm_failed_msg;
134 bool d_flag_frame_sync;
135 bool d_flag_PLL_180_deg_phase_locked;
136 bool d_flag_preamble;
137 bool d_dump;
138 bool d_dump_mat;
139 bool d_remove_dat;
140 bool d_first_eph_sent;
141 bool d_cnav_dummy_page;
142 bool d_print_cnav_page;
143 bool d_enable_navdata_monitor;
144 bool d_dump_crc_stats;
145 bool d_enable_reed_solomon_inav;
146 bool d_valid_timetag;
147 bool d_E6_TOW_set;
148 bool d_there_are_e1_channels;
149 bool d_there_are_e6_channels;
150 bool d_use_ced;
151 bool d_tow_to_trk;
152};
153
154
155/** \} */
156/** \} */
157#endif // GNSS_SDR_GALILEO_TELEMETRY_DECODER_GS_H
This class handles the Galileo CNAV Data message, as described in the Galileo High Accuracy Service S...
This class handles the Galileo F/NAV Data message, as described in the Galileo Open Service Signal in...
This class handles the Galileo I/NAV Data message, as described in the Galileo Open Service Signal in...
This class represents a GNSS satellite.
Class that implements a Viterbi decoder.
This class implements a block that decodes the INAV and FNAV data defined in Galileo ICD.
int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override
This is where all signal processing takes place.
void set_satellite(const Gnss_Satellite &satellite) override
Set satellite PRN.
void set_channel(int32_t channel) override
Set receiver's channel.
Implementation of a Galileo CNAV Data message as described in Galileo High Accuracy Service Signal-In...
Implementation of a Galileo F/NAV Data message as described in Galileo OS SIS ICD Issue 1....
Implementation of a Galileo I/NAV Data message as described in Galileo OS SIS ICD Issue 2....
class that stores both the receiver time, relative to the receiver start and the GNSS time (absolute)
Class for storage of decoded navigation messages.
Base class for telemetry decoder GNU Radio blocks.
Class that contains all the configuration parameters for generic telemetry decoder block.