Struct dp_burst_demod_state_t¶
ClassList > dp_burst_demod_state_t
BurstDemod state. Allocate with dp_burst_demod_create_desc() .
#include <burst_demod_core.h>
Public Attributes¶
| Type | Name |
|---|---|
| uint8_t * | acq_code |
| size_t | acq_reps |
| size_t | acq_sf |
| double | carrier_hz |
| double | chip_rate |
| uint8_t * | data_code |
| size_t | data_sf |
| double | est_cn0_dbhz |
| double | est_freq_hz |
| double | est_n0 |
| double | est_rate_hz |
| size_t | est_segments |
| double | est_timing_chips |
| double | f0_prior |
| size_t | frame_offset |
| size_t | frame_syms |
| float * | llr |
| double | max_rate |
| size_t | n_llr |
| size_t | n_part |
| size_t | n_sym |
| size_t | n_symbols |
| float _Complex * | part |
| dp_ppe_state_t * | ppe |
| size_t | spc |
| size_t | start |
| float _Complex * | sym |
| int8_t * | sync |
| size_t | sync_len |
Public Attributes Documentation¶
variable acq_code¶
owned acq preamble code (0/1), length acq_sf.
variable acq_reps¶
acq preamble repetitions.
variable acq_sf¶
acq code length (chips).
variable carrier_hz¶
RF carrier (Hz) for code-Doppler; 0 = ignore.
variable chip_rate¶
chip rate (Hz).
variable data_code¶
owned data spreading code (0/1), length data_sf.
variable data_sf¶
data spreading factor (chips/symbol).
variable est_cn0_dbhz¶
Carrier-to-noise DENSITY, dB-Hz, referred to the CHANNEL: the realized symbol estimate 1/est_n0 lifted by the symbol rate and corrected for the despreading loss that est_timing_chips measures. Sample-rate invariant, so it survives a front-end rate change, and it does not move when the receiver's own timing is off by a fraction of a chip which a realized SNR does, by 4.8 dB at half a chip. Zero until a demod() produces a frame. DEGRADED BY RESIDUAL PHASE, by construction: est_n0 reads the noise off the quadrature, and a rotation puts signal there, so an untracked Doppler rate reads as a worse link 101 dB worse on a noiseless input. The realized link IS worse, so the number is not wrong; it simply cannot say WHICH of the two happened. dp_burst_demod_symbols() can, because only Q against I separates them (doppler#1087). See doppler#1304.
variable est_freq_hz¶
estimated residual Doppler (Hz).
variable est_n0¶
Noise power the LLRs are scaled by, referred to unit symbol amplitude. Published so a caller can undo the scaling, or compare bursts by it.
variable est_rate_hz¶
estimated Doppler rate (Hz/s).
variable est_segments¶
partials per acq period for the estimate.
variable est_timing_chips¶
Burst-start error the demodulator MEASURED, in chips, signed, relative to the start given to set_prior(). The whole-SAMPLE part of it was removed before despreading; only the fraction of a sample that a shift cannot remove is still a loss, and only that fraction is taken out of est_cn0_dbhz. The symbols keep the loss either way. Acquisition resolves a start to one SAMPLE, so a residual here is structural rather than a caller's error. BOUNDED at half a chip, which is the metric's limit and not a budget: a whole-chip slip re-aligns every partial against its neighbour's chip and reads as no slip at all. A magnitude AT that bound therefore means the search saturated the start is further out than this object can measure, and est_cn0_dbhz is then a floor rather than a measurement. Fixing that is acquisition's, which is what resolves a start.
variable f0_prior¶
coarse Doppler prior (cycles/sample).
variable frame_offset¶
symbol offset of the sync word.
variable frame_syms¶
symbols the frame occupies, sync word included — the description's layout length, read at create. What they MEAN is the frame description's business, one layer up.
variable llr¶
The frame's soft bits, mpsk_soft_demap's convention: positive means bit 0, so L < 0 is the hard decision demod() returned. Valid until the next demod(); n_llr of them.
variable max_rate¶
chirp-rate search half-span (cycles/sample^2).
variable n_llr¶
LLRs the last demod() wrote (the frame's length).
variable n_part¶
variable n_sym¶
Symbols the last demod() wrote (the frame's length).
variable n_symbols¶
despread data symbols produced.
variable part¶
preamble partials scratch (acq_reps*est_seg).
variable ppe¶
feedforward (rate x freq) estimator.
variable spc¶
samples per chip.
variable start¶
preamble start sample in the burst.
variable sym¶
The frame's DEROTATED, unit-normalised complex symbols the constellation the LLRs are the real part of. Built either way to compute the projection and the noise estimate, and freed unread until doppler#1087: for BPSK a residual phase error and a genuine amplitude loss are indistinguishable in every real-only statistic (a rotation scales Re by cos(phi) without adding noise), so |LLR|, its spread and the BER all agree while only the quadrature separates them. Valid until the next demod(); n_sym of them.
variable sync¶
owned sync word as +/-1, length sync_len — the correlation template, and the only thing this object knows about the frame's CONTENT.
variable sync_len¶
sync word length (symbols).
The documentation for this class was generated from the following file native/inc/doppler/burst_demod/burst_demod_core.h