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
on it, but the basic building blocks should all be checked in by now.
carrier synchronization of a QPSK waveform, we use the classic fourth
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
from there). The beta value should be about an order of magnitude
(it’s been set to 0.25*alpha^2; I’m not sure where that comes from,
The next two arguments are the max and min frequency deviation in terms
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
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
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
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
do the synchronization and differential demodulation once a few more
are worked out.
[mailto:email@example.com] On Behalf Of 2
Sent: Thursday, June 01, 2006 6:16 AM
Subject: [Discuss-gnuradio] Question about carrier syncronization
fordemodulating QPSK/BPSK signal.
The problem is HOWTO do carrier syncronization.
I am using two USRP with FLEX 2400, one for Tx, the other for Rx. The RF
both Tx and Rx are tuned to 2.45GHz.
I generate and transmit a QPSK signal. At the receiver, an obvious
deviation can be observed from the fft sink. And of course, nothing can
demodulated. (using simple correlator to deframing, no seqno outputs).
adjust Tx RF a little bit, and I realy get some seqno from
simple_correlator, but they are uncontinuous and snatchy, which means
manual freq adjustment is not so accuracy.
I think the linear bidimention mouduation such as BPSK/QPSK/16QAM
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
sinusoid input. This scheme will produce higher speed baseband signal,
cost much USB bandwidth. I wonder if only pure IQ complex at the speed
QPSK symbol rate can do carrier sync and demodulation.
The following are the key src code of my QPSK mod/demod.
src = gr.file_source (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)