GNSS-SDR 0.0.21
An Open Source GNSS Software Defined Receiver
Loading...
Searching...
No Matches
hybrid_observables_gs.h
Go to the documentation of this file.
1/*!
2 * \file hybrid_observables_gs.h
3 * \brief Interface of the observables computation block
4 * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com
5 * \author Javier Arribas 2013. jarribas(at)cttc.es
6 * \author Antonio Ramos 2018. antonio.ramos(at)cttc.es
7 *
8 * -----------------------------------------------------------------------------
9 *
10 * GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
11 * This file is part of GNSS-SDR.
12 *
13 * Copyright (C) 2010-2020 (see AUTHORS file for a list of contributors)
14 * SPDX-License-Identifier: GPL-3.0-or-later
15 *
16 * -----------------------------------------------------------------------------
17 */
18
19
20#ifndef GNSS_SDR_HYBRID_OBSERVABLES_GS_H
21#define GNSS_SDR_HYBRID_OBSERVABLES_GS_H
22
24#include "gnss_time.h" // for timetags produced by Tracking
25#include "obs_conf.h"
26#include <boost/circular_buffer.hpp> // for boost::circular_buffer
27#include <gnuradio/block.h> // for block
28#include <gnuradio/types.h> // for gr_vector_int
29#include <cstddef> // for size_t
30#include <cstdint> // for int32_t
31#include <fstream> // for std::ofstream
32#include <memory> // for std::shared, std:unique_ptr
33#include <queue> // for std::queue
34#include <string> // for std::string
35#include <typeinfo> // for typeid
36#include <vector> // for std::vector
37
38/** \addtogroup Observables
39 * \{ */
40/** \addtogroup Observables_gnuradio_blocks obs_gr_blocks
41 * GNU Radio blocks for the computation of GNSS observables
42 * \{ */
43
44
45class Gnss_Synchro;
47
48template <class T>
50
51using hybrid_observables_gs_sptr = gnss_shared_ptr<hybrid_observables_gs>;
52
53hybrid_observables_gs_sptr hybrid_observables_gs_make(const Obs_Conf& conf_);
54
55/*!
56 * \brief This class implements a block that computes observables
57 */
58class hybrid_observables_gs : public gr::block
59{
60public:
61 ~hybrid_observables_gs();
62 void forecast(int noutput_items, gr_vector_int& ninput_items_required);
63 int general_work(int noutput_items, gr_vector_int& ninput_items,
64 gr_vector_const_void_star& input_items, gr_vector_void_star& output_items);
65
66private:
67 friend hybrid_observables_gs_sptr hybrid_observables_gs_make(const Obs_Conf& conf_);
68
69 explicit hybrid_observables_gs(const Obs_Conf& conf_);
70
71 const size_t d_double_type_hash_code = typeid(double).hash_code();
72 const size_t d_int_type_hash_code = typeid(int).hash_code();
73
74 void msg_handler_pvt_to_observables(const pmt::pmt_t& msg);
75 double compute_T_rx_s(const Gnss_Synchro& a) const;
76 bool interp_trk_obs(Gnss_Synchro& interpolated_obs, uint32_t ch, uint64_t rx_clock) const;
77 void update_TOW(const std::vector<Gnss_Synchro>& data);
78 void compute_pranges(std::vector<Gnss_Synchro>& data) const;
79 void smooth_pseudoranges(std::vector<Gnss_Synchro>& data);
80 void detect_cycle_slips(std::vector<Gnss_Synchro>& data, uint64_t rx_clock);
81
82 void set_tag_timestamp_in_sdr_timeframe(const std::vector<Gnss_Synchro>& data, uint64_t rx_clock);
83
84 void propagate_sensor_data(const std::vector<Gnss_Synchro>& data);
85
86 int32_t save_matfile() const;
87
88 Obs_Conf d_conf;
89
90 std::unique_ptr<Gnss_circular_deque<Gnss_Synchro>> d_gnss_synchro_history; // Tracking observable history
91
92 boost::circular_buffer<uint64_t> d_Rx_clock_buffer; // time history
93
94 std::vector<std::queue<GnssTime>> d_SourceTagTimestamps;
95 std::queue<GnssTime> d_TimeChannelTagTimestamps;
96
97 std::queue<gr::tag_t> d_sensor_data_tags;
98 std::uint64_t d_trq_last_sample{0};
99
100 std::vector<bool> d_channel_last_pll_lock;
101 std::vector<double> d_channel_last_pseudorange_smooth;
102 std::vector<double> d_channel_last_carrier_phase_rads;
103 std::vector<bool> d_channel_last_rx_time_valid;
104
105 std::string d_dump_filename;
106
107 std::ofstream d_dump_file;
108
109 double d_smooth_filter_M;
110 double d_T_rx_step_s;
111 double d_last_rx_clock_round20ms_error;
112
113 uint32_t d_T_rx_TOW_ms;
114 uint32_t d_T_rx_step_ms;
115 uint32_t d_T_status_report_timer_ms;
116 uint32_t d_nchannels_in;
117 uint32_t d_nchannels_out;
118
119 bool d_T_rx_TOW_set; // rx time follow GPST
120 bool d_always_output_gs;
121 bool d_dump;
122 bool d_dump_mat;
123};
124
125/** \} */
126/** \} */
127#endif // GNSS_SDR_HYBRID_OBSERVABLES_GS_H
This is the class that contains the information that is shared by the processing blocks.
This class implements a block that computes observables.
This interface represents a GNSS block.
class that stores both the receiver time, relative to the receiver start and the GNSS time (absolute)
Class that contains all the configuration parameters for generic observables block.