GNSS-SDR  0.0.17
An Open Source GNSS Software Defined Receiver
gps_l1_ca_pcps_opencl_acquisition.h
Go to the documentation of this file.
1 /*!
2  * \file gps_l1_ca_pcps_opencl_acquisition.h
3  * \brief Adapts an OpenCL PCPS acquisition block to an
4  * AcquisitionInterface for GPS L1 C/A signals
5  * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com
6  *
7  * -----------------------------------------------------------------------------
8  *
9  * GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
10  * This file is part of GNSS-SDR.
11  *
12  * Copyright (C) 2010-2020 (see AUTHORS file for a list of contributors)
13  * SPDX-License-Identifier: GPL-3.0-or-later
14  *
15  * -----------------------------------------------------------------------------
16  */
17 
18 #ifndef GNSS_SDR_GPS_L1_CA_PCPS_OPENCL_ACQUISITION_H
19 #define GNSS_SDR_GPS_L1_CA_PCPS_OPENCL_ACQUISITION_H
20 
21 #include "channel_fsm.h"
22 #include "gnss_synchro.h"
24 #include <gnuradio/blocks/stream_to_vector.h>
25 #include <memory>
26 #include <string>
27 #include <vector>
28 
29 /** \addtogroup Acquisition
30  * \{ */
31 /** \addtogroup Acq_adapters
32  * \{ */
33 
34 
36 
37 /*!
38  * \brief This class adapts an OpenCL PCPS acquisition block to an
39  * AcquisitionInterface for GPS L1 C/A signals
40  */
42 {
43 public:
45  const std::string& role,
46  unsigned int in_streams,
47  unsigned int out_streams);
48 
49  ~GpsL1CaPcpsOpenClAcquisition() = default;
50 
51  inline std::string role() override
52  {
53  return role_;
54  }
55 
56  /*!
57  * \brief Returns "GPS_L1_CA_PCPS_OpenCl_Acquisition"
58  */
59  inline std::string implementation() override
60  {
61  return "GPS_L1_CA_PCPS_OpenCl_Acquisition";
62  }
63 
64  inline size_t item_size() override
65  {
66  return item_size_;
67  }
68 
69  void connect(gr::top_block_sptr top_block) override;
70  void disconnect(gr::top_block_sptr top_block) override;
71  gr::basic_block_sptr get_left_block() override;
72  gr::basic_block_sptr get_right_block() override;
73 
74  /*!
75  * \brief Set acquisition/tracking common Gnss_Synchro object pointer
76  * to efficiently exchange synchronization data between acquisition and
77  * tracking blocks
78  */
79  void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) override;
80 
81  /*!
82  * \brief Set acquisition channel unique ID
83  */
84  inline void set_channel(unsigned int channel) override
85  {
86  channel_ = channel;
87  acquisition_cc_->set_channel(channel_);
88  }
89 
90  /*!
91  * \brief Set channel fsm associated to this acquisition instance
92  */
93  inline void set_channel_fsm(std::weak_ptr<ChannelFsm> channel_fsm) override
94  {
95  channel_fsm_ = channel_fsm;
96  acquisition_cc_->set_channel_fsm(channel_fsm);
97  }
98 
99  /*!
100  * \brief Set statistics threshold of PCPS algorithm
101  */
102  void set_threshold(float threshold) override;
103 
104  /*!
105  * \brief Set maximum Doppler off grid search
106  */
107  void set_doppler_max(unsigned int doppler_max) override;
108 
109  /*!
110  * \brief Set Doppler steps for the grid search
111  */
112  void set_doppler_step(unsigned int doppler_step) override;
113 
114  /*!
115  * \brief Initializes acquisition algorithm.
116  */
117  void init() override;
118 
119  /*!
120  * \brief Sets local code for GPS L1/CA PCPS acquisition algorithm.
121  */
122  void set_local_code() override;
123 
124  /*!
125  * \brief Returns the maximum peak of grid search
126  */
127  signed int mag() override;
128 
129  /*!
130  * \brief Restart acquisition algorithm
131  */
132  void reset() override;
133  void set_state(int state __attribute__((unused))) override{};
134 
135  /*!
136  * \brief Stop running acquisition
137  */
138  void stop_acquisition() override;
139 
140  void set_resampler_latency(uint32_t latency_samples __attribute__((unused))) override{};
141 
142  inline bool opencl_ready() const
143  {
144  bool ready = this->acquisition_cc_->opencl_ready();
145  return ready;
146  }
147 
148 private:
149  float calculate_threshold(float pfa) const;
150  const ConfigurationInterface* configuration_;
151  pcps_opencl_acquisition_cc_sptr acquisition_cc_;
152  gr::blocks::stream_to_vector::sptr stream_to_vector_;
153  std::weak_ptr<ChannelFsm> channel_fsm_;
154  std::vector<std::complex<float>> code_;
155  Gnss_Synchro* gnss_synchro_;
156 
157  std::string item_type_;
158  std::string dump_filename_;
159  std::string role_;
160 
161  int64_t fs_in_;
162  size_t item_size_;
163 
164  float threshold_;
165 
166  unsigned int vector_length_;
167  unsigned int code_length_;
168  unsigned int channel_;
169  unsigned int doppler_max_;
170  unsigned int doppler_step_;
171  unsigned int sampled_ms_;
172  unsigned int max_dwells_;
173  unsigned int in_streams_;
174  unsigned int out_streams_;
175  bool bit_transition_flag_;
176  bool dump_;
177 };
178 
179 
180 /** \} */
181 /** \} */
182 #endif // GNSS_SDR_GPS_L1_CA_PCPS_OPENCL_ACQUISITION_H
void set_doppler_step(unsigned int doppler_step) override
Set Doppler steps for the grid search.
void set_local_code() override
Sets local code for GPS L1/CA PCPS acquisition algorithm.
void set_threshold(float threshold) override
Set statistics threshold of PCPS algorithm.
std::string implementation() override
Returns "GPS_L1_CA_PCPS_OpenCl_Acquisition".
Interface of the State Machine for channel.
void set_channel(unsigned int channel) override
Set acquisition channel unique ID.
void reset() override
Restart acquisition algorithm.
void set_gnss_synchro(Gnss_Synchro *p_gnss_synchro) override
Set acquisition/tracking common Gnss_Synchro object pointer to efficiently exchange synchronization d...
void stop_acquisition() override
Stop running acquisition.
This abstract class represents an interface to an acquisition GNSS block.
signed int mag() override
Returns the maximum peak of grid search.
void set_channel_fsm(std::weak_ptr< ChannelFsm > channel_fsm) override
Set channel fsm associated to this acquisition instance.
This is the class that contains the information that is shared by the processing blocks.
Definition: gnss_synchro.h:38
This abstract class represents an interface to configuration parameters.
void set_doppler_max(unsigned int doppler_max) override
Set maximum Doppler off grid search.
void init() override
Initializes acquisition algorithm.
This class implements a Parallel Code Phase Search Acquisition using OpenCL to offload some functions...
This class adapts an OpenCL PCPS acquisition block to an AcquisitionInterface for GPS L1 C/A signals...
Interface of the Gnss_Synchro class.