Rules for clock recovery parameters

Hi all,

I was wondering if anyone knows the rules for selecting clock recovery
parameters for the gr_clock_recovery_mm_* block. In specific, I’m
wondering about the following parameters:
mu, gain mu, omega, omega gain, and omega limit

I would like to verify the clock recovery parameters chosen by UCLA’s
802.15.4 implementation:
https://moo.cmcl.cs.cmu.edu/trac/cmu_sdrg/browser/802.15.4/trunk/src/python/ieee802_15_4.py#L100

The reason is that we experience no loss when using file source/sinks
but experience loss using coax, which might be due to timing errors
introduced by the hardware.

I’d greatly appreciate any help.

Thanks!
George

On Thu, Mar 20, 2008 at 11:19:38AM -0400, George N. wrote:

The reason is that we experience no loss when using file source/sinks but
experience loss using coax, which might be due to timing errors introduced
by the hardware.

I’d greatly appreciate any help.

Thanks!
George

Have you taken a look at the books and papers referenced in the header
files?

/*!

  • \brief Mueller and Müller (M&M) based clock recovery block with float
    input, float output.
  • \ingroup clock
  • 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.
    */

/*!

  • \brief Mueller and Müller (M&M) based clock recovery block with complex
    input, complex output.
  • \ingroup clock
  • This implements the Mueller and Müller (M&M) discrete-time error-tracking
    synchronizer.
  • The complex version here is based on:
  • 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.
    */

mu specifies the point between two samples that you want the
interpolated value of. It’s in [0.0, 1.0]. It’s the input to the
gri_mmse_fir_interpolator. The rest of the parameters are for the
control loop.

/*!

  • \brief Compute intermediate samples between signal samples x(k*Ts)
  • \ingroup filter
  • This implements a Mininum Mean Squared Error interpolator with 8
    taps.
  • It is suitable for signals where the bandwidth of interest B =
    1/(4*Ts)
  • Where Ts is the time between samples.
  • Although mu, the fractional delay, is specified as a float, it is
    actually
  • quantized. 0.0 <= mu <= 1.0. That is, mu is quantized in the
    interpolate
  • method to 32nd’s of a sample.
    */

class gri_mmse_fir_interpolator_cc

Eric B. wrote:

802.15.4 implementation:
interpolated value of. It’s in [0.0, 1.0]. It’s the input to the
gri_mmse_fir_interpolator. The rest of the parameters are for the
control loop.

And omega is the nominal samples per symbol.

Look at benchmark_rx.py in the digital examples file for a clue to the
other parameters. The digital examples now use the mpsk_receiver, but
the “mm_” parameters act on the M&M portion of the recovery loop inside.

Tom