Make digital predistortion troubleshooting and fine-tuning easy

Make digital predistortion troubleshooting and fine-tuning easy

This article describes the digital predistortion (DPD) functionality of the ADI ADRV9002. Some of the debugging techniques used can also be applied to general DPD systems. First, an overview of background information about DPD and some typical problems users may encounter when experimenting with their systems. Finally, the article presents tuning strategies that can be applied to DPD algorithms to analyze performance with the help of DPD software tools.

Author: Wangning Ge, Product Application Engineer, Analog Devices


This article describes the digital predistortion (DPD) functionality of the ADI ADRV9002. Some of the debugging techniques used can also be applied to general DPD systems. First, an overview of background information about DPD and some typical problems users may encounter when experimenting with their systems. Finally, the article presents tuning strategies that can be applied to DPD algorithms to analyze performance with the help of DPD software tools.


Digital predistortion (commonly referred to as DPD) is an algorithm widely used in wireless communication systems. DPD is designed to suppress spectral regeneration on broadband signals passing through an RF power amplifier (PA), thereby increasing the overall efficiency of the PA. In general, PAs suffer from nonlinear effects and inefficiencies when dealing with high power input signals. Due to spectral regeneration, non-linear effects and spectral interference occur in adjacent frequency bands. Figure 1 shows spectral regeneration before and after DPD correction using the TETRA1 standard on the ADRV9002 platform.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 1. TETRA1 DPD using ADRV9002

The ADRV9002 provides a power-optimized, internally programmable DPD algorithm that can be customized to correct for PA nonlinear effects to improve the overall adjacent channel power ratio (ACPR). Although DPD can bring the expected benefits to communication systems, it is often difficult for inexperienced personnel to get started with DPD, let alone set it up correctly. This is mainly because digital predistortion involves multiple factors that can lead to errors that degrade DPD performance. In fact, even after setting up the hardware correctly, it can be challenging to determine the correct parameters to fine-tune the DPD and obtain an optimal solution. This article is intended to assist engineers using the DPD option in the ADRV9002 and to provide some general strategies for fine-tuning the DPD mode using the available parameters for optimal DPD performance. In addition, MATLAB® tools are used to help users analyze the DPD and eliminate common errors, while providing some insights into the internal DPD operation.

When the DPD option is enabled, the ADRV9002 can provide up to 20MHz of signal bandwidth. This is because the receive bandwidth is limited to 100MHz. A DPD will typically operate with a receive bandwidth five times the transmit bandwidth, so third- and fifth-order intermodulation signals can be seen and corrected. The highest PA peak power signal supported by the ADRV9002 is approximately 1dB (commonly referred to as P1dB) compression region. This metric represents the degree of PA compression. If the PA compresses beyond the P1dB point, there is no guarantee that the DPD will work properly. However, this requirement is not strict; in many cases, DPD will still work beyond the P1dB point and still provide very good ACPR. But this requires a specific analysis of specific issues. In general, DPD may suffer from instability and crashes if compressed too heavily. Later, the compression area will be discussed in detail, including how to use MATLAB tools to observe the current PA compression status.

See the “Digital Predistortion” chapter of UG-1828 for more details on DPD.


There are two basic ways to perform DPD functions. The first method is called indirect DPD, which captures the signal before and after the PA. In contrast to the direct DPD method, the signal is captured before the DPD module and after the PA. The advantages and disadvantages of each approach are beyond the scope of this article. Indirect DPD understands its nonlinear characteristics by analyzing the signal before and after PA, and performs inversion on the DPD module. Direct DPD analyzes the pre-DPD and post-PA signals and removes the error between the two by applying predistortion on the DPD module. Users should be aware that the ADRV9002 uses an indirect approach and the effects associated with it. Also, it is important to understand that when using MATLAB tools, capturing data is also an indirect method.

Figure 2 shows a simplified block diagram of the DPD operation of the ADRV9002. The input signal u(n) enters the DPD module. DPD will predistort the signal and generate x(n). Here, it’s called transmit capture, but this is actually a predistorted version of the transmit signal. Then, the signal passes through the PA to become y(n), and the signal is finally sent to the air. Here, y(n) is called the receive capture, but this is actually the transmitted signal after PA. Then, y(n) is fed back to the receiver port for use as an observation receiver. Essentially, the DPD engine will use the captured x(n) and y(n) and then generate coefficients that will be applied in the next iteration of DPD.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 2. Simplified block diagram of indirect DPD

Operating mode

