93class pcps_acquisition :
public acquisition_impl_interface
96 ~pcps_acquisition()
override;
105 gr::thread::scoped_lock lock(d_setlock);
106 d_gnss_synchro = p_gnss_synchro;
115 void set_resampler_latency(uint32_t latency_samples);
120 inline uint32_t
mag()
const override
146 d_channel_fsm = std::move(channel_fsm);
159 gr_vector_const_void_star& input_items,
160 gr_vector_void_star& output_items)
override;
163 friend pcps_acquisition_sptr pcps_make_acquisition(
const Acq_Conf& conf_);
164 explicit pcps_acquisition(
const Acq_Conf& conf_);
166 struct AcquisitionResult
169 uint32_t index_time{0};
170 uint64_t sample_count{0};
171 float test_statistics{0};
172 bool positive_acq{
false};
175 void update_local_carrier(own::span<gr_complex> carrier_vector,
float freq)
const;
176 void update_grid_doppler_wipeoffs();
177 void update_grid_doppler_wipeoffs_step2();
178 void doppler_grid(
const gr_complex* in);
179 AcquisitionResult compute_statistics();
180 void update_synchro(
const AcquisitionResult& result);
181 void handle_threshold_reached(AcquisitionResult& result);
182 void handle_integration_done(
const AcquisitionResult& result);
183 void acquisition_core(uint64_t sample_count);
184 void log_acquisition(
const AcquisitionResult& result)
const;
185 void send_negative_acquisition(
const AcquisitionResult& result);
186 void send_positive_acquisition(
const AcquisitionResult& result);
187 void dump_results(
const AcquisitionResult& result);
189 float get_threshold()
const;
190 AcquisitionResult first_vs_second_peak_statistic(uint32_t num_doppler_bins, int32_t doppler_max, int32_t doppler_step);
191 AcquisitionResult max_to_input_power_statistic(uint32_t num_doppler_bins, int32_t doppler_max, int32_t doppler_step);
192 void wait_if_active();
194 const Acq_Conf d_acq_parameters;
195 const std::string d_dump_filename;
196 const float d_doppler_max;
197 const uint32_t d_samplesPerChip;
198 const uint32_t d_doppler_step;
199 const uint32_t d_consumed_samples;
200 const uint32_t d_fft_size;
201 const uint32_t d_effective_fft_size;
202 const uint32_t d_num_doppler_bins;
203 const uint32_t d_num_doppler_bins_step2;
204 const uint32_t d_dump_channel;
205 const float d_threshold;
206 const float d_threshold_step_two;
208 const bool d_use_CFAR_algorithm_flag;
212 std::weak_ptr<ChannelFsm> d_channel_fsm;
213 std::unique_ptr<gr::thread::thread> d_worker;
214 Gnss_Synchro* d_gnss_synchro;
215 std::queue<Gnss_Synchro> d_monitor_queue;
217 int32_t d_doppler_center;
218 int32_t d_doppler_bias;
219 uint32_t d_buffer_count;
221 uint32_t d_resampler_latency_samples;
222 uint64_t d_sample_count;
225 bool d_worker_active;
228 uint32_t d_num_noncoherent_integrations_counter;
229 int64_t d_dump_number;
231 float d_doppler_center_step_two;
232 volk_gnsssdr::vector<volk_gnsssdr::vector<float>> d_magnitude_grid;
233 volk_gnsssdr::vector<float> d_tmp_buffer;
234 volk_gnsssdr::vector<std::complex<float>> d_input_signal;
235 volk_gnsssdr::vector<volk_gnsssdr::vector<std::complex<float>>> d_grid_doppler_wipeoffs_step_two;
236 std::unique_ptr<gnss_fft_complex_rev> d_ifft;
238 arma::fmat d_narrow_grid;
241 volk_gnsssdr::vector<volk_gnsssdr::vector<std::complex<float>>> d_grid_doppler_wipeoffs;
242 volk_gnsssdr::vector<std::complex<float>> d_fft_codes;
243 volk_gnsssdr::vector<std::complex<float>> d_data_buffer;
244 volk_gnsssdr::vector<lv_16sc_t> d_data_buffer_sc;
245 std::unique_ptr<gnss_fft_complex_fwd> d_fft_if;