Thursday, 5 February 2015
Digital Pre-Distortion, express_server and the Zedboard
I have been investigating DPD or Digital Pre-distortion.
This is a method of pre-distorting a signal to compensate for the distortion
introduced by the power amplifier and in theory can have a huge effect on
the IMD performance of an amplifier. Our initial tests involved
using a SkySpy SDR to monitor the output of the amplifier and then
pre-distorting the transmitted signal inside the DATV-Express FPGA.
We only corrected for the AM/AM distortion (no phase correction),
The best we were able to achieve was around a 10 dB improvement.
This is well short of what is possible.
Having read an appnote from the guys that gave you MATLAB it became
obvious that it would be necessary to correct for phase and for memory effects.
The approached I had used with the Express board would not have been feasible
to use anymore. The reason being a lot of information has to passed about
in hard realtime to make the corrections possible. The system needs to
continuously track the transmitted signal and make fine adjustments it also
has to remember what was previously transmitted as that too can effect the
amplifier's current transfer characteristic. For more information have a look
at these files Mathworks DPD
I have been looking for a reason to use the MyriadRF board I have and to play
with the new generation of FPGA SOCs. I have now started to move towards
Xilinx parts mainly because of the large amount of free IP available from them.
I was able to buy at a good price a Zedboard on eBay.
So far I have done a bare metal tutorial on the Zedboard (flashing some LEDs
under control of an ARM core). I have installed FreeRTOS on the board and
more recently PetaLinux (Xilinx's own version of Linux).
I am now working on a BSP (Board Support Package) customised for use with
the MyriadRF/Clipper board. The idea is to produce a proof of concept system
for investigating what if anything will replace DATV-Express.
I was dreading having to write a load of code to program the hundreds of registers
in the Lime Microsystems devices but I see there is now an open source project
up and running to provide libraries to do just that. The libraries are aimed at the
LMS7002M chip rather than the 6002 I have but they are very similar.
If this ever went into production it would probably use the MicroZed SOM
and a bespoke carrier board.
Going back to DATV-Express a number of people have been able to use the
DATV-Express server code project I placed on Github. This is just a basic
DVB-S transmitter that accepts a transport stream either via stdin or UDP.
The feedback I have received form various people has been of great help in fixing
bugs and making improvements. I am also pleased to see that a number of people
plan to publish what they have done. Amateur radio is about self learning so it
makes my efforts seem worthwhile when other use or improve on what I have done.