ADRV9002 supports TDD and FDD operation on DPD. In TDD mode, the DPD is updated every transmit frame. This means that during the transmit frame, the receiver will act as the observation path. In FDD, since the transmitter and receiver operate simultaneously, a dedicated receiver channel is required. The 2T2R in the ADRV9002 is capable of supporting DPD in 2T2R/1T1R TDD and 1T1R FDD modes.

DPD mode


The following equations show the DPD mode implemented in the transmit path.

Make digital predistortion troubleshooting and fine-tuning easy


u(n) is the input signal of DPD, x(n) is the output signal of DPD
T is the total number of branches in DPD mode
ψt is the polynomial function used to implement the branch t look-up table (LUT) and lt is the amplitude delay
kt is the data delay
at,lt,i are the coefficients calculated by the DPD engine
bt,lt,i are switches to enable or disable items
i is the exponent and power of the polynomial term
The user can configure the number of terms of the polynomial for each branch. ADRV9002 provides 3 memory item branches and 1 cross-item branch, and the order of each branch is from 0 to 7.

Mode selection

The user can select the default mode option provided by the ADRV9002 (shown in Figure 3), which should be suitable for most common applications. Alternatively, users can choose their own mode by enabling and disabling items. The first 3 branches (0 to 2) represent memory items, where branch 1 is the central branch. Branch 3 is the cross term branch.

Note that branch 3 (or the cross-term branch) should not enable zero-order terms in order to distinguish it from the mnemonic branch.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 3. Terms of the DPD mode polynomial

• LUT Size: User can set the LUT size. The ADRV9002 offers two options, 256 and 512. By choosing a size of 512, the user will get better quantization noise levels and thus better ACPR, since in general larger sizes will give better signal resolution. For narrowband applications, ADI recommends 512 as the default option. 256 can be used for wideband because the noise level is less critical and it improves computation and power.

• Pre-LUT scaling: The user can set up a pre-LUT scaling module to scale the input data to make it more suitable for the compander. The compander selects the signal from the transmitter and compresses it to fit into the 8-bit LUT address. Depending on the input signal level, the user can adjust this value to optimize LUT utilization. Its value can be set in the range (0,4) with a step size of 0.25. More information on companders is provided in the last section of this article.


Make digital predistortion troubleshooting and fine-tuning easy
Figure 4. Basic configuration to enable DPD

In order to perform DPD, the user will have to enable the external loopback path on the PA and then set the feedback power to ensure it is not out of range. Note that this is peak power, not average power. Too much power or too little power will affect DPD performance. Users also need to set the external path delay, which can be obtained using Users can find the script in the ADRV9002 evaluation software installation path under the IronPython folder.

Note that only external delays need to be set for high sample rate curves (for example, LTE 10MHz). For low sample rate curves (TETRA1 25kHz) the user can set this to 0. Later in this article, the software tool will be used to observe the capture data to understand the effects of external delays.

Other configuration

Make digital predistortion troubleshooting and fine-tuning easy
Figure 5. Additional configuration on DPD

User configurable number of samples. By default, the user can set 4096 samples. The default value is recommended. In most cases, the default 4096 samples will provide the optimal solution for DPD.

• Additional power scaling is a more advanced parameter. In most cases, the default value of 4 is recommended for the ADRV9002. This parameter is related to the internal correlation matrix. Based on experiments, the default value provides the best performance for existing waveforms and PAs tested by ADI. In rare cases, if the input signal amplitude is extremely small or extremely large, the user can try to adjust the value to smaller and larger values ​​to maintain the appropriate condition number for the correlation matrix, resulting in a more stable solution.

• Rx/Tx Normalization: The user should set the receiver/transmitter normalization to the region where the data is linear. In Figure 6, linear regions are shown in red. In this region, the power of the data does not reach the compressed region and is high enough to be used to calculate the gain. After selecting this region, DPD can estimate the transmitter and receiver gains and then proceed to further processing the algorithm. In most cases, -25dBFS to -15dBFS should fit most standard PAs. However, the user should still take care, as a particular PA may have a very different AM/AM curve shape, in which case appropriate modifications will be required. This is explained in detail later in this article.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 6. Typical AM/AM curve.Linear regions are shown in red

set up

hardware setup

Make digital predistortion troubleshooting and fine-tuning easy
Figure 7. Typical DPD Hardware Block Diagram

A typical setup is shown in Figure 7. Before the signal enters the PA, a low-pass filter is required to prevent LO signal harmonics from appearing. In some cases, an external LO may be required if the internal LO phase noise performance does not meet the application requirements. In this case, the external LO source needs to be synchronized to DEV_CLK. Narrowband DPDs with tighter near-band noise requirements typically require an external LO. It is generally recommended to provide a variable attenuator in front of the PA to prevent damage to the PA. The feedback signal should have appropriate attenuation to set the peak power as discussed in the previous section.

