File despreader_core.h¶
FileList > despreader > despreader_core.h
Go to the source code of this file
Despreader component API. More...
#include "clib_common.h"#include "dp_state.h"#include "jm_perf.h"#include "loop_filter/loop_filter_core.h"
Classes¶
| Type | Name |
|---|---|
| struct | despreader_state_t Despreader state. |
Public Functions¶
| Type | Name |
|---|---|
| size_t | despreader_bits (despreader_state_t * state, const float complex * x, size_t x_len, uint8_t * out, size_t max_out) Despread a CF32 block; emit one hard BPSK bit (0/1) per code period. |
| size_t | despreader_bits_max_out (despreader_state_t * state) Upper bound on bits despreader_bits can emit (0; see despreader_steps_max_out). |
| despreader_state_t * | despreader_create (const uint8_t * code, size_t code_len, size_t sf, size_t sps, double init_norm_freq, double init_chip_phase, double bn_carrier, double bn_code) Create a despreader instance. |
| void | despreader_destroy (despreader_state_t * state) Destroy a despreader instance and release all memory. |
| double | despreader_get_bn_carrier (const despreader_state_t * state) Carrier (Costas) loop noise bandwidth, normalized to the symbol rate. |
| double | despreader_get_bn_code (const despreader_state_t * state) Code (DLL) loop noise bandwidth, normalized to the symbol rate. |
| double | despreader_get_code_phase (const despreader_state_t * state) Current tracked code phase within the symbol, chips. |
| double | despreader_get_lock_metric (const despreader_state_t * state) Lock indicator in [0,1] (EMA of |Re prompt|/|prompt|; ~1 = locked). |
| double | despreader_get_norm_freq (const despreader_state_t * state) Current carrier frequency estimate, cycles/sample. |
| double | despreader_get_snr_est (const despreader_state_t * state) Post-despread SNR estimate (EMA of (Re prompt)^2 / (Im prompt)^2). |
| void | despreader_get_state (const despreader_state_t * state, void * blob) |
| void | despreader_reset (despreader_state_t * state) Reset Despreader to its post-create state. |
| void | despreader_set_acq (despreader_state_t * state, const uint8_t * acq_code, size_t acq_code_len, size_t acq_reps) Enable preamble-aided pull-in with a distinct acquisition code. |
| void | despreader_set_bn_carrier (despreader_state_t * state, double val) Set the carrier loop bandwidth (recomputes the loop gains). |
| void | despreader_set_bn_code (despreader_state_t * state, double val) Set the code loop bandwidth (recomputes the loop gains). |
| void | despreader_set_norm_freq (despreader_state_t * state, double val) Override the carrier frequency estimate, cycles/sample (re-seed). |
| int | despreader_set_state (despreader_state_t * state, const void * blob) |
| size_t | despreader_state_bytes (const despreader_state_t * state) |
| size_t | despreader_steps (despreader_state_t * state, const float complex * x, size_t x_len, float complex * out, size_t max_out) Despread a CF32 block; emit one complex prompt symbol per code period. |
| size_t | despreader_steps_max_out (despreader_state_t * state) Upper bound on symbols despreader_steps can emit (0; the caller sizes the output buffer to the input length, which always suffices). |
Macros¶
| Type | Name |
|---|---|
| define | DESPREADER_STATE_MAGIC [**DP\_FOURCC**](dp__state_8h.md#define-dp_fourcc) ('D','S','P','R') |
| define | DESPREADER_STATE_VERSION 1u |
Detailed Description¶
Lifecycle: create -> [step / steps / reset]* -> destroy
Example:
despreader_state_t *obj = despreader_create(NULL, 0, 1, 2, 0.0, 0.0, 0.01, 0.002);
float complex y = despreader_step(obj, 0.0f + 0.0f * I);
despreader_destroy(obj);
Public Functions Documentation¶
function despreader_bits¶
Despread a CF32 block; emit one hard BPSK bit (0/1) per code period.
size_t despreader_bits (
despreader_state_t * state,
const float complex * x,
size_t x_len,
uint8_t * out,
size_t max_out
)
Same streaming kernel as despreader_steps(), but emits the hard decision crealf(prompt) >= 0 instead of the complex symbol.
Parameters:
stateMust be non-NULL.xInput CF32 samples, lengthx_len.x_lenNumber of input samples.outOutput buffer for bits (>= max_out).max_outCapacity ofoutin bits.
Returns:
Number of bits written.
function despreader_bits_max_out¶
Upper bound on bits despreader_bits can emit (0; see despreader_steps_max_out).
function despreader_create¶
Create a despreader instance.
despreader_state_t * despreader_create (
const uint8_t * code,
size_t code_len,
size_t sf,
size_t sps,
double init_norm_freq,
double init_chip_phase,
double bn_carrier,
double bn_code
)
Parameters:
codeData spreading code (0/1 chips), lengthcode_len; copied.code_lenLength ofcodein chips (>= sf).sfsf (default: 1).spssps (default: 2).init_norm_freqinit_norm_freq (default: 0.0).init_chip_phaseinit_chip_phase (default: 0.0).bn_carrierbn_carrier (default: 0.01).bn_codebn_code (default: 0.002).
Returns:
Heap-allocated state, or NULL on allocation failure.
Note:
Caller must call despreader_destroy() when done.
function despreader_destroy¶
Destroy a despreader instance and release all memory.
Parameters:
stateMay be NULL.
function despreader_get_bn_carrier¶
Carrier (Costas) loop noise bandwidth, normalized to the symbol rate.
function despreader_get_bn_code¶
Code (DLL) loop noise bandwidth, normalized to the symbol rate.
function despreader_get_code_phase¶
Current tracked code phase within the symbol, chips.
function despreader_get_lock_metric¶
Lock indicator in [0,1] (EMA of |Re prompt|/|prompt|; ~1 = locked).
function despreader_get_norm_freq¶
Current carrier frequency estimate, cycles/sample.
function despreader_get_snr_est¶
Post-despread SNR estimate (EMA of (Re prompt)^2 / (Im prompt)^2).
function despreader_get_state¶
function despreader_reset¶
Reset Despreader to its post-create state.
Parameters:
stateMust be non-NULL.
function despreader_set_acq¶
Enable preamble-aided pull-in with a distinct acquisition code.
void despreader_set_acq (
despreader_state_t * state,
const uint8_t * acq_code,
size_t acq_code_len,
size_t acq_reps
)
Track acq_reps periods of acq_code coherently (the unmodulated, repeated acquisition preamble — a full ±pi phase discriminator, so the loops pull in even a wide residual) before switching to the data code for the payload. Call before feeding the burst; the acq mode clears automatically once the preamble is consumed, and re-arms on despreader_reset().
Parameters:
stateMust be non-NULL.acq_codeAcquisition code (0/1), length acq_code_len; copied.acq_code_lenAcquisition code length in chips.acq_repsNumber of acq-code periods in the preamble.
function despreader_set_bn_carrier¶
Set the carrier loop bandwidth (recomputes the loop gains).
function despreader_set_bn_code¶
Set the code loop bandwidth (recomputes the loop gains).
function despreader_set_norm_freq¶
Override the carrier frequency estimate, cycles/sample (re-seed).
function despreader_set_state¶
function despreader_state_bytes¶
function despreader_steps¶
Despread a CF32 block; emit one complex prompt symbol per code period.
size_t despreader_steps (
despreader_state_t * state,
const float complex * x,
size_t x_len,
float complex * out,
size_t max_out
)
Streams: a partial symbol is carried in state across calls. Each emitted symbol is the complex prompt integrate-and-dump (carrier-wiped, code-stripped) — its sign is the BPSK decision, its phase/magnitude the soft information. During a despreader_set_acq preamble no symbols are emitted (the loops are pulling in); payload symbols follow.
Parameters:
stateMust be non-NULL.xInput CF32 samples, lengthx_len.x_lenNumber of input samples.outOutput buffer for prompt symbols (>= max_out).max_outCapacity ofoutin symbols.
Returns:
Number of symbols written.
// seed from acquisition (norm_freq cyc/sample, chip phase in chips):
despreader_state_t *d = despreader_create(code, n, 32, 2, f0, chip, .05, .01);
float complex sym[256];
size_t k = despreader_steps(d, rx, rx_len, sym, 256);
// hard bit of sym[i] = crealf(sym[i]) >= 0
despreader_destroy(d);
function despreader_steps_max_out¶
Upper bound on symbols despreader_steps can emit (0; the caller sizes the output buffer to the input length, which always suffices).
Macro Definition Documentation¶
define DESPREADER_STATE_MAGIC¶
define DESPREADER_STATE_VERSION¶
The documentation for this class was generated from the following file native/inc/despreader/despreader_core.h