Skip to content

File burst_demod_core.h

File List > burst_demod > burst_demod_core.h

Go to the documentation of this file

#ifndef DP_BURST_DEMOD_CORE_H
#define DP_BURST_DEMOD_CORE_H

#include "doppler/clib_common.h"
#include "doppler/jm_perf.h"
#include "doppler/ppe/ppe_core.h"
#include "doppler/fft/fft_core.h"
#include "doppler/spectral/spectral_core.h"
#include "doppler/dp_complex.h"
#include "doppler/conv/conv_core.h"
#include "doppler/rs/rs_core.h"
#include "doppler/pn/pn_core.h"
#include "doppler/gold/gold_core.h"
#include "doppler/wfm/wfm_frame.h"
#include "doppler/mpsk/mpsk_core.h"
#include "doppler/cvt/cvt_core.h"
#ifdef __cplusplus
extern "C"
{
#endif

  typedef struct
  {
    /* ── configuration ── */
    uint8_t *data_code; 
    size_t   data_sf;   
    uint8_t *acq_code;  
    size_t   acq_sf;    
    size_t   acq_reps;  
    int8_t  *sync;      
    size_t   sync_len;  
    size_t   spc;       
    double   chip_rate; 
    double   carrier_hz; 
    double   max_rate;  
    size_t   frame_syms;   
    size_t   est_segments; 
    double   f0_prior;     
    size_t   start;        
    /* ── engine ── */
    dp_ppe_state_t   *ppe;  
    float _Complex *part; 
    size_t         n_part;

    /* ── read-backs (after demod) ── */
    float *llr;   
    size_t n_llr; 
    float _Complex *sym; 
    size_t n_sym; 
    double est_n0; 
    size_t frame_offset; 
    size_t n_symbols;    
    double est_freq_hz;  
    double est_rate_hz;  
    double est_cn0_dbhz; 
    double est_timing_chips; 
  } dp_burst_demod_state_t;

  dp_burst_demod_state_t *dp_burst_demod_create_frame (
      const uint8_t *data_code, size_t data_code_len,
      const wfm_frame_desc_t *frame, size_t spc, double chip_rate,
      double carrier_hz, double max_rate, size_t est_segments);

  dp_burst_demod_state_t *dp_burst_demod_create_desc (
      const uint8_t *data_code, size_t data_code_len,
      const wfm_frame_desc_t *frame, size_t spc, double chip_rate,
      double carrier_hz, double max_rate, size_t est_segments,
      const char **why);

  void dp_burst_demod_destroy (dp_burst_demod_state_t *state);

  void dp_burst_demod_reset (dp_burst_demod_state_t *state);

  void dp_burst_demod_set_preamble (dp_burst_demod_state_t *state,
                                 const uint8_t *acq_code, size_t acq_code_len,
                                 size_t reps);

  size_t dp_burst_demod_llrs (dp_burst_demod_state_t *state, size_t n, float *out,
                           size_t max_out);

  size_t dp_burst_demod_llrs_max_out (dp_burst_demod_state_t *state, size_t n);

  size_t dp_burst_demod_symbols (dp_burst_demod_state_t *state, size_t n,
                              float _Complex *out, size_t max_out);

  size_t dp_burst_demod_symbols_max_out (dp_burst_demod_state_t *state, size_t n);

  void dp_burst_demod_set_prior (dp_burst_demod_state_t *state, double f0_coarse,
                              size_t start);

  size_t dp_burst_demod_demod_max_out (dp_burst_demod_state_t *state);

  size_t dp_burst_demod_demod (dp_burst_demod_state_t *state, const float _Complex *x,
                            size_t x_len, uint8_t *out, size_t max_out);

#ifdef __cplusplus
}
#endif

#endif /* BURST_DEMOD_CORE_H */