Symbol Tracker (symtrack)

This page is a work in progress.

The symtrack object is a multi-rate symbol timing synchronizer as well as a carrier frequency/phase recovery and equalizer, useful for tracking... It is effectively the same as the symsync object, but includes an internal control mechanism for also tracking carrier frequency and phase offsets simultaneously.


Figure [fig-symtrack-diagram]. symtrack (symbol synchronizer) functional block diagram

Here is an example:

Figure [fig-symtrack]. symtrack (symbol synchronizer) demonstration for a QPSK signal with a square-root raised-cosine pulse with \(k=2\) samples/symbol, a delay of \(m=4\) symbols, and an excess bandwidth factor \(\beta=0.3\) TODO: UPDATE


Figure [fig-symtrack-time]. symtrack output constellation


Figure [fig-symtrack-freq]. Power spectral density

[fig-symtrack] demonstrates the symtrack_cccf object recovering the sample timing phase for a QPSK signal.

#include <liquid/liquid.h>

int main() {
    // options
    int          ftype = LIQUID_FIRFILT_RRC; // filter type
    unsigned int k     = 2;                  // samples/symbol
    unsigned int m     = 3;                  // filter delay (symbols)
    float        beta  = 0.3f;               // filter excess bandwidth factor
    int          ms    = LIQUID_MODEM_QPSK;  // modulation scheme (can be unknown)

    // create symbol tracking synchronizer
    symtrack_cccf symtrack = symtrack_cccf_create(ftype,k,m,beta,ms);

    unsigned int  buf_len;          // number of input samples
    float complex buf_in [buf_len]; // complex input
    float complex buf_out[buf_len]; // output buffer
    unsigned int  num_written;      // number of values written to buffer

    // ... initialize input buffer with data ...

    // execute symbol tracker, storing result in output buffer
                                buf_in,  buf_len,
                                buf_out, &num_written);

    // ... repeat as necessary ...

    // clean up allocated objects

For a more detailed example, refer to examples/symtrack_cccf_example.c located under the main liquid project source directory.