discuss-gnuradio
[Top][All Lists]
Advanced

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

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


From: Martin Dvh
Subject: Re: [Discuss-gnuradio] QAM, carrier tracking and clock recovery
Date: Thu, 01 Feb 2007 04:23:36 +0100
User-agent: Debian Thunderbird 1.0.2 (X11/20061113)

Tom Rondeau wrote:
> 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
>>>>>>           
>>>>
>>>> supposed
>>>>
>>>>      
>>>>
>>>>>> to work for QAM are  modified early/late tracking and modified
>>>>>> zero-crossing.
>>>>>> 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-
>>>>>> recovery.
>>>>>> 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
>>>>>>           
>>>>
>>>> use
>>>>
>>>>      
>>>>
>>>>>> a
>>>>>> very  slow timeconstant for my PLL.
>>>>>> No packets get through yet, I think because the PLL only locks
>>>>>> after a
>>>>>>           
>>>>
>>>> lot
>>>>
>>>>      
>>>>
>>>>>> 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:
>>>>>> http://www.olifantasia.com/projects/gnuradio/QAM/screenshots/
>>>>>> The output files (--log) before and after clock-recovery is in
>>>>>> http://www.olifantasia.com/projects/gnuradio/QAM/
>>>>>>
>>>>>> greetings,
>>>>>> Martin
>>>>>>           
>>>>>
>>>>> Martin,
>>>>>
>>>>> 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
>>>>>         
>>>>
>>>> will
>>>>
>>>>      
>>>>
>>>>> find QAM modulator code; I have transmitted this and received it on my
>>>>> Signature signal analyzer and see the perfect constellations. The code
>>>>>         
>>>>
>>>> also
>>>>
>>>>      
>>>>
>>>>> 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,
>>>>>         
>>>>
>>>> and
>>>>
>>>>      
>>>>
>>>>> 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
>>>>>         
>>>>
>>>> modifications
>>>>
>>>>      
>>>>
>>>>> on the MPSK receiver and implementing D8PSK. This work is almost
>>>>>         
>>>>
>>>> complete
>>>>
>>>>      
>>>>
>>>>> and will be merged into the branch soon. I would look the
>>>>>         
>>>>
>>>> 'gr_mpsk_receiver'
>>>>
>>>>      
>>>>
>>>>> block code from now on. It's decision-aided and does the Costas
>>>>> loop and
>>>>>         
>>>>
>>>> M&M
>>>>
>>>>      
>>>>
>>>>> (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.
>>
>> Greetings,
>> Martin
> 
> 
> 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:
> http://www.mathworks.com/access/helpdesk/help/toolbox/commblks/ref/index.html?/access/helpdesk/help/toolbox/commblks/ref/muellermullertimingrecovery.html&http://www.google.com/search?q=mueller+and+muller&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:en-US:official
> 
> 
> Hopefully, it's a place to start, though it gives you very little insight.
> 
> Tom
> 
> 
You might find my benchmark_rx_oscopy.py and kinda working qam16 code 
interesting.
they are in branches/developers/nldudok1/digital-wip3 which is a branched 
version of your digital-wip2
look in
branches/developers/nldudok1/digital-wip3/gnuradio-examples/python/digital/
and
branches/developers/nldudok1/digital-wip3/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc
and
branches/developers/nldudok1/digital-wip3/gnuradio-core/src/python/blksimpl

benchmark_rx_oscopy.py gives you a live constellation view (put it at X-Y mode 
manually with the rightmost pulldown)
and live tweaking of parameters

greetings,
Martin






reply via email to

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