# Auto-correlator

The autocorr family of objects implement auto-correlation of signals. The discrete auto-correlation of a signal \(\vec{x}\) is a delay, conjugate multiply, and accumulate operation defined as

$$ r_{xx}(n) = \sum_{k=0}^{N-1} {x(n-k)x^*(n-k-d)} $$where \(N\) is the window length, and \(d\) is the overlap delay. An example of the autocorr interface is listed below.

```
#include <liquid/liquid.h>
int main() {
// options
unsigned int n = 60; // autocorr window length
unsigned int delay = 20; // autocorr overlap delay
// create autocorrelator object
autocorr_cccf q = autocorr_cccf_create(n,delay);
float complex x; // input sample
float complex rxx; // output auto-correlation
// compute auto-correlation (repeat as necessary)
{
autocorr_cccf_push(q, x);
autocorr_cccf_execute(q, &rxx);
}
// destroy autocorrelator object
autocorr_cccf_destroy(q);
}
```

A more detailed example is given in examples/autocorr_cccf_example.c in the main liquid project directory. Listed below is the full interface to the autocorr family of objects. While each method is listed for autocorr_cccf , the same functionality applies to autocorr_rrrf .

- autocorr_cccf_create(N,d) creates and returns an autocorr object with a window size of \(N\) samples and a delay of \(d\) samples.
- autocorr_cccf_destroy(q) destroys an autocorr object, freeing all internally-allocated memory.
- autocorr_cccf_clear(q) clears the internal autocorr buffers.
- autocorr_cccf_print(q) prints the internal state of the autocorr object.
- autocorr_cccf_push(q,x) pushes a sample \(x\) into the internal buffer of an autocorr object.
- autocorr_cccf_execute(q,*rxx) executes the delay, conjugate multiply, and accumulate operation, storing the result in the output variable \(r_{xx}\) .
- autocorr_cccf_get_energy(q) returns \((1/N)\sum_{k=0}^{N-1}{|x(n-k)x^*(n-k-d)|}\)