Rules for clock recovery parameters


#1

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


#2

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


#3

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