[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] GNU Radio and USRP baseband demodulation/decodin
Re: [Discuss-gnuradio] GNU Radio and USRP baseband demodulation/decoding
Thu, 5 Feb 2009 05:36:10 -0800
On Thu, Feb 5, 2009 at 3:42 AM, Einar Thorsrud <address@hidden> wrote:
> I am trying to use the USRP with the LFRX daughterboard to receive a
> baseband signal coming from an external RF-frontend (the signal is
> originally 2-PSK passband). I am a GNU Radio novice, and have some
> difficulties understanding how to synchronize to and decode the NRZI-coded
> baseband signal. I suppose ones the synchronization is done the actual
> decoding will be easy.
> I find it difficult to understand the process of synchronizing, what I would
> like to see is some kind of guide or feedback on how to pick exactly the
> correct number of samples for each symbol, enabling the decoding of the
> signal symbol for symbol.
You will need to synchronize both to the transmitter carrier frequency
and phase, and as you mention, also to the bit timing. For BPSK, GNU
Radio has a ready made block to do each.
Carrier recovery/synchronization can be done with a Costas loop, which
will track out any residual carrier resulting from not being tuned to
exactly the center frequency of your passband. For symbol timing,
there is a resampling block implementing the Muller and Muller
algorithm. This will track the "center of the bit" and fractionally
resample to 1 sample per symbol. This is a common enough combination
that there is a combined block to do both with less CPU consumption
and better SNR (gr.mpsk_receiver_cc).
>From there you can use a hard-decision slicer on the I channel, or
implement your own more sophisticated algorithm based on whether there
is error coding or some other known property of the transmit signal.
An example that implements all of the above (using separate Costas and
M&M blocks) may be found in the gnuradio-examples/python/digital-bert
directory. This implements a continuous BPSK transmitter using a
known, scrambled bit sequence. The receiver performs filtering,
synchronization, demodulation, retiming, bit slicing, and
descrambling, then measures the bit error rate and estimates the
receiver signal to noise ratio. These values, plus the current
frequency offset and timing offset, are displayed once per second.
A more sophisticated example is the digital packet radio that
interfaces with the Linux TCP/IP stack, which may be found in the
python/digital directory. This combines a configurable PHY later (bit
rate, modulation technique, etc.) with a (very) simple CSMA MAC. This
is harder to study, and the details of the DQPSK implementation are
buried in another directory, but it is full-fledged 2-way half-duplex
radio link using GNU Radio.
Welcome to GNU Radio!