Thursday, 5 October 2017

LDPC the power of iteration

Currently I am working on a DVB-S2 software decoder using an NVIDIA GPU
and the CUDA programming language. It is still very early days but I thought
I would share some of the initial results.

The type of FEC used in DVB-S2 is called Low Density Parity Check LDPC
and it uses an iterative algorithm to do the decoding, in my case one called
belief propagation also known as the sum-product algorithm.

Above is my software running in off-line test mode decoding a known
DVB-S2 frame. As can be seen the first time it runs with 4 iterations
the frame is unrecoverable. The next time it runs with 10 iterations
and while the baseband header can be decoded all the transport packets
in the body of the message are in error. Finally it is run again with 20
iterations, this time the whole frame can be decoded. Each run uses the
same identical noise sequence added to it

Above is a example of the modem working in real-time receiving DVB-S2 transmitted
from DATV-Express and being received on ADALM-PLUTO, it is being decoded
totally in software using a GTX980TI GPU. A huge amount of work still needs to be
done before this is of any practical use. The motivation for doing this work is to have
something that will support many of the features not found in commercial DBS
chip-sets and to give me a radio related project for learning CUDA programming on.
There are rumours that DVB-S2X VL_SNR modes may be used on future CUBESAT
Lunar and Martian missions. I agree not many people are going to want to use a
£600 GPU card when a £100 Minitiouner can be used instead, but I am not
just many people! The GPU card running flat out makes a nice room heater.

There is also a video over on my YouTube channel that shows some moving video
rather than just a frame capture (the software has changed a lot since I made that clip).

No comments:

Post a Comment