LimeADPD

Introduction
Power amplifiers (PA) are nonlinear devices and their linearisation is highly desired for a number of reasons. In case of radiofrequency (RF) PAs, linearisation improves power efficiency and subsequently reduces running cost of the wireless infrastructure.

Considering the PA performance for a given air interface, adjacent channel power ratio (ACPR) and error vector magnitude (EVM) are the key considerations to provide support for sophisticated modulation schemes, multicarrier signals, and high modulation bandwidths.

Here we present the Lime Microsystems solution for PA linearisation, based on adaptive digital predistortion (ADPD), for which the complete solution is Open Source and will be made available on GitHub and the LimeNET app store.

Indirect learning architecture
The simplified block diagram of an indirect learning architecture is given below. Please note that RF part in neither the TX (up to PA input) nor in RX (back to base band frequency) paths are shown for simplicity.

Delay line compensates ADPD loop ($${yp(n)}$$ to $${x(n)}$$) delay. Postdistorter is trained to be inverse of power amplifier. Predistorter is simple copy of postdistorter. When converged:

$$ \begin{align} \varepsilon {(n)} = 0, {yp(n)} = {y(n)} => {x(n)} = {xp(n)} \end{align} $$

Hence, PA is linearised.



Complex valued memory polynomial
The LimeADPD algorithm is based on modelling nonlinear system (PA and its inverse, in this case) by complex valued memory polynomials. These are, in fact, cut versions of Volterra series, an approach well known for general nonlinear system modelling and identification. Here, "cut version" means the system can efficiently be implemented in real life applications.

For a given complex input:

$$ \begin{align} \mathbf{x} {(n)} = {x_{I}(n)} + \mathbf{j} {x_{Q}(n)}, \end{align} $$

complex valued memory polynomial produces complex output:

$$ \begin{align} \mathbf{y} {(n)} = {y_{I}(n)} + \mathbf{j} {y_{Q}(n)}, \end{align} $$

$$ \begin{align} \mathbf{y} {(n)} = \sum_{i=0}^{N} \sum_{j=0}^{M} \mathbf{a}_{ij} \mathbf{x} ({n} - {i}) {e} ({n} - {i})^{j}, \end{align} $$

where:

$$ \begin{align} \mathbf{a}_{ij} = a_{ij} + \mathbf{j} {b_{ij}}, \end{align} $$

are the polynomial coefficients while $${e(n)}$$ is the envelope of the input. For the envelope calculation two options are considered, the usual one:

$$ \begin{align} {e(n)} = \sqrt{{x}_{I}({n})^2 + {x}_{Q}({n})^2}, \end{align} $$

and the squared one:

$$ \begin{align} {e(n)} = {x_{I}(n)}^2 + {x_{Q}(n)}^2. \end{align} $$

Typically, the squared option is used in ADPD applications since it is simpler to calculate and in most cases provides better results.

In the above equations, $${N}$$ is memory length while $${M}$$ represents nonlinearity order. Hence, complex valued memory polynomial can take into account both system memory effects and system nonlinearity.

LimeADPD equations
Based on discussions given in previous sections and using the signal notations of the above figure, the ADPD predistorter implements the following equations:

$$ \begin{align} \mathbf{yp}{(n)} = \sum_{i=0}^{N} \sum_{j=0}^{M} \mathbf{a}_{ij} \mathbf{xp}{(n} - {i)ep(n} - {i)}^{j}, \end{align} $$

$$ \begin{align} \mathbf{xp}{(n)} = {xp}_{I}{(n)} + \mathbf{j} {xp}_{Q}{(n)}, \end{align} $$

$$ \begin{align} {ep(n)} = {xp}_{I}{(n)}^2 + {xp}_{Q}{(n)}^2, \end{align} $$

while the postdistorter does similar:

$$ \begin{align} \mathbf{y}{(n)} = \sum_{i=0}^{N} \sum_{j=0}^{M} \mathbf{a}_{ij} \mathbf{x}{(n} - {i)e(n} - {i)}^{j}, \end{align} $$

$$ \begin{align} \mathbf{x}{(n)} = {x}_{I}{(n)} + \mathbf{j} {x}_{Q}{(n)}, \end{align} $$

