Gr.clock_recovery_mm_ff() help

Hello,

I am trying to use the gr.clock_recovery_mm_cc (float
omega, float gain_omega, float mu, float gain_mu).
What do I set for the omega, gain_omega, mu, and
gain_mu? There is also a version of this function
with 5 parameters.

Also, what should be the number of samples per bit
going into this gr.clock_recovery_mm_ff() or how much
oversampling per bit should be used as the input?

Thanks,

George B.
[email protected]

On Fri, Mar 23, 2007 at 11:40:39PM -0700, George B. wrote:

Hello,

I am trying to use the gr.clock_recovery_mm_cc (float
omega, float gain_omega, float mu, float gain_mu).
What do I set for the omega, gain_omega, mu, and
gain_mu? There is also a version of this function
with 5 parameters.

For a shoot-from-the-hip introduction, take a look at some of the
places in the Python code where these blocks are instantiated.

Without a good understanding of the algorithm, trying to explain these
is tough. I suggest starting with these books and papers:

/*!

  • \brief Mueller and Müller (M&M) based clock recovery block with complex
    input, complex output.
  • \ingroup block
  • This implements the Mueller and Müller (M&M) discrete-time error-tracking
    synchronizer.
  • See "Digital Communication Receivers: Synchronization, Channel
  • Estimation and Signal Processing" by Heinrich Meyr, Marc Moeneclaey,
    & Stefan Fechtel.
  • ISBN 0-471-50275-8.
    */

/*
Modified Mueller and Muller clock recovery circuit
Based:
G. R. Danesfahani, T.G. Jeans, “Optimisation of modified Mueller
and Muller
algorithm,” Electronics Letters, Vol. 31, no. 13, 22 June 1995,
pp. 1032 - 1033.
*/

Also, what should be the number of samples per bit
going into this gr.clock_recovery_mm_ff() or how much
oversampling per bit should be used as the input?

About 2 samples per symbol should be fine.

Also, because of the constraints given by the filters implemented
within gri_mmse_fir_interpolator_cc, the input signal must contain no
significant energy above Fs/4, where Fs is the sampling rate. Note
that this restriction is twice as tight as the Nyquist criterion.

Eric

Whoops, I realized I sent this straight to George yesterday and not the
list.

with 5 parameters.
input, complex output.

Also, what should be the number of samples per bit
going into this gr.clock_recovery_mm_ff() or how much
oversampling per bit should be used as the input?

About 2 samples per symbol should be fine.

Also, because of the constraints given by the filters implemented
within gri_mmse_fir_interpolator_cc, the input signal must contain no
significant energy above Fs/4, where Fs is the sampling rate. Note
that this restriction is twice as tight as the Nyquist criterion.

The number of samples per symbol can be anything (within reason), and
the
M&M algorithm requires a minimum of 2. The value of omega should default
to
the number of samples per symbol; this value determines the sampling
period
in the M&M loop. The gain_omega is used to adjust omega, but this should
be
very small since you don’t want too much variation around it (we have
set
this value as 0.25*gain_mu^2).

The value of mu is related to the adjustment of the sampling due to the
error signal, and it could default to anything. Between 0 and 1 is good.
The
gain_mu is probably the most important value for the loops response.
This is
the correction factor based on the timing difference between symbols. If
you
look in the DQPKS or DBPSK demodulators in the code
(src/python/gnuradio/blksimpl), you’ll see how these are set. Somewhere
between 0.05 and 0.15.

Tom