Problem with Differential PSK

Hi all,

I use differential PSK with up to 4 bits per symbol. I tested
transmission as
a simulation modelling the channel with AWGN noise and phase rotation.
So
far, simulation works perfect (100% packets will be received correct)
with
all modulation orders using Costas Loop for phase recovery and
Mueller&Mueller for clock recovery at the receiver.

Problems occur when switching to the USRP board. I use Flex 2400 and TX
and RX
antennas are close to each other (near perfect propagation channel). In
very
few cases (~5%) the receiver recovers the signal and correct packets
will be
received. In most runs, no packet is received. Until now, I do not know
if
the problem is due to some saturation effects (too high transmission
power at
the amplifier) or if parameters of Costas Loop, Automatic Gain Control
and
Mueller&Mueller clock recovery are set properly. I played with all those
parameters a lot, but without success. Can someone help?

In general: Does Costas Loop need to be modified when differential PSK
is
used? I read in the forum that the order needs to be 2 for BPSK and
order 4
used for QPSK in the block gr.costas_loop_cc(…, order)? What is the
purpose?

If someone is interested, you can try with the following source code. I
appreciate any comments.
http://www.mobnets.rwth-aachen.de/~ade/cso/DPSK_code.zip

the block “howto_psk_packet_sink.cc” is necessary to detect packets
after
differential decoding at the receiver. One byte contains 1 to 4 bits (
which
is the symbol) depending on the modulation order.

psk.py is extended to use 16PSK.


Christian Sokolowski Office: +49(0)-240-7575-7043
RWTH Aachen FAX: +49(0)-240-7575-7050
Wireless Networks Dept
Kackertstrasse 9 E-mail: [email protected]
D-52072 Aachen Web: http://www.mobnets.rwth-aachen.de

Christian Sokolowski wrote:

few cases (~5%) the receiver recovers the signal and correct packets will be

If someone is interested, you can try with the following source code. I
appreciate any comments.
http://www.mobnets.rwth-aachen.de/~ade/cso/DPSK_code.zip

the block “howto_psk_packet_sink.cc” is necessary to detect packets after
differential decoding at the receiver. One byte contains 1 to 4 bits ( which
is the symbol) depending on the modulation order.

psk.py is extended to use 16PSK.

We have blocks that do DBPSK and DQPSK already (D8PSK sort of, but it’s
over-the-air operation is flaky). Check them out in
gnuradio-core/src/python/gnuradio/blksimpl or you have use
gnuradio-examples/python/digital/benchmark_tx.py -m [dbpsk, dqpsk] to
run the transmitter. These should give you some help about the
parameters used in the phase/frequency/timing sync block.

Tom