Commit Graph
11 Commits
Author SHA1 Message Date
joebre 58e30deb54 Reintroduce dual_freq_assisted_doppler_narrowing as an opt-out for cross-signal Doppler narrowing
Acquisition_<signal>.dual_freq_assisted_doppler_narrowing (default
true, preserving current behavior) lets a specific signal's
acquisition be forced back to a full, unaided Doppler search even
while GNSS-SDR.assist_dual_frequency_acq is enabled for the other
signals. Knowingly reintroduces part of what f7948f4af retired under
#1097, under a clearer name -- see PR description for the regression
and spoofing-resilience evidence motivating it.
2026-09-24 17:16:42 +02:00
Carles Fernandez 1ae0eaeedb Fix unused private member, rename file_offset by seconds_to_skip, update comments 2026-09-17 20:54:25 +02:00
joebre 6c998ac558 Add missing REUSE/SPDX license header to the new reference conf
Matches every other .conf file's header in this repo.
2026-09-17 14:52:20 +02:00
joebre 93e9e00296 Add an EVK1029 dual-band Galileo E1+E5a / GPS L1+L5 reference conf
A complete, ready-to-edit example config for EVK1029_Signal_Source with
RF_channels=2, demonstrating the file_offset seeking option added in
this PR alongside the rest of the signal chain, acquisition/tracking
Doppler-narrowing assist, runtime visibility-aware acquisition search,
AGNSS aiding, and the remote monitor/telecommand interfaces -- all keys
verified against this branch's source to confirm they're implemented.
2026-09-17 14:25:34 +02:00
joebre 8f67752b9e Address review: memory safety, candidate selection, PFA, dump, naming
- Rename doppler_uncertanty -> doppler_uncertainty throughout (interface,
  adapter, block, comments, log message).

- Fix the out-of-bounds write and mis-detection in narrowed-mode
  activation: track it with an explicit d_doppler_search_narrowed flag,
  set directly in set_doppler_uncertainty() and guarded on
  d_num_doppler_bins > 1, instead of inferring it from
  "d_num_doppler_bins_active < d_num_doppler_bins". That inferred check
  broke two ways: for a 1-bin full grid (a valid, already-accepted
  config), it still forced 2 active bins, writing past the grid/wipeoff
  allocations sized to d_num_doppler_bins; for a 2-bin full grid, an
  actually-narrowed request computes the same active count as the full
  grid (2 < 2 is false), so it silently searched the full grid's own
  bin layout instead of the assisted {center, center + doppler_max}
  pair. Reproduced the out-of-bounds write directly (temporarily
  reverting to the inferred check crashes with "corrupted double-linked
  list" under the new NarrowingEnabledOneBinGrid test) and the
  mis-detection (NarrowingEnabledTwoBinGrid).

- Keep the noise-reference bin out of candidate selection: both
  max_to_input_power_statistic() and first_vs_second_peak_statistic()
  now take a separate candidate_count, used only for the peak-search
  loop bound; the CFAR path's own num_doppler_bins (used for the
  "opposite bin" reference lookup) is unchanged. In narrowed mode,
  candidate_count is 1 -- the noise-reference bin can no longer win and
  be reported as the acquisition result, regardless of its own power
  (verified against a live signal deliberately placed in the reference
  bin instead of the known/candidate bin: reverting this fix, both the
  CFAR and peak-ratio statistic mistakenly report the reference bin's
  Doppler as if it were the assisted center).

- Recalibrate the acceptance threshold for narrowed acquisition: adds
  d_threshold_narrowed, computed like d_threshold but with
  num_doppler_bins = 1 (the true candidate count in narrowed mode)
  instead of the full grid's bin count, since compute_threshold() folds
  the candidate count into the false-alarm probability and reusing the
  full-grid threshold in narrowed mode was effectively far stricter
  than the requested PFA. get_threshold() returns it whenever
  d_doppler_search_narrowed is true.

- Fix narrowed dump layout/metadata: ensure_dump_grid_allocated() now
  sizes acq_grid to d_num_doppler_bins_active (not the full grid width),
  matching what copy_magnitude_grid_to_dump_grid() actually writes each
  cycle -- this also makes narrow<->full transitions between dumps
  self-correcting. dump_results() writes accurate, mode-appropriate
  doppler_max/doppler_step (the same {0, doppler_max} encoding
  compute_statistics() uses internally when narrowed), plus new
  doppler_center and doppler_narrowed fields so offline post-processing
  can tell which encoding is in effect. Verified end to end against a
  live dump (NarrowedDumpMetadata).

- Strengthen Acq_Conf::enable_doppler_narrowing's doc comment (default,
  which implementations it applies to, its dependency on the caller
  passing doppler_uncertainty == 0) and add a commented usage example
  next to GNSS-SDR.assist_dual_frequency_acq in a dual-frequency
  Galileo E1B+E5a example config.

- Add tests/.../pcps_acquisition_doppler_narrowing_test.cc: 8 focused
  tests (narrowing enabled/disabled, 1-bin and 2-bin full-grid
  configurations, CFAR and peak-ratio statistics, a full-narrow-full
  transition, two-step acquisition with step-1 narrowing, and narrowed
  dump metadata), built on the same real-capture/known-ground-truth
  pattern as gps_l1_ca_pcps_acquisition_test.cc. Confirmed each targeted
  regression test actually fails without its corresponding fix before
  finalizing them.

Signed-off-by: joebre <joel.brenner@saphyrion.ch>
2026-08-31 09:38:13 +02:00
pedromiguelcp f1eaf5253e feat: add multichannel support for ntlab adapter 2025-07-11 14:36:26 +01:00
pedromiguelcp ef01835b28 feat: add signal source adapter for NTLab NT1065 2025-07-11 14:36:25 +01:00
Carles Fernandez 32e7dc03ae Fix typos detected by codespell 2025-02-10 13:20:14 +01:00
Carles Fernandez 2a98217f25 Remove references to the data folder 2024-10-04 19:43:07 +02:00
Carles Fernandez 58ded939ad Fix end of line format 2024-10-04 11:55:42 +02:00
kalmancito 90b2f804d8 [manag] tidy conf files 2024-01-29 11:44:59 +01:00