qdetector_cccf

Frame detector and synchronizer; uses a novel correlation method to detect a synchronization pattern, estimate carrier frequency and phase offsets as well as timing phase, then correct for these impairments in a simple interface suitable for custom frame recovery.

Public Functions

qdetector_cccf qdetector_cccf_create(float complex * _s, unsigned int _s_len)
qdetector_cccf qdetector_cccf_create_linear(float complex * _sequence, unsigned int _sequence_len, int _ftype, unsigned int _k, unsigned int _m, float _beta)
qdetector_cccf qdetector_cccf_create_gmsk(unsigned char * _sequence, unsigned int _sequence_len, unsigned int _k, unsigned int _m, float _beta)
qdetector_cccf qdetector_cccf_create_cpfsk(unsigned char * _sequence, unsigned int _sequence_len, unsigned int _bps, float _h, unsigned int _k, unsigned int _m, float _beta, int _type)
qdetector_cccf qdetector_cccf_copy(qdetector_cccf _q)
int qdetector_cccf_destroy(qdetector_cccf _q)
int qdetector_cccf_reset(qdetector_cccf _q)
int qdetector_cccf_print(qdetector_cccf _q)
void * qdetector_cccf_execute(qdetector_cccf _q, float complex _x)
float qdetector_cccf_get_threshold(qdetector_cccf _q)
int qdetector_cccf_set_threshold(qdetector_cccf _q, float _threshold)
float qdetector_cccf_get_range(qdetector_cccf _q)
int qdetector_cccf_set_range(qdetector_cccf _q, float _dphi_max)
unsigned int qdetector_cccf_get_seq_len(qdetector_cccf _q)
const void * qdetector_cccf_get_sequence(qdetector_cccf _q)
unsigned int qdetector_cccf_get_buf_len(qdetector_cccf _q)
float qdetector_cccf_get_rxy(qdetector_cccf _q)
float qdetector_cccf_get_tau(qdetector_cccf _q)
float qdetector_cccf_get_gamma(qdetector_cccf _q)
float qdetector_cccf_get_dphi(qdetector_cccf _q)
float qdetector_cccf_get_phi(qdetector_cccf _q)

Interfaces

qdetector_cccf qdetector_cccf_create(float complex * _s, unsigned int _s_len)

Create detector with generic sequence

  • _s : sample sequence
  • _s_len : length of sample sequence

qdetector_cccf qdetector_cccf_create_linear(float complex * _sequence, unsigned int _sequence_len, int _ftype, unsigned int _k, unsigned int _m, float _beta)

Create detector from sequence of symbols using internal linear interpolator

  • _sequence : symbol sequence
  • _sequence_len : length of symbol sequence
  • _ftype : filter prototype (e.g. LIQUID_FIRFILT_RRC)
  • _k : samples/symbol
  • _m : filter delay
  • _beta : excess bandwidth factor

qdetector_cccf qdetector_cccf_create_gmsk(unsigned char * _sequence, unsigned int _sequence_len, unsigned int _k, unsigned int _m, float _beta)

create detector from sequence of GMSK symbols

  • _sequence : bit sequence
  • _sequence_len : length of bit sequence
  • _k : samples/symbol
  • _m : filter delay
  • _beta : excess bandwidth factor

qdetector_cccf qdetector_cccf_create_cpfsk(unsigned char * _sequence, unsigned int _sequence_len, unsigned int _bps, float _h, unsigned int _k, unsigned int _m, float _beta, int _type)

create detector from sequence of CP-FSK symbols (assuming one bit/symbol)

  • _sequence : bit sequence
  • _sequence_len : length of bit sequence
  • _bps : bits per symbol, 0 < _bps <= 8
  • _h : modulation index, 0 < _h
  • _k : samples/symbol
  • _m : filter delay
  • _beta : filter bandwidth parameter, 0 < _beta
  • _type : filter type (e.g. LIQUID_CPFSK_SQUARE)

qdetector_cccf qdetector_cccf_copy(qdetector_cccf _q)

Copy object including all internal objects and state

int qdetector_cccf_destroy(qdetector_cccf _q)

Destroy synchronizer object and free all internal memory

int qdetector_cccf_reset(qdetector_cccf _q)

Reset synchronizer object's internal buffer

int qdetector_cccf_print(qdetector_cccf _q)

Print synchronizer object information to stdout

void * qdetector_cccf_execute(qdetector_cccf _q, float complex _x)

run detector, looking for sequence; return pointer to aligned, buffered samples

  • _q :
  • _x :

float qdetector_cccf_get_threshold(qdetector_cccf _q)

get detection threshold

int qdetector_cccf_set_threshold(qdetector_cccf _q, float _threshold)

Set detection threshold (should be between 0 and 1, good starting point is 0.5)

  • _q :
  • _threshold :

float qdetector_cccf_get_range(qdetector_cccf _q)

Get carrier offset search range

int qdetector_cccf_set_range(qdetector_cccf _q, float _dphi_max)

Set carrier offset search range

  • _q :
  • _dphi_max :

unsigned int qdetector_cccf_get_seq_len(qdetector_cccf _q)

Get sequence length

const void * qdetector_cccf_get_sequence(qdetector_cccf _q)

Get pointer to original sequence

unsigned int qdetector_cccf_get_buf_len(qdetector_cccf _q)

Get buffer length

float qdetector_cccf_get_rxy(qdetector_cccf _q)

Get correlator output of detected frame

float qdetector_cccf_get_tau(qdetector_cccf _q)

Get fractional timing offset estimate of detected frame

float qdetector_cccf_get_gamma(qdetector_cccf _q)

Get channel gain of detected frame

float qdetector_cccf_get_dphi(qdetector_cccf _q)

Get carrier frequency offset estimateof detected frame

float qdetector_cccf_get_phi(qdetector_cccf _q)

Get carrier phase offset estimate of detected frame