Timing recovery in GNU Radio : Variable rate vs Fixed rate operation I have been wondering about the implementation of timing recovery blocks in gnuradio. In literature, for asynchronous sampling, all that is needed are error detector (MM, ML, Gardner etc), a loop filter (2nd order), interpolation control (modulo-1 counter etc) and an interpolator. An example of a timing recovery scheme with ML error detector is shown below. 
I have two questions regarding the implementation in GNU Radio


All blocks I have seen (MM, Andy Walls Symbol Sync )seem to be approximating the number of samples per symbol and use it to update the rate of the block in the forecast function. My question is why do we need to use variable rate? Can't a scheme like the one below with fixed rate work? Isn't this supposed to be asynchronous sampling?
Out of curiosity: Can one use a third-order PLL instead? Or will this just be an overkill?


Regards,
M. 

 

EDIT

Interpolation control:



Matlab code
Symbol timing offset and symbol frequency offset are two different distortions. Like a carrier phase offset and a carrier frequency offset. The difference is that a carrier frequency offset imposes itself on the demodulated signal on the scale of a symbol time quite harshly due to the high frequencies of operation. The symbol rates are comparatively low and hence symbol frequency offset manifests itself slowly within a few symbol times. This is in regards to our modelling. Any real oscillator will probably exhibit a random component over this first order approximation.

Now Michael Rice is considering a case of fixed symbol timing offset in this figure. So the loop is just finding the optimal clock phase after asynchronous sampling. Considering that he's using a second order loop, a simple mechanism of stuffing and deleting samples is needed to adapt it to a varying symbol timing phase offset. GNU radio code runs on real signals so it has to adapt to that symbol frequency offset plus any small random variations over a period of time.

Finally, a 3rd order loop would ideally generate a steady state zero error for a changing frequency offset (sometimes called drift) but not many systems encounter such a scenario with a few exceptions. Higher order loops are used less in practice due to more complex stability issues. See Gardner's book Phase Lock Techniques for details.