software settings


Download the IronPython library for executing IronPython code on the GUI.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 8. IronPython GUI window

Here, the user can run in the IronPython window of the GUI, as shown in Figure 8, which is provided with the MATLAB tool to obtain capture data for the transmitter and receiver. The DPD sample rate is also included in the captured file.

Note that the script should be run in the startup or calibration state.

MATLAB tools

MATLAB tool to analyze data captured from This tool will help check signal integrity, signal alignment, PA compression levels, and finally, fine-tuning of the DPD.

MATLAB Tools requires MATLAB Runtime. The first installation takes some time to download. Once installed, the user can load the data captured by the IronPython script and observe the graph, as shown in Figure 9.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 9. MATLAB DPD Analyzer

Additionally, users can set high/low thresholds for data normalization and press “Reload” to see changes.

First, plot the normalized transmitter and receiver data in the time domain. Users can zoom in on the graph to observe the alignment of the transmitter and receiver. Only the real part of the data is shown here, but the user can easily plot the imaginary part as well. The real and imaginary parts should usually be aligned or not.

Then there’s the transmitter and receiver spectrum — blue is the transmitter, red is the receiver. Note that this is indirect DPD – the transmitter data will be predistorted data, not the transmitter data path on the SSI port.

Next, there are two AM/AM curves, both in linear and dB coordinates. These are important metrics about DPD performance and PA compression status.

AM/PM curves and receiver/transmitter phase differences are also provided.

Also, there are high and low threshold numbers. These numbers should match the settings in the ADRV9002 TES evaluation software.

Note that since APIs are provided to capture data, users can develop their own graphical and analytical models if desired. This tool provides some common checks for analyzing DPD. API includes:

adi_ADRV9002_dpd_CaptureData_Read, this is to read DPD capture data, must be run in calibration or boot state.
adi_ADRV9002_DpdCfg_t → dpdSamplingRate_Hz, this is the DPD sampling rate, a read-only parameter.

Typical problems

DPD can be affected by many different factors. Therefore, it is important to ensure that all potential issues listed are considered and checked by the user. The user should make sure the hardware is connected properly before considering all the issues.

Sending data overload

Make digital predistortion troubleshooting and fine-tuning easy
Figure 10. Simplified hardware block diagram of DPD

Figure 10 shows a simplified schematic block diagram of the ADRV9002 implementing DPD. Transmitter data from the interface can overload the DAC. If the DAC is overloaded, the RF signal from the transmitter is distorted before the PA gets involved. Therefore, it is important to ensure that the transmitter data does not overload the DAC.

The user can observe whether the transmitter DAC is overloaded through the GUI. Figure 11 shows the TETRA1 25kHz waveform. The peak is still far from the digital full scale. For the ADRV9002, it is recommended to stay at least a few dB from full scale to avoid overloading the DAC. It is difficult to quantify how much the user should back off – this is because the DPD will attempt to perform predistortion, and the predistorted signal will be “peak extended” and thus potentially overload the DAC. It depends on how the DPD handles a particular PA – in general, the more compressed the PA, the more headroom it needs to peak.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 11. Part of the TETRA1 standard waveform in the time domain

Receiver data overload

Another common mistake is overloading the feedback DAC with receiver data. The reason for this error is that there is not enough attenuation returned to the receiver port. This can be observed from the debug tool, and the effect is that the receiver data is clipped so that the transmitter and receiver are not aligned effectively, resulting in a miscalculation of the DPD. DPD usually behaves very badly, increasing the noise throughout the spectrum.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 12. Receiver Data Overdrive

Receiver data underrun

Compared to receiver overload, this problem is often overlooked. The problem is that the feedback attenuation is not set correctly. The user may provide too much attenuation to the feedback path, which results in too small receiver data. By default, -18dBm peak is recommended for the ADRV9002 due to its ability to convert data from analog to digital to a known good DPD power level. But users can adjust this number according to their needs. Users should be aware that DPD feedback receivers use different attenuators than conventional receivers, with higher step sizes. The attenuation level is adjusted by the peak power level set by the user. -23dBm is the lowest power level (0 attenuation) – if you go outside this range you will get a low power level which will affect DPD performance. As a rule of thumb, the user should ensure that the feedback power is always measured and set correctly. Many times users tend to try different power levels but forget to set the feedback power correctly, causing this problem.


