38 #ifndef GNSS_SDR_PCPS_ACQUISITION_H 39 #define GNSS_SDR_PCPS_ACQUISITION_H 41 #if ARMA_NO_BOUND_CHECKING 42 #define ARMA_NO_DEBUG 1 49 #include <gnuradio/block.h> 50 #include <gnuradio/gr_complex.h> 51 #include <gnuradio/thread/thread.h> 52 #include <gnuradio/types.h> 53 #include <volk/volk_complex.h> 54 #include <volk_gnsssdr/volk_gnsssdr_alloc.h> 67 #include <gsl/gsl-lite.hpp> 82 using pcps_acquisition_sptr = gnss_shared_ptr<pcps_acquisition>;
84 pcps_acquisition_sptr pcps_make_acquisition(
const Acq_Conf& conf_);
109 gr::thread::scoped_lock lock(d_setlock);
110 d_gnss_synchro = p_gnss_synchro;
126 void set_resampler_latency(uint32_t latency_samples);
131 inline uint32_t
mag()
const 143 gr::thread::scoped_lock lock(d_setlock);
161 d_channel_fsm = std::move(channel_fsm);
171 gr::thread::scoped_lock lock(d_setlock);
172 d_threshold = threshold;
181 gr::thread::scoped_lock lock(d_setlock);
182 d_acq_parameters.doppler_max = doppler_max;
191 gr::thread::scoped_lock lock(d_setlock);
192 d_doppler_step = doppler_step;
204 int general_work(
int noutput_items, gr_vector_int& ninput_items,
205 gr_vector_const_void_star& input_items,
206 gr_vector_void_star& output_items)
override;
209 friend pcps_acquisition_sptr pcps_make_acquisition(
const Acq_Conf& conf_);
212 void update_local_carrier(own::span<gr_complex> carrier_vector,
float freq)
const;
213 void update_grid_doppler_wipeoffs();
214 void update_grid_doppler_wipeoffs_step2();
215 void acquisition_core(uint64_t samp_count);
216 void send_negative_acquisition();
217 void send_positive_acquisition();
218 void dump_results(int32_t effective_fft_size);
220 bool start()
override;
221 void calculate_threshold(
void);
222 float first_vs_second_peak_statistic(uint32_t& indext, int32_t& doppler, uint32_t num_doppler_bins, int32_t doppler_max, int32_t doppler_step);
223 float max_to_input_power_statistic(uint32_t& indext, int32_t& doppler, uint32_t num_doppler_bins, int32_t doppler_max, int32_t doppler_step);
225 volk_gnsssdr::vector<volk_gnsssdr::vector<float>> d_magnitude_grid;
226 volk_gnsssdr::vector<float> d_tmp_buffer;
227 volk_gnsssdr::vector<std::complex<float>> d_input_signal;
228 volk_gnsssdr::vector<volk_gnsssdr::vector<std::complex<float>>> d_grid_doppler_wipeoffs;
229 volk_gnsssdr::vector<volk_gnsssdr::vector<std::complex<float>>> d_grid_doppler_wipeoffs_step_two;
230 volk_gnsssdr::vector<std::complex<float>> d_fft_codes;
231 volk_gnsssdr::vector<std::complex<float>> d_data_buffer;
232 volk_gnsssdr::vector<lv_16sc_t> d_data_buffer_sc;
234 std::unique_ptr<gnss_fft_complex_fwd> d_fft_if;
235 std::unique_ptr<gnss_fft_complex_rev> d_ifft;
236 std::weak_ptr<ChannelFsm> d_channel_fsm;
241 arma::fmat d_narrow_grid;
243 std::queue<Gnss_Synchro> d_monitor_queue;
244 std::string d_dump_filename;
246 int64_t d_dump_number;
247 uint64_t d_sample_counter;
252 float d_test_statistics;
253 float d_doppler_center_step_two;
256 int32_t d_positive_acq;
257 int32_t d_doppler_center;
258 int32_t d_doppler_bias;
260 uint32_t d_samplesPerChip;
261 uint32_t d_doppler_step;
262 uint32_t d_num_noncoherent_integrations_counter;
264 uint32_t d_consumed_samples;
265 uint32_t d_num_doppler_bins;
266 uint32_t d_num_doppler_bins_step2;
267 uint32_t d_dump_channel;
268 uint32_t d_buffer_count;
271 bool d_worker_active;
274 bool d_use_CFAR_algorithm_flag;
281 #endif // GNSS_SDR_PCPS_ACQUISITION_H void set_doppler_step(uint32_t doppler_step)
Set Doppler steps for the grid search.
Helper file for FFT interface.
This class implements a Parallel Code Phase Search Acquisition.
void set_state(int32_t state)
If set to 1, ensures that acquisition starts at the first available sample.
void set_active(bool active)
Starts acquisition algorithm, turning from standby mode to active mode.
void set_doppler_max(uint32_t doppler_max)
Set maximum Doppler grid search.
Class that contains all the configuration parameters for generic acquisition block based on the PCPS ...
Interface of the State Machine for channel.
void set_local_code(std::complex< float > *code)
Sets local code for PCPS acquisition algorithm.
This is the class that contains the information that is shared by the processing blocks.
void set_doppler_center(int32_t doppler_center)
Set Doppler center frequency for the grid search. It will refresh the Doppler grid.
void set_channel(uint32_t channel)
Set acquisition channel unique ID.
void set_channel_fsm(std::weak_ptr< ChannelFsm > channel_fsm)
Set channel fsm associated to this acquisition instance.
uint32_t mag() const
Returns the maximum peak of grid search.
void set_gnss_synchro(Gnss_Synchro *p_gnss_synchro)
Set acquisition/tracking common Gnss_Synchro object pointer to exchange synchronization data between ...
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
Parallel Code Phase Search Acquisition signal processing.
void init()
Initializes acquisition algorithm and reserves memory.
void set_threshold(float threshold)
Set statistics threshold of PCPS algorithm.