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