$$ \begin{align} {e(n)} = {x}_{I}{(n)}^2 + {x}_{Q}{(n)}^2. \end{align} $$

Note that predistorter and postdistorter share the same set of complex coefficients $$\mathbf{a}_{ij}$$. The delay line is simple and its output is given by:

$$ \begin{align} {u(n)} = \mathbf{yp}{(n} - {nd)}. \end{align} $$

Training algorithm
The ADPD training algorithm alters complex valued memory polynomial coefficients $$\mathbf{a}_{ij}$$ in order to minimise the difference between PA input $$\mathbf{yp}{(n)}$$ and PA output $$\mathbf{x}{(n)}$$, ignoring the delay and gain difference between the two signals. Instantaneous error shown in the above figure is calculated as:

$$ \begin{align} \varepsilon {(n)} = \sqrt{\big({u_{I}(n)} - {y_{I}(n)}\big)^2 + \big({u_{Q}(n)} - {y_{Q}(n)}\big)^2}. \end{align} $$

Training is based on minimising Recursive Least Square (RLS) $${E(n)}$$ error:

$$ \begin{align} {E(n)} = \frac{1}{2} \sum_{m=0}^{n} \lambda^{n-m} \varepsilon {(m)}^2, \lambda < 1, \end{align} $$

by solving a linear system of equations:

$$ \begin{align} {\partial E(n) \over \partial a_{kl}} = 0, {\partial E(n) \over \partial b_{kl}} = 0; k = 0,1,\ldots,N; l=0,1,\ldots,M. \end{align} $$

Any linear equation system solving algorithm can be used. LimeADPD involves LU decomposition, however iterative techniques such as Gauss-Seidel and Gradient Descent have been evaluated as well. LU decomposition is adopted in order to get faster adaptation and tracking of the ADPD loop.

Implementation platform
The ADPD algorithm is implemented using a LimeSDR-QPCIe board, a high level block diagram of which is shown below. The LimeSDR-QPCIe board has a lot more options than shown, including two LMS7002M chips, a USB interface, GPS receiver…) The LMS7002M itself is a 2T-2R RF IC. For clarity, the block diagram shows the minimum hardware options required to illustrate the LimeADPD implementation. Regarding the implementation, the same signal names as in the previous figure are used here.



For development or demonstration, a test waveform is uploaded first and played from the WFM RAM Block. Initially, the predistorter is bypassed - i.e. $${yp_{I}=xp_{I}}$$, $${yp_{Q}=xp_{Q}}$$. The predistorter has provision for SPI in order to update the coefficients during the training. Signals $$\mathbf{xp}$$, $$\mathbf{yp}$$, and $$\mathbf{x}$$ are captured using Data Capture RAM Blocks. Captured data is made available to the (Intel Motherboard) CPU Core via the PCIe interface. The CPU implements the postdistorter block, delay line, and the rest of training algorithm. After each adaptation step the CPU updates predistorter parameters via PCIe/Stream SPI.

In real applications WFM and $$\mathbf{xp}$$ Capture RAM blocks are not required. The algorithm needs only $$\mathbf{yp}$$ and $$\mathbf{x}$$ as shown in LimeADPD structure. The CPU Core performs both ADPD adaptation, as explained above, and baseband (BB) digital modem functions which are application specific, for example Long Term Evolution (LTE).

As shown in the block diagram above, frequency conversion from BB to RF is performed by LMS7002M transmitter chains. Frequency down conversion from RF to BB is implemented by only one LMS7002M receive chain dedicated to ADPD; in other words, one receiver of the available RF RX chains is allocated as ADPD monitoring path. In case of MIMO applications, the same ADPD monitoring path is used as time sharing recourse to linearise multiple PAs which saves power consumption as well as on board RF resources.

Regarding data converters, the LimeSDR-QPCIe board offers two options: to use LMS7002M on-chip DACs/ADCs, or external ones. On-chip data converters are 12-bit devices, while external ones are 14-bit. 14-bit data converters are more suitable for ADPD if one wants to cancel IMD3 and IMD5 as well as to support wide band modulation schemes. If external data converters are used, the LMS7002M on-chip Transceiver Signal Processing blocks (TXTSP and RXTSP) are bypassed. In this case, minimum functionality required for ADPD to function is implemented by external counterparts shown as ExtTXTSP and ExtRXTSP in the block diagram above.

