Clock recovery

Clock recovery consists in trying to sample the received signal at the good
time points, that is, in a synchronized manner with the emitter clock.
If that operation is not done, the risk is that the timing offset can induce
decoding errors at the receiver, as in the example below:

The used architecture is based on (see figure below):
an interpolator, which purpose is to fix the offset between the receiver and emitter clocks,
a timing error detector (ted) and a loop filter, whose purpose is to align
the interpolator on the emitter clock, and lastly an optionnal decimation stage
so as to be at the symbol frequency at the end.

A complete example can be found in the documentation of the clock_rec_process function.