Skip to content

Struct dp_acq_state_t

ClassList > dp_acq_state_t

Streaming acquisition-engine state. More...

  • #include <acq_core.h>

Public Attributes

Type Name
uint8_t * band_mask
float _Complex * blk
size_t blk_epoch
float _Complex * blk_raw
uint8_t burst
double carrier_freq_hz
double chip_rate
double cn0_dbhz
size_t code_bins
size_t code_only_epochs
size_t coherent_bins
float _Complex * colbuf
float _Complex * colout
size_t consumed
dp_corr2d_state_t * corr
double doppler_rate
double doppler_res_hz
double doppler_span_hz
double doppler_uncertainty
int dsl_ready
size_t dsl_window_bins
uint64_t dwells
double epochs_per_symbol
float eta
float eta_nc
size_t frame_n
dp_f32_framer_t framer
double fs
size_t interp
int keep_surface
float * mag_buf
size_t max_peaks
size_t n
size_t n_held
size_t n_noncoh
size_t n_peaks
size_t n_surf
size_t n_twins
size_t nc_count
float * nc_surface
float noise_est
size_t noise_hi
size_t noise_lo
det_noise_mode_t noise_mode
float * noise_scratch
float _Complex * out_buf
acq_part_t * parts
double pd
double pd_burst
double pd_predicted
size_t peak_col
float peak_conc
float peak_mag
uint8_t * peak_mask
size_t peak_row
det_peak_t * peaks
double pfa
double pfa_cell
dp_pool_t * pool
float _Complex * rate_best
size_t rate_best_cap
size_t rate_best_h
float _Complex * rate_chirp
size_t rate_chirp_d
size_t rate_hyps
float _Complex * ref
size_t reps
dp_f32_t * ring
size_t ring_cap
uint64_t samples_consumed
size_t searched_bins
size_t sf
acq_shape_t shape
acq_surface_sink_fn sink
void * sink_ctx
uint32_t sink_decim
dp_fft_state_t * slow_fft
size_t spc
float * stat_surface
double straddle_loss
uint64_t surface_at
double symbol_rate
float test_stat
int threads
float threshold
float _Complex ** tile_col
dp_fft_state_t ** tile_inv
float _Complex ** tile_prod
size_t ** tile_rows
dp_fft_state_t ** tile_slow
acq_tlm_t tlm
uint32_t * twin_col
uint32_t * twin_row
uint8_t underpowered
dp_fft_state_t * wide_fwd
dp_fft_state_t * wide_inv
float _Complex * wide_prod
float _Complex * wide_ref_spec
float _Complex * wide_spec
size_t window_bins
float _Complex * yframe

Detailed Description

Allocate with dp_acq_create_burst() or dp_acq_create_continuous(); never stack-allocate.

Public Attributes Documentation

variable band_mask

uint8_t* dp_acq_state_t::band_mask;

n_surf; 1 = outside the searched band


variable blk

float _Complex* dp_acq_state_t::blk;

window_bins * coherent_bins * code_bins: the block's per-tile epoch correlations; NULL unless both exceed 1.


variable blk_epoch

size_t dp_acq_state_t::blk_epoch;

Epochs gathered in the current block (0 … coherent_bins-1).


variable blk_raw

float _Complex* dp_acq_state_t::blk_raw;

coherent_bins * code_bins: the block's raw epochs as pushed, for the tile-edge test of acq_resolve_tile_alias(); NULL unless blk is.


variable burst

uint8_t dp_acq_state_t::burst;

1 for an engine built by dp_acq_create_burst(), 0 for dp_acq_create_continuous(). Config.


variable carrier_freq_hz

double dp_acq_state_t::carrier_freq_hz;

RF carrier the Doppler is physically coupled to, Hz (dp_acq_set_carrier_freq_hz()); 0 = uncoupled: no code-rate hypothesis per tile, no dwell advance in the hand-off.


variable chip_rate

double dp_acq_state_t::chip_rate;

Chip rate (Hz).


variable cn0_dbhz

double dp_acq_state_t::cn0_dbhz;

Design C/N0 the search is sized for (dB-Hz); NaN (ACQ_CN0_NONE) means none was given.


variable code_bins

size_t dp_acq_state_t::code_bins;

One segment in samples = sf*spc.


variable code_only_epochs

size_t dp_acq_state_t::code_only_epochs;

Whole code-only epochs a waveform's code-only window holds at any chip phase (§2.1); 1 = no window, D = 1.


variable coherent_bins

size_t dp_acq_state_t::coherent_bins;