WFM and Data capture RAM Blocks are implemented using Altera Cyclone V FPGA resources and on-board RAM. More importantly, the same FPGA also implements predistorter, ExtTXTSP, ExtRXTSP blocks, PCIe, and other glue logic required to interconnect LimeSDR-QPCIe on board components including the two LMS7002M ICs to the CPU Core.

Measured Results
Before implementation and measurements, the ADPD algorithm has been thoroughly simulated. Simulation results are omitted from this document for clarity. ADPD performance has been measured and the results for two cases presented in this section.

Test Case 1:
 * Moderate output power amplifier device Maxim Integrated MAX2612.
 * Psat ~ 19dBm.

Test Case 2:
 * MAX2612 is used as preamplifier stage followed by a Class-J GaN HEMPT amplifier.
 * GaN amplifier drain efficiency ~ 70%.
 * Psat ~ 40dBm.

Single carrier WCDMA Test Model 1 is used as test signal in both cases. ADPD memory and nonlinearity orders are set to $${N=3}$$, $${M=3}$$.

Test case 1: Maxim Integrated MAX2612 PA
ADPD signals before training and ADPD signals after training show important ADPD signals before and after the algorithm convergence. Signals are captured by a graphical user interface (GUI) executed by the CPU Core.

Before training (ADPD signals before training), predistorter signals $$\mathbf{yp}$$ and $$\mathbf{xp}$$ are equal (plot 1). $$\mathbf{x}$$ as a measure of PA output is distorted (plot 3). Waveforms $$\mathbf{y}$$ and $$\mathbf{u}$$ are very different (plot 2), resulting in huge error (plot 4) which ADPD has to minimise.

After ADPD training (ADPD signals after training), signal $$\mathbf{yp}$$ (plot 1) is predistorted in order to cancel PA distortion components. $$\mathbf{x}$$ as a measure of PA output is now linearised (plot 3). There is an excellent match between $$\mathbf{y}$$ and $$\mathbf{u}$$ waveforms in both time and amplitude scale (plot 2). ADPD error (plot 4) is minimised. Improvement in PA linearisation can be seen by comparing the $$\mathbf{yp}$$ and $$\mathbf{x}$$ spectra of plot 3.

ADPD signals after training


RF PA output measurements are shown below.

PA output spectrum
No ADPD – yellow trace. With ADPD – blue trace. IMD3 and IMD5 distortion components at the PA output reduced by almost 20 dB.

ACPR without ADPD
ACPR1 = -34 dBc, ACPR2 = -54 dBc.

ACPR with ADPD
ACPR1 = -51 dBc, ACPR2 = -52 dBc.

EVM without ADPD
Measured at 6.58%.

EVM with ADPD
Measured at 3.24%.

ACPR without ADPD
ACPR1 = -43 dBc, ACPR2 = -58dBc.

ACPR with ADPD
ACPR1 = -53 dBc, ACPR2 = -58dBc.

Conclusion
The LimeADPD algorithm has been confirmed by measured results. ADPD is capable of cancelling any distortion above system (DACs -> TX -> PA -> Coupler -> Attenuator -> RX -> ADCs) noise floor.

For test case 1, at antenna point (PA output) ACPR is improved from -34 dBc (out of spec.) to -51 dBc (well within the spec.) EVM is improved from 6.58% to 3.24%.

As far as linearisation is concerned, test case 2 is more challenging since there are two PA stages (MAX2612 followed by a Class-J GaN HEMPT amplifier) and both stages are nonlinear. Even in this case LimeADPD gives excellent results, i.e. ACPR is improved from -43 dBc (out of spec.) to -53 dBc (well within the spec.)

Work underway

 * Test ADPD algorithm with 10W PAs covering different frequency bands.
 * Check the performance with more demanding modulation schemes; using 5MHz, 10MHz, 15MHz, and 20MHz LTE as the test signal, for example.
 * Modify the algorithm to linearise more than one PA for MIMO applications using single ADPD monitoring path.
 * Test the algorithm performance in real applications, i.e. within the base station during voice, video, and data calls.

Document version
Based on Adaptive Digital Predistortion of RF Power Amplifiers Application Note v3r00.

Changes since document generation:
 * Minor typographical and grammatical changes.