[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] QAM, carrier tracking and clock recovery

From: Tom Rondeau
Subject: Re: [Discuss-gnuradio] QAM, carrier tracking and clock recovery
Date: Mon, 29 Jan 2007 13:52:02 -0500
User-agent: Thunderbird (X11/20061206)

Martin Dvh wrote:
Tom Rondeau wrote:
-----Original Message-----
From: Martin Dvh [mailto:address@hidden
Sent: Monday, January 29, 2007 4:37 PM
To: Tom Rondeau; gnuradio mailing list
Subject: Re: [Discuss-gnuradio] QAM, carrier tracking and clock recovery

Tom Rondeau wrote:

-----Original Message-----
From: address@hidden [mailto:discuss-
address@hidden On Behalf Of Martin Dvh
Sent: Sunday, January 28, 2007 6:15 PM
To: gnuradio mailing list
Subject: [Discuss-gnuradio] QAM, carrier tracking and clock recovery

Hi All,
I am trying to build a working QAM modulator/demodulator, based on the
existing BPSK/QPSK code.

Is the Mueller and Muller clock-recovery as used in the current QPSK
examples also usable for QAM?

I couldn't find a good description of the algorithm or the parameters.

For clock recovery the only options I found on the net which are

to work for QAM are  modified early/late tracking and modified
Has anybody any info on this?

I am also looking for the best option for carrier-tracking.
For QAM there are special requirements for carrier-tracking and clock-
A simple costas loop will not do for carrier tracking.

This is what I have so far:

For now I implemented a to-the fourth-power PLL for carrier tracking.
(PLL locks to the fourth power of the input, output is divided by four)
This is supposed to work for all QAM versions and should NOT suffer from
catastrophic collaps when the BER gets too high.
(The other option. Decision based carrier-tracking does suffer from
catastrophic collaps.)
The disadvantage is the long time before lock.

For clock-recovery I am trying to use the existing clock-recovery.

I am fiddling with the parameters and I do get a non-very-stable but
recognisable QAM constellation as output of the clock-recovery when I

very  slow timeconstant for my PLL.
No packets get through yet, I think because the PLL only locks after a

of symbols are missed and the constellation is not very stable.

The output constellation of the output of the clock-recovery now can be
seen in:
The output files (--log) before and after clock-recovery is in


I've been doing a bit of work on this problem and have two developer
branches open for this. In branches/developers/trondeau/digital-wip you

find QAM modulator code; I have transmitted this and received it on my
Signature signal analyzer and see the perfect constellations. The code

performs Gray coding on the constellation. This code only has the QAM
modulator side and no demodulator. This should be very quick to work up,

it sounds like you might already have it.
Yes, I already have similar working code.

In branches/developers/trondeau/digital-wip2, I've been doing

on the MPSK receiver and implementing D8PSK. This work is almost

and will be merged into the branch soon. I would look the

block code from now on. It's decision-aided and does the Costas loop and

(a modified version) at the same time and improves the DQPSK reception.
Do you have any links for a desciption of the MM algorithm and its
parameters and/or performance.
Yep, and it's in the code ;)  If you look at gr_clock_recovery_mm_cc.h,
there's a reference to a good receiver book that goes over the basic M&M
loop. In my developer branch, gr_mpsk_receiver_cc.h has a link to a paper
with a modified M&M loop implemented here.
Thanks, but I was hoping for some info which doesn't require an IEEE 
subscription or buying a book.
(Free as in Beer)

But I will just try to grasp it by staring at the code a little longer.
That usually has on of two results:
I get it
I don't get it. I start writing my own algorithm. After much tweaking I end up 
with the original algorithm, but now I know why.


Ah, sorry, life a the university spoils me sometimes. I don't have a good one to recommend off hand, but here's Mathwork's man page:

Hopefully, it's a place to start, though it gives you very little insight.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]