Coherent depth = slow-time FFT length (<= reps on a burst engine). In wideband mode the block depth D inside every tile (file doc); 1 = one epoch, the continuous engine's default.


variable colbuf

float _Complex* dp_acq_state_t::colbuf;

Gathered column scratch (coherent_bins).


variable colout

float _Complex* dp_acq_state_t::colout;

FFT'd column scratch (coherent_bins).


variable consumed

size_t dp_acq_state_t::consumed;

Input samples the last push took.


variable corr

dp_corr2d_state_t* dp_acq_state_t::corr;

Single-row-ref correlator (dwell=1).


variable doppler_rate

double dp_acq_state_t::doppler_rate;

Doppler rate the depth is bounded against (Hz/s); 0 = no bound from the rate.


variable doppler_res_hz

double dp_acq_state_t::doppler_res_hz;

Doppler bin width = chip_rate/(sf*coherent_bins).


variable doppler_span_hz

double dp_acq_state_t::doppler_span_hz;

Native Doppler half-range = chip_rate/(2*sf).


variable doppler_uncertainty

double dp_acq_state_t::doppler_uncertainty;

One-sided Doppler search half-range (Hz); 0 = full native span.


variable dsl_ready

int dp_acq_state_t::dsl_ready;

1 once acq_shape_t::dsl holds its value: it is computed on its first read, dp_acq_dsl_db(), not by the constructor a sweep of the ambiguity that only a peak-list consumer reads.


variable dsl_window_bins

size_t dp_acq_state_t::dsl_window_bins;

The tiles of the grid the engine was BUILT with, which acq_shape_t::dsl is defined on; a grid pinned later does not move it.


variable dwells

uint64_t dp_acq_state_t::dwells;

dwells decided since create/reset


variable epochs_per_symbol

double dp_acq_state_t::epochs_per_symbol;

(chip_rate/sf)/symbol_rate; 0 when symbol_rate <= 0.


variable eta

float dp_acq_state_t::eta;

Raw per-cell Rayleigh amplitude threshold.


variable eta_nc

float dp_acq_state_t::eta_nc;

Non-coherent CFAR threshold (order-N_nc Marcum).


variable frame_n

size_t dp_acq_state_t::frame_n;