DPD in TDD mode must run in an automatic state machine. When evaluating with TES, in manual TDD mode, the user can still enable DPD, but the performance will be poor. This is because DPD can only work on a frame basis. In manual TDD mode, the length of the frame will be determined by the transmit/receive enable signal toggle. In other words, each play and stop is a frame. However, during the artificial switching time, the PA has transitioned to a different temperature state. Therefore, the DPD state cannot be maintained without the use of an automatic TDD mode that can frequently toggle the transmit enable signal. However, in FDD mode, DPD should work normally.

For example, a user might want to use TETRA1, which follows a TDD-like frame scheme (actually TDM-FDD). Therefore, one should not directly select TDD mode and check DPD manually, and DPD tends to perform badly. Instead, the user can use a “custom FDD” profile, choosing the same sampling rate and bandwidth as TETRA1, or the user can set the TETRA1 TDD frame timing and use the automatic TDD mode. Both methods can provide better performance than manual TDD.

Transmitter/receiver misaligned

The ADRV9002 will attempt to time align the transmitter and receiver data. When the user captures data, the user expects the data to be aligned. Latency measurements are done during initial calibration. However, for high sample rate curves, more precise subsample alignment needs to be done separately.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 13. Unaligned DPD capture
Make digital predistortion troubleshooting and fine-tuning easy
Figure 14. Zoom in on the transmitter and receiver real data for LTE10 (not aligned)

DPD is an adaptive algorithm that requires computing the error of two entities, namely the transmitter and the receiver. Before calculating the error of the transmitter and receiver, the two signals need to be properly aligned – especially when using high sample rate curves (eg, LTE10). Alignment is critical because the spacing between samples is very small. Therefore, the user needs to run the script to extract the external path delay. This number can be entered under Board Configuration → Path Delay.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 15. IronPython External Latency Measurement

The effect of misaligning the transmitter and receiver data is that the user will observe a noisier AM/AM curve.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 16. Aligned DPD capture

After setting the path delay numbers, it can be observed that the AM/AM and AM/PM curves are cleaner and less noisy. The phase difference is also significantly reduced.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 17. Enlarged LTE10 transmitter and receiver real data (aligned)

PA overload

Each PA has its own specification for how much compression it can handle. While P-1dB figures are often given in data sheets, in practice it is still recommended to make an accurate measurement of DPD to ensure the compression point is at P-1dB. With DPD software, users can view AM/AM curves based on captured data to see how close the compression point is to P-1dB.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 18. PA overload data
Make digital predistortion troubleshooting and fine-tuning easy
Figure 19. AM/AM curve in dB (zoomed in)

However, if the signal exceeds P-1dB, this can cause the DPD to become unstable, or even to break, with the spectrum jumping to very high levels and never coming down again. In Figure 19, the compression at the peak is well beyond the 1dB region, and the shape of the curve starts to become flatter. This means that the PA is overdriven, and in order to increase the output power, more input will be provided to support the output power level. At this point, if the user decides to continue increasing the input power, the DPD performance will degrade.

General strategy mode selection and adjustment

Indirect DPD simply captures data before and after the PA, and the DPD engine will try to simulate the opposite effects of the PA. The LUT is used to apply the effect using coefficients, the mode is based on polynomials. This means that DPD is more of a curve fitting problem and the user will try to “curve fit” nonlinear effects using terms. The difference is that a curve fitting problem fits a single curve, whereas DPD also has to account for memory effects. ADRV9002 has 3 memory branches, and 1 cross branch for modeling DPD LUTs.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 20. Memory entry and cross entry mapping

Figure 20 shows the 3 memory branches and 1 cross branch provided by the ADRV9002. The general strategy is similar to the curve fitting problem. Users can start with a baseline and then add and remove items. In general, the central branch must exist (branch 1). Users can add and remove items one by one to test the effects of DPD. The user can then proceed to add two memory branches (branch 0 and 2) to add the effect of memory effect correction. Note that since the ADRV9002 has two side branches, these branches should be identical — that is, should be symmetrical. Also, adding and removing items must be done individually. Finally, users can experiment with cross terms. The cross term completes the curve fitting problem mathematically, thus providing better DPD performance.

Note that the user must not skip items by leaving them blank, as this will lead to undesirable behavior of DPD. Also note that the user must not set item 0 on the cross-item branch, as this is also invalid from a mathematical point of view.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 21. Invalid mode item settings

Advanced adjustment

Compander and pre-LUT scaling module

In the previous section, companders were mentioned. This concept can be confusing when first reading the user guide, not knowing what it means or what to choose (256 or 512). The purpose of a compander is to compress the input data and put it into a LUT.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 22. Compander – Estimating the shape of the square root

