[Top][All Lists]

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

RE: [Discuss-gnuradio] Question about carrier syncronization fordemodula

From: Tom Rondeau
Subject: RE: [Discuss-gnuradio] Question about carrier syncronization fordemodulating QPSK/BPSK signal.
Date: Thu, 1 Jun 2006 08:54:28 -0400

Eric and my team at Virginia Tech just got done creating a full differentially encoded QPSK transceiver. There’s still a bit left to be done on it, but the basic building blocks should all be checked in by now. For carrier synchronization of a QPSK waveform, we use the classic fourth order Costas loop approach, a block you can find as gr_costas_loop_cc. Set the alpha value somewhere around 0.005 – 0.05 to get started (and play with it from there). The beta value should be about an order of magnitude smaller (it’s been set to 0.25*alpha^2; I’m not sure where that comes from, though). The next two arguments are the max and min frequency deviation in terms of scaled frequency, so 0.05 and -0.05 work well. The final value of the reference phase can just be set to 0. This block’s been around for a bit of time and used in BPSK.


From here, you’ll need to worry about symbol synchronization. We build a complex modified Mueller and Muller clock recovery circuit for this called gr_clock_recovery_mm_cc (this file existed already, but we modified it some). Set mu=0.05, omega is approximately the samples per baud, gain_mu=0.05, gain_omega=0.25*mu^2, and omega_rel_limit=0.5. These values will get you started.


There are other blocks available now to do differential encoding and decoding to handle the phase ambiguity generated by the Costas loop (the final constellation can be in any one of 4 rotations). In the GMSK2 examples, I know the benchmark_xpsk_tx.py generates the differentially encoded QPSK signal. If not there yet, soon the benchmark_xpsk_rx.py should do the synchronization and differential demodulation once a few more things are worked out.





From: address@hidden [mailto:address@hidden On Behalf Of 2 1
Sent: Thursday, June 01, 2006 6:16 AM
To: address@hidden
Subject: [Discuss-gnuradio] Question about carrier syncronization fordemodulating QPSK/BPSK signal.


Hi, all


The problem is HOWTO do carrier syncronization.

I am using two USRP with FLEX 2400, one for Tx, the other for Rx. The RF of both Tx and Rx are tuned to 2.45GHz.

I generate and transmit a QPSK signal. At the receiver, an obvious frequency deviation can be observed from the fft sink. And of course, nothing can be demodulated. (using simple correlator to deframing, no seqno outputs). So I adjust Tx RF a little bit, and I realy get some seqno from simple_correlator, but they are uncontinuous and snatchy, which means the manual freq adjustment is not so accuracy.

I think the linear bidimention mouduation such as BPSK/QPSK/16QAM requires much more accurate syncronization of carrier than FSK does.


There are already some discusses on the archive about BPSK demod, but I still have no idea about that.

I read the code and find that the author wrote a costas loop which require sinusoid input. This scheme will produce higher speed baseband signal, which cost much USB bandwidth. I wonder if only pure IQ complex at the speed of QPSK symbol rate can do carrier sync and demodulation.




The following are the key src code of my QPSK mod/demod.

src = "" (gr.sizeof_char, filename, options.repeat)
framer = gr.simple_framer (payload_size)        
bytes_to_syms = gr.bytes_to_syms ()
qpsk_mod = gr.float_to_complex()
interp = gr.interp_fir_filter_ccf (8, interp_taps)
...# usrp init
self.connect (src, framer, bytes_to_syms, qpsk_mod, interp, gain, u)

filter = gr.fir_filter_ccf (1, rx_taps) 
c2f = gr.complex_to_float()
corr = gr.simple_correlator (payload_size)
filesink = gr.file_sink (gr.sizeof_char, options.filename)
self.connect (u, filter, c2f, corr, filesink)


reply via email to

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