Raw samples consumed from the ring per iteration: == n natively; == code_bins in wideband mode (one epoch's worth — window_bins hypotheses come from ONE shared epoch, not from consuming more input).


variable framer

dp_f32_framer_t dp_acq_state_t::framer;

Any chunk in, frame_n-sample frames out.


variable fs

double dp_acq_state_t::fs;

Sample rate (Hz) = chip_rate * spc.


variable interp

size_t dp_acq_state_t::interp;

Doppler-axis interpolation factor of the inverse (1 = none). Zero-padding the product in frequency is exact band-limited interpolation, so a peak landing between two slow-time bins is no longer attenuated by the scalloping loss that made a half-bin burst invisible at any SNR (gh-1002). It adds resolution to the SURFACE only: the reported bin is mapped back to the native grid, so no consumer's arithmetic changes.


variable keep_surface

int dp_acq_state_t::keep_surface;

1 = normalise every decided dwell into stat_surface for acq_surface(); set by a caller or by dp_acq_set_surface_sink()


variable mag_buf

float* dp_acq_state_t::mag_buf;

|out_buf| (n).


variable max_peaks

size_t dp_acq_state_t::max_peaks;

list capacity per dwell (1 = the maximum)


variable n

size_t dp_acq_state_t::n;

NATIVE grid size in samples: coherent_bins * window_bins * code_bins (both may exceed 1: D rows inside each tile). This is the INPUT frame and the count of statistically independent cells it is what the threshold ladder is sized from, and it is what doppler_bin is reported on.


variable n_held

size_t dp_acq_state_t::n_held;

the last dwell's picks held as twins (§7.1)


variable n_noncoh

size_t dp_acq_state_t::n_noncoh;

Non-coherent looks per detection (1 = coherent).


variable n_peaks

size_t dp_acq_state_t::n_peaks;

picks in the last dwell, held ones too


variable n_surf

size_t dp_acq_state_t::n_surf;

Cells in the correlation SURFACE = interp * n. The inverse transform is evaluated on a finer Doppler grid, so the buffers, the peak search and the CFAR reference span this and not n.


variable n_twins

size_t dp_acq_state_t::n_twins;

picks carried over from the last dwell


variable nc_count

size_t dp_acq_state_t::nc_count;

Coherent dumps in the current look (0…n_noncoh-1).


variable nc_surface

float* dp_acq_state_t::nc_surface;

Non-coherent |·|² accumulator (n); NULL unless n_noncoh > 1.


variable noise_est

float dp_acq_state_t::noise_est;

variable noise_hi

size_t dp_acq_state_t::noise_hi;

Last CFAR reference bin (inclusive).


variable noise_lo

size_t dp_acq_state_t::noise_lo;

First CFAR reference bin (inclusive).


variable noise_mode

det_noise_mode_t dp_acq_state_t::noise_mode;

CFAR aggregation mode.


variable noise_scratch

float* dp_acq_state_t::noise_scratch;

Scratch for the median sort (n).


variable out_buf

float _Complex* dp_acq_state_t::out_buf;

corr2d dump output (n) — also the wideband mode's (window_bins, code_bins) grid.


variable parts

acq_part_t* dp_acq_state_t::parts;

window_bins partial slots of the decided surface's per-tile passes


variable pd

double dp_acq_state_t::pd;

Target detection probability.


variable pd_burst

double dp_acq_state_t::pd_burst;

Predicted Pd of one BURST of reps repetitions at cn0_dbhz: the dwells are aligned to the stream, so the preamble lands at a uniform offset and spans about reps/D of them, whole or partial; the burst is detected when any one is. Averaged over that alignment and the same straddle nodes as pd_predicted (one node for every dwell of a burst: they share its Doppler and delay). What a burst engine sizes on and sets underpowered from (doppler#1498). Assumes the preamble is exactly reps periods. NAN on a continuous engine, with n_noncoh > 1, or with no design C/N0.


variable pd_predicted

double dp_acq_state_t::pd_predicted;

Predicted Pd at cn0_dbhz and the chosen grid of ONE dwell lying wholly inside the signal (a burst engine's is judged on pd_burst instead): the AVERAGE Pd over the straddle priors (slow-time scalloping over the INTERPOLATED bin the peak search samples, intra-segment rotation, code sample offset — quadrature over uniform priors), not the on-grid best case, and not Pd at the mean amplitude (which Jensen makes optimistic). Conservative by construction: the engine takes the maximum over an interpolated surface, which the Marcum form does not credit (doppler#1183, #1064). NAN when no design C/N0 was given.


variable peak_col

size_t dp_acq_state_t::peak_col;

variable peak_conc

float dp_acq_state_t::peak_conc;

the strongest pick's column concentration


variable peak_mag

float dp_acq_state_t::peak_mag;

variable peak_mask

uint8_t* dp_acq_state_t::peak_mask;

n_surf; the working mask


variable peak_row

size_t dp_acq_state_t::peak_row;

variable peaks

det_peak_t* dp_acq_state_t::peaks;

max_peaks: the last dwell's picks


variable pfa

double dp_acq_state_t::pfa;

Target system false-alarm probability (stored for configure_search_raw's threshold re-derivation).


variable pfa_cell

double dp_acq_state_t::pfa_cell;

Sidak per-cell false-alarm probability, split over the cells a dwell's maximum ranges over: the in-band rows of the interpolated surface, times code_bins, times the rate hypotheses.


variable pool

dp_pool_t* dp_acq_state_t::pool;

NULL or one thread = serial


variable rate_best

float _Complex* dp_acq_state_t::rate_best;

n_surf cells: the best hypothesis' surface while the others are searched.


variable rate_best_cap

size_t dp_acq_state_t::rate_best_cap;

Cells rate_best holds.


variable rate_best_h

size_t dp_acq_state_t::rate_best_h;

Winning hypothesis of the last dwell.


variable rate_chirp

float _Complex* dp_acq_state_t::rate_chirp;

rate_hyps * rate_chirp_d slow-time de-chirp phasors; NULL while rate_hyps == 1. Rebuilt lazily when coherent_bins moves.


variable rate_chirp_d

size_t dp_acq_state_t::rate_chirp_d;

The coherent_bins rate_chirp was built for.


variable rate_hyps

size_t dp_acq_state_t::rate_hyps;

Doppler-rate hypotheses searched (>= 1); 1 = none: the engine as it ran without them. dp_acq_create_burst()'s rate_hypotheses.


variable ref

float _Complex* dp_acq_state_t::ref;

Single-row reference (n), owned.


variable reps

size_t dp_acq_state_t::reps;

Max coherent code repetitions (the ceiling); always 1 for an engine built via dp_acq_create_continuous().


variable ring

dp_f32_t* dp_acq_state_t::ring;

The carry's storage: bound to framer, freed by destroy.


variable ring_cap

size_t dp_acq_state_t::ring_cap;

Ring capacity in complex samples.


variable samples_consumed

uint64_t dp_acq_state_t::samples_consumed;

Total framed samples (the state's offset).


variable searched_bins

size_t dp_acq_state_t::searched_bins;

Doppler bins scanned (<= coherent_bins; du prior).


variable sf

size_t dp_acq_state_t::sf;

Chips per PN segment (= len(code)).


variable shape

acq_shape_t dp_acq_state_t::shape;

The preamble's correlation shape (zone, delay straddle); config, filled by the constructor.


variable sink

acq_surface_sink_fn dp_acq_state_t::sink;

NULL = none


variable sink_ctx

void* dp_acq_state_t::sink_ctx;

variable sink_decim

uint32_t dp_acq_state_t::sink_decim;

the sink sees every sink_decim-th dwell


variable slow_fft

dp_fft_state_t* dp_acq_state_t::slow_fft;

Length-coherent_bins forward FFT (slow time).


variable spc

size_t dp_acq_state_t::spc;

Samples per chip (chip-rate oversample factor).


variable stat_surface

float* dp_acq_state_t::stat_surface;

n_surf: the last decided dwell in the gate's units; allocated on the first dwell decided with keep_surface set


variable straddle_loss

double dp_acq_state_t::straddle_loss;

Mean AMPLITUDE derating from grid straddle — a diagnostic summary (~20*log10 of it in dB); sizing and pd_predicted average Pd itself over the priors. Derived config, recomputed by create().


variable surface_at

uint64_t dp_acq_state_t::surface_at;

samples_consumed of that dwell; 0 = none


variable symbol_rate

double dp_acq_state_t::symbol_rate;

Continuous data-symbol rate (Hz); 0 = no known data-modulation clock. Diagnostic only on an engine built via dp_acq_create_continuous() (which always forces coherent_bins=1 regardless) — informational, doesn't feed sizing.


variable test_stat

float dp_acq_state_t::test_stat;

variable threads

int dp_acq_state_t::threads;

workers the pool runs on, the caller included; 1 without a pool


variable threshold

float dp_acq_state_t::threshold;

CFAR gate on test_stat (theta); coherent path.


variable tile_col

float _Complex** dp_acq_state_t::tile_col;

window_bins column scratch: a chunk of ACQ_COL_CHUNK columns of D*interp (zero tails) in, then out; NULL at D == 1


variable tile_inv

dp_fft_state_t** dp_acq_state_t::tile_inv;

window_bins inverse plans (code_bins)


variable tile_prod

float _Complex** dp_acq_state_t::tile_prod;

window_bins product buffers


variable tile_rows

size_t** dp_acq_state_t::tile_rows;

window_bins tables of D*interp: the surface row of each slow-time row of the tile (acq_block_row), once per grid rather than per cell; NULL at D == 1


variable tile_slow

dp_fft_state_t** dp_acq_state_t::tile_slow;

window_bins slow-time plans (D*interp), NULL at D == 1


variable tlm

acq_tlm_t dp_acq_state_t::tlm;

telemetry attachment; ctx NULL = detached


variable twin_col

uint32_t* dp_acq_state_t::twin_col;

max_peaks: last dwell's picks, code phases


variable twin_row

uint32_t* dp_acq_state_t::twin_row;

max_peaks: last dwell's picks, native rows


variable underpowered

uint8_t dp_acq_state_t::underpowered;

1 when the Pd the engine is judged on falls short of pd: pd_burst on a burst engine, pd_predicted where pd_burst is NAN. Never without a design C/N0 there is no target to be under.


variable wide_fwd

dp_fft_state_t* dp_acq_state_t::wide_fwd;

Forward FFT, length code_bins.


variable wide_inv

dp_fft_state_t* dp_acq_state_t::wide_inv;

Inverse FFT, length code_bins.


variable wide_prod

float _Complex* dp_acq_state_t::wide_prod;

Rolled-spectrum * wide_ref_spec product, length code_bins; reused per hypothesis.


variable wide_ref_spec

float _Complex* dp_acq_state_t::wide_ref_spec;

conj(FFT(replica row)), length code_bins.


variable wide_spec

float _Complex* dp_acq_state_t::wide_spec;

FFT(raw epoch), length code_bins; once/epoch.


variable window_bins

size_t dp_acq_state_t::window_bins;

Wideband frequency-window hypotheses (1 = disabled/native — see the file doc comment).


variable yframe

float _Complex* dp_acq_state_t::yframe;

Slow-time-FFT'd frame (n) fed to corr.



The documentation for this class was generated from the following file native/inc/doppler/acq/acq_core.h