Clock Recovery MM documentation


I would like to find a proper documentation on MM algorithm block (paper
for example). Any ideas ?

Thank you.


Hi Klauss,

You could also take a look at,
it helped me quite a bit!

Best regards…


On Thu, Jul 30, 2015 at 7:17 PM, Martin B. [email protected]

Discuss-gnuradio mailing list
[email protected]

Best regards…


Another point to keep in mind is that the M&M block isn’t great in
environments. It’s really suboptimal in general. Look at the
pfb_clock_recovery block, instead.


On Thu, Jul 30, 2015 at 2:18 PM, Daniel C. [email protected]

Using GNU Radio Companion for Security Research and Assessment) deals
Clock Recovery MM, I attached the paper, have a look at:

6.Section 6.Counting the Bits
7.Analyzing Demodulated Data

Both deal with Clock Recovery MM usage and has flowgraphs.

Best regards,


Hi, Tom,

Could you be more specific where exactly it is not “the right
We’d appreciate that and would correct that in own work as well, if
Security Research Assessment made a mistake here.

I will be looking forward to your response,


On Thu, Jul 30, 2015 at 9:55 PM, Tom R. [email protected] wrote:

On Thu, Jul 30, 2015 at 2:38 PM, Iluta V [email protected] wrote:


That’s great, and I’m glad they got it to work for their application.
like they provide a good explanation of its use, too. Still, it’s not
right algorithm.


From Matlab MM documentation [1]:

“[…] Typically, the input signal is the output of a receive filter
is matched to the transmitting pulse shape. […]”

Assuming the MM Gnuradio implementation has the same hypothesis on the
input signal (anybody can confirm this?), I deduced this block is
misused when feed with a square signal, because it will take only one
sample per symbol discarding the rest (with useful energy). You can put
Moving Average before for better results.

This is one of the reason why the pfb_clock_recovery block is better,
unfortunately unfit for square signals [2]. I found even better results
using a gaussian filter inside pfb_clock_recovery as the pseudo-matched
filter to square pulses (with a proper bt value). (Obviously I can only
guarantee this for the specific signal I worked with)

[2] See discussion:

2015-07-30 16:03 GMT-03:00 Iluta V [email protected]:

On Thu, Jul 30, 2015 at 3:03 PM, Iluta V [email protected] wrote:

Hi, Tom,

Could you be more specific where exactly it is not “the right algorithm”?
We’d appreciate that and would correct that in own work as well, if
Security Research Assessment made a mistake here.

I will be looking forward to your response,



I shouldn’t be so hard on the M&M block. In most situations, it’s tended
work fine, but it’s suboptimal. It’s based on hardware techniques of
recovery that approximate a derivative. The PFB algorithm actually
calculates the derivative to the numerical approximation required by
setting the number of filterbank arms. So the results are much better.
also get to apply your own filter to this block so you don’t have to
a separate matched filter.

Also, and I can’t find any papers on this, but fred harris tells me that
the M&M algorithm behaves particularly poorly in fading environments.


Thanks for your explanation! That’s worth while looking into!

On Fri, Jul 31, 2015 at 1:17 AM, Francisco A. <

Hi Tom,

why do/I/ have to advertise the PFB approach? Arguing against Mueller &
M?ller feels strange. Anyway:

Mueller & M?ller in the classical, real valued approach [1, eq (49), p.
524] in its core is
eqn. (49) page 524

with $z_k$ being the timing estimate ,$x_k$ being the input samples, and
$a_k$ the decisions (in our case, -1/+1 [2], so $E{a_k^2}\equiv 1$).
Assume timing is correct, ie. $z_{k-1} = 0$, but we have fading so that
$|x_k| = \epsilon |x_{k-1}|,\quad 0<\epsilon \ll 1$;
then regardless of $a_{k-1}$, the term $|x_k a_{k-1}| \ll|x_{k-1}a_k|$,
and hence
$z_k \approx -\frac12 {x_{k-1}a_k}$

Now, $a_k$ is exactly the decision we don’t want to put much trust in,
because it’s a symbol decision with especially bad $\frac{E_s}{N_0}$.
Effectively, you get the bit error probability increase as a factor to
your timing error probability density, as if things weren’t bad enough!

PFB is cooler because

  1. PFB!
  2. the derivate is a linear operation, so amplitude changes in the
    input signal at least have the same effect on the error correction



Wow ! Thank you all for your reply. Very interesting !

Tom, I didn’t find the “pfb_clock_recovery block” in my GNU Radio
Companion, is it new ?

Best regards.

Hi Marcus,

Aaaaa it’s the Polyphase Clock Sync, I didn’t think about it … :smiley:
Thank you for the advice, I will use the mailing list next time.

Best regards.


Hi Klauss,

is it new ?

Not really, no. It’s been around since ca April 2012.
If there’s no “Polyphase Clock Sync”:
What version of GNU Radio are you using?

Best regards,

PS: I always recommend not using ruby-forum but directly signing up to
the mailing list:
so much more comfortable! And with modern mail clients and webmail
interfaces, much better searchable.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs