# Rules for clock recovery parameters

**URL:** <https://www.ruby-forum.com/t/rules-for-clock-recovery-parameters/132478>\
**Category:** GNU Radio\
**Created:** [March 20, 2008, 4:19pm UTC](https://www.ruby-forum.com/t/rules-for-clock-recovery-parameters/132478 "2008-03-20T16:19:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![george\_n](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a88e4f/32.png) [@george\_n](https://www.ruby-forum.com/u/george_n)\
**Post date:** [March 20, 2008, 4:19pm UTC](https://www.ruby-forum.com/t/rules-for-clock-recovery-parameters/132478/1 "2008-03-20T16:19:19Z")

</div>

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](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

---

<div class="post-metadata">

**Author:** ![george\_n](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a88e4f/32.png) [@george\_n](https://www.ruby-forum.com/u/george_n)\
**Post date:** [March 20, 2008, 6:10pm UTC](https://www.ruby-forum.com/t/rules-for-clock-recovery-parameters/132478/2 "2008-03-20T18:10:28Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![george\_n](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a88e4f/32.png) [@george\_n](https://www.ruby-forum.com/u/george_n)\
**Post date:** [March 20, 2008, 8:38pm UTC](https://www.ruby-forum.com/t/rules-for-clock-recovery-parameters/132478/3 "2008-03-20T20:38:57Z")

</div>

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