The general shape of a compander is the square root, where the I/Q data comes in. Before putting this data into the LUT, the equation √(i(n)2+q(n)2) will be used to obtain the signal amplitude from the previous equation. However, due to the high speed requirements of the square root operation and the need to map it to a LUT (8-bit or 9-bit), a compander is used. Figure 22 is an ideal square root curve. The actual implementation will not be shown here, but in short this will be an estimate of the square root curve.

Once you understand how the data fits into the LUT, you can start tweaking the data more wisely. The ADRV9002 can select either 8-bit (256) or 9-bit (512) as the LUT size. A larger LUT means double the address location of the data. This means that the resolution of the data is higher and, in general, the level of quantization noise is better. For narrowband applications, since noise is very important, 512 is always recommended. For broadband applications, since the noise level is less critical, either option can be used. However, if you choose 512, the power consumption will be slightly higher and the calculation speed will be slower.

Histogram and CFR

In the DPD configuration section, pre-scaling was briefly mentioned. This parameter is used to provide a large amount of input data to the LUT. The reason for the large amount of input data is that, in some cases, the data is not used correctly by DPD. For such PA compression problems, it is the high-amplitude samples that are really compressed and cause the problem. Therefore, all samples cannot be treated equally; instead, focus on high-amplitude samples.

Take a look at the TETRA1 standard waveform histogram (see Figure 23 and Figure 24). As you can see, most of the values ​​appear in the mid to high amplitude region. This is because the TETRA1 standard uses a D-QPSK modulation scheme and as a result the signal will acquire a constant envelope. There is not much difference between peak power and average power.

This is exactly what DPD needs. As mentioned earlier, DPD will capture higher amplitude samples and therefore will better characterize the PA’s behavior.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 23. TETRA1 amplitude histogram
Make digital predistortion troubleshooting and fine-tuning easy
Figure 24. TETRA1 power histogram

Now, look at the LTE10 standard in a similar fashion. LTE uses an OFDM modulation scheme that groups together hundreds or thousands of sub-carriers. Here again the amplitude and power of LTE10 can be seen. The difference from TETRA1 can be easily observed, i.e. the peaks are very far from the main mean.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 25. LTE10 amplitude histogram without CFR
Make digital predistortion troubleshooting and fine-tuning easy
Figure 26. LTE power histogram without CFR

In the power histogram (see Figure 26), if you zoom in on the far end, you can see that there are still very high peaks, but with a very low probability. For DPD, this is very detrimental. There are two reasons.

First, low probability counts of high peaks (high amplitude signals) will make the PA extremely inefficient. For example, LTE PAPR is about 11 dB. This is a big difference. To avoid damaging the PA, the input levels will need to be backed off significantly. Therefore, the PA is not using most of its gain capability to boost power.

Secondly, the high peak is also wasting the utilization of the LUT. Because of these high peaks, LUTs will allocate a lot of resources to them and only a small fraction of the LUTs for most of the data. This reduces DPD performance.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 27. Zooming in on high-amplitude samples

Peak Clipping (CFR) technology moves signal peaks down to a more acceptable level. This is typically used for OFDM type signals. The ADRV9002 does not contain an on-chip CFR, so this function needs to be implemented externally. For this purpose, a CFR version of the LTE waveform is also included in the ADRV9002 TES evaluation software. CFR_sample_rate_15p36M_bw_10M.csv is shown in Figure 28. It can be seen that at high power, the peak of the signal is limited to a certain level (slope at the end) due to CFR. This effectively pushes the PAPR to 6.7dB, a difference of about 5dB. The operation of the CFR will cause “damage” to the data as the EVM will be degraded. However, compared to the entire waveform, the probability of high-level amplitude peaks is very small, which brings huge advantages.

Make digital predistortion troubleshooting and fine-tuning easy
Figure 28. LTE10 amplitude histogram with CFR
Make digital predistortion troubleshooting and fine-tuning easy
Figure 29. LTE10 power histogram with CFR

in conclusion

DPD is a complex algorithm that many people find difficult to use. For optimal results, it takes a lot of effort and care to set up hardware and software. ADI’s ADRV9002 provides an integrated on-chip DPD that will significantly reduce complexity. ADRV9002 is also equipped with DPD software tools that can help users analyze their DPD performance.

About the Author

Wangning Ge is a Product Applications Engineer based in Somerset, NJ. He joined Analog Devices in 2019. Before that, he worked as a software engineer at Nokia (formerly Alcatel-Lucent). Wangning has extensive experience in DPD algorithm design and base station RF applications. He is responsible for the ADRV9001 family of transceiver products.

The Links:   1DI480A-055 LQ121S1DG11

Adding layers to art, Hue King RDS-160 high color gamut digital screen is shocking Credit Suisse: China’s economic growth rate will increase to 7.1% in 2021, optimistic about consumption,…