Skip to content

Struct dp_async_dsss_receiver_state_t

ClassList > dp_async_dsss_receiver_state_t

Composed receiver state. More...

  • #include <async_dsss_receiver_core.h>

Public Attributes

Type Name
dp_acq_state_t * acq
bool align_pending
uint64_t both_down_samples
dp_carrier_acq_state_t * ca
dp_costas_state_t car
float _Complex * car_carry_buf
size_t car_carry_len
int car_coasting
dp_costas_state_t car_frozen
dp_costas_state_t car_held
float _Complex * car_wiped_buf
double carrier_freq_hz
double chip_rate
double cn0_dbhz
double cn0_dbhz_est
uint8_t * code
size_t code_len
double code_only_s
int differential
dp_dll_state_t * dll
double doppler_hz_est
double doppler_rate
double excl
int had_lock
double lock_alpha
double lock_den
double lock_metric
double lock_num
double lost_confirm_s
uint64_t lost_confirm_samples
int m
int n
size_t n_excl
double pd
double pfa
size_t rank
dp_RateConverter_state_t * rc
bool reacquire
double refine_design_margin_db
dp_dll_state_t * refine_dll
float _Complex * refine_dll_out_buf
size_t refine_dll_out_cap
double refine_max_error_db
size_t refine_max_n_blocks
size_t refine_min_blocks
size_t refine_n_fft
uint64_t refine_periods
dp_RateConverter_state_t * refine_rc
float _Complex * refine_rc_out_buf
size_t refine_rc_out_cap
uint64_t refine_samples_fed
size_t refine_samples_per_symbol
size_t refine_segments
bool refine_sequential
size_t refine_zero_pad
uint64_t refused_hits
dp_mpsk_receiver_state_t * rx
uint64_t samples_in
double seed_chip_phase
double seed_doppler_hz_est
size_t segments
size_t spc
size_t sps
int state
uint64_t state_samples
dp_lockdet_state_t sym_lockdet
double symbol_rate
dp_tlm_t * tlm
uint32_t tlm_decim
int32_t tlm_handover
char tlm_prefix
int32_t tlm_refused
int32_t tlm_state
int32_t tlm_sym_lock
int32_t tlm_sym_locked
float _Complex * track_dll_out_buf
size_t track_dll_out_cap
float _Complex * track_rc_out_buf
size_t track_rc_out_cap
size_t tsamps

Detailed Description

Every child is allocated at create() with a placeholder seed (phase 0, no Doppler) and REBUILT (not freed to NULL) on every real transition: a fixed shape, independent of state. Treat all fields as internal (use the getters).

Public Attributes Documentation

variable acq

dp_acq_state_t* dp_async_dsss_receiver_state_t::acq;

The embedded search.


variable align_pending

bool dp_async_dsss_receiver_state_t::align_pending;

Running: the searcher was reset and discards input to the next multiple of coherent_bins * code_len * spc before its next dwell starts.


variable both_down_samples

uint64_t dp_async_dsss_receiver_state_t::both_down_samples;

Running: consecutive samples fed while tracking with BOTH lock flags down the release clock; lost keeps it counting. With reacquire it counts the symbol lock flag alone.


variable ca

dp_carrier_acq_state_t* dp_async_dsss_receiver_state_t::ca;

variable car

dp_costas_state_t dp_async_dsss_receiver_state_t::car;

variable car_carry_buf

float _Complex* dp_async_dsss_receiver_state_t::car_carry_buf;

variable car_carry_len

size_t dp_async_dsss_receiver_state_t::car_carry_len;

variable car_coasting

int dp_async_dsss_receiver_state_t::car_coasting;

Running: the carrier loop is held.


variable car_frozen

dp_costas_state_t dp_async_dsss_receiver_state_t::car_frozen;

variable car_held

dp_costas_state_t dp_async_dsss_receiver_state_t::car_held;

The carrier as of the last period with both lock flags up, restored on entering the hold.


variable car_wiped_buf

float _Complex* dp_async_dsss_receiver_state_t::car_wiped_buf;

variable carrier_freq_hz

double dp_async_dsss_receiver_state_t::carrier_freq_hz;

nominal RF carrier, Hz; > 0 enables the carrier->code rate aiding, 0 = off (config, not running state restored by create).


variable chip_rate

double dp_async_dsss_receiver_state_t::chip_rate;

variable cn0_dbhz

double dp_async_dsss_receiver_state_t::cn0_dbhz;

Design C/N0 feeds both Acquisition's own sizing and (derated) CarrierAcquisition's design_snr on every refine-chain (re)build.


variable cn0_dbhz_est

double dp_async_dsss_receiver_state_t::cn0_dbhz_est;

The seed's C/N0 estimate (its own hit's, or an outside seed's); nothing refreshes it.


variable code

uint8_t* dp_async_dsss_receiver_state_t::code;

variable code_len

size_t dp_async_dsss_receiver_state_t::code_len;

variable code_only_s

double dp_async_dsss_receiver_state_t::code_only_s;

Config: the code-only window, seconds (create()'s; restored by create).


variable differential

int dp_async_dsss_receiver_state_t::differential;

variable dll

dp_dll_state_t* dp_async_dsss_receiver_state_t::dll;

variable doppler_hz_est

double dp_async_dsss_receiver_state_t::doppler_hz_est;

The seed's Doppler while refining; the CarrierAcquisition-refined value once tracking. A refused hand-over zeroes both, as reset() does.


variable doppler_rate

double dp_async_dsss_receiver_state_t::doppler_rate;

Config: the searcher's rate bound, Hz/s.


variable excl

double dp_async_dsss_receiver_state_t::excl[ASYNC_DSSS_RX_MAX_EXCLUSIONS];

those phases, chips, in [0, code_len), the status() convention.


variable had_lock

int dp_async_dsss_receiver_state_t::had_lock;

Running: both lock flags have been up since the hand-over. After that both down holds both loops (dp_dll_set_coast, the carrier's own hold) so a departed emitter's receiver cannot free-run onto a neighbour's code (#1271).


variable lock_alpha

double dp_async_dsss_receiver_state_t::lock_alpha;

EMA coeff = 1/dwell (dwell >= 30).


variable lock_den

double dp_async_dsss_receiver_state_t::lock_den;

variable lock_metric

double dp_async_dsss_receiver_state_t::lock_metric;

variable lock_num

double dp_async_dsss_receiver_state_t::lock_num;

variable lost_confirm_s

double dp_async_dsss_receiver_state_t::lost_confirm_s;

Config: both flags down for longer than this is "gone"; 0 = never.


variable lost_confirm_samples

uint64_t dp_async_dsss_receiver_state_t::lost_confirm_samples;

lost_confirm_s at the input rate.


variable m

int dp_async_dsss_receiver_state_t::m;

variable n

int dp_async_dsss_receiver_state_t::n;

MpskReceiver's terminal outputs per symbol (m_out: even, 2..8).


variable n_excl

size_t dp_async_dsss_receiver_state_t::n_excl;

set_exclusions(): code phases held.


variable pd

double dp_async_dsss_receiver_state_t::pd;

Also CarrierAcquisition's own pd.


variable pfa

double dp_async_dsss_receiver_state_t::pfa;

Also CarrierAcquisition's own pfa.


variable rank

size_t dp_async_dsss_receiver_state_t::rank;

set_rank(): which surviving peak of a dwell the search takes, 0 = the strongest.


variable rc

dp_RateConverter_state_t* dp_async_dsss_receiver_state_t::rc;

variable reacquire

bool dp_async_dsss_receiver_state_t::reacquire;

Config: release on symbol lock alone and reset to searching, never lost (see dp_async_dsss_receiver_create()).


variable refine_design_margin_db

double dp_async_dsss_receiver_state_t::refine_design_margin_db;

variable refine_dll

dp_dll_state_t* dp_async_dsss_receiver_state_t::refine_dll;

variable refine_dll_out_buf

float _Complex* dp_async_dsss_receiver_state_t::refine_dll_out_buf;

variable refine_dll_out_cap

size_t dp_async_dsss_receiver_state_t::refine_dll_out_cap;

variable refine_max_error_db

double dp_async_dsss_receiver_state_t::refine_max_error_db;

variable refine_max_n_blocks

size_t dp_async_dsss_receiver_state_t::refine_max_n_blocks;

variable refine_min_blocks

size_t dp_async_dsss_receiver_state_t::refine_min_blocks;

Floor on the refine's dwell, in blocks (default 7). The refine's detection sizing needs fewer blocks the higher the C/N0, but the estimate the carrier chain must pull in from does not sharpen with it (#1265). Set with set_refine_min_blocks(), which carries the measurement.


variable refine_n_fft

size_t dp_async_dsss_receiver_state_t::refine_n_fft;

variable refine_periods

uint64_t dp_async_dsss_receiver_state_t::refine_periods;

Diagnostic: code periods the refine stage processed since its chain was built. It stops at the period the carrier estimate decides in, so it is the same whatever the block size (#2395). Not in the state blob: it changes nothing, and a restore restarts it.


variable refine_rc

dp_RateConverter_state_t* dp_async_dsss_receiver_state_t::refine_rc;

variable refine_rc_out_buf

float _Complex* dp_async_dsss_receiver_state_t::refine_rc_out_buf;

variable refine_rc_out_cap

size_t dp_async_dsss_receiver_state_t::refine_rc_out_cap;

variable refine_samples_fed

uint64_t dp_async_dsss_receiver_state_t::refine_samples_fed;

Raw samples fed into the refine pipeline since it was last (re)built. At the hand-over, fed minus consumed is the tail of the last call that goes straight on to the live chain. The clock dilation is taken over the consumed count, from the refine's blocks, not over this.


variable refine_samples_per_symbol

size_t dp_async_dsss_receiver_state_t::refine_samples_per_symbol;

variable refine_segments

size_t dp_async_dsss_receiver_state_t::refine_segments;

dp_dll_lookback_segments() result, computed once at create: config for refine_dll's layout, needed again by set_state's check.


variable refine_sequential

bool dp_async_dsss_receiver_state_t::refine_sequential;

variable refine_zero_pad

size_t dp_async_dsss_receiver_state_t::refine_zero_pad;

variable refused_hits

uint64_t dp_async_dsss_receiver_state_t::refused_hits;

Searching hits the seed domain refused as seeds, since create or reset. In the blob with state_samples, so a resumed receiver's status matches an unbroken run's.


variable rx

dp_mpsk_receiver_state_t* dp_async_dsss_receiver_state_t::rx;

variable samples_in

uint64_t dp_async_dsss_receiver_state_t::samples_in;

Running: input samples fed since create. Never reset: every receiver in a pool is fed every sample from create, so this IS the shared sample count the searchers' dwells align to.


variable seed_chip_phase

double dp_async_dsss_receiver_state_t::seed_chip_phase;

The seed's chip phase; the live chain starts from it advanced by the clock dilation over the refine, not from wherever the refine-stage Dll drifted.


variable seed_doppler_hz_est

double dp_async_dsss_receiver_state_t::seed_doppler_hz_est;

Original (unrefined) handoff Doppler estimate.


variable segments

size_t dp_async_dsss_receiver_state_t::segments;

The live-tracking Dll's partial correlations per code period (refine_segments is the refine collector's).


variable spc

size_t dp_async_dsss_receiver_state_t::spc;

variable sps

size_t dp_async_dsss_receiver_state_t::sps;

MpskReceiver's samples per symbol.


variable state

int dp_async_dsss_receiver_state_t::state;

One of the ASYNC_DSSS_RX_SEARCHING .. _LOST values.


variable state_samples

uint64_t dp_async_dsss_receiver_state_t::state_samples;

Running: samples fed since the current state was entered.


variable sym_lockdet

dp_lockdet_state_t dp_async_dsss_receiver_state_t::sym_lockdet;

variable symbol_rate

double dp_async_dsss_receiver_state_t::symbol_rate;

variable tlm

dp_tlm_t* dp_async_dsss_receiver_state_t::tlm;

NULL = detached.


variable tlm_decim

uint32_t dp_async_dsss_receiver_state_t::tlm_decim;

The attach's decimation.


variable tlm_handover

int32_t dp_async_dsss_receiver_state_t::tlm_handover;

"<prefix>.handover_hz" id, -1 detached.


variable tlm_prefix

char dp_async_dsss_receiver_state_t::tlm_prefix[DP_TLM_NAME_MAX];

The attach's prefix.


variable tlm_refused

int32_t dp_async_dsss_receiver_state_t::tlm_refused;

"<prefix>.refused" id, -1 detached.


variable tlm_state

int32_t dp_async_dsss_receiver_state_t::tlm_state;

"<prefix>.state" id, -1 detached.


variable tlm_sym_lock

int32_t dp_async_dsss_receiver_state_t::tlm_sym_lock;

"<prefix>.sym.lock" id, -1 detached.


variable tlm_sym_locked

int32_t dp_async_dsss_receiver_state_t::tlm_sym_locked;

"<prefix>.sym.locked" id, -1 detached.


variable track_dll_out_buf

float _Complex* dp_async_dsss_receiver_state_t::track_dll_out_buf;

variable track_dll_out_cap

size_t dp_async_dsss_receiver_state_t::track_dll_out_cap;

variable track_rc_out_buf

float _Complex* dp_async_dsss_receiver_state_t::track_rc_out_buf;

variable track_rc_out_cap

size_t dp_async_dsss_receiver_state_t::track_rc_out_cap;

variable tsamps

size_t dp_async_dsss_receiver_state_t::tsamps;

code_len*spc one code period, samples.



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