Introduction to DPD
Digital Pre-Distortion (DPD) is a feature that uses a real-time feedback loop to pre-distort data being transmitted through a power amplifier (PA). This allows the system to operate the PA in the compression region for better efficiency while maintaining linearity in the signal output seen in Figure 1. In turn this helps with keeping a good ACPR. This allows the user to get the best performance out of the chosen PA, however each PA will have different performance even with DPD and will need to be fine-tuned. This document will walk through some simple first steps to get DPD up and running on a user’s system.
For more in-depth understanding and debugging refer to the User Guide for all up-to-date documentation on the DPD and TES functionality.
Figure 1. PA Output
FAQ
- What is the maximum useable bandwidth for the DPD?
The maximum bandwidth for DPD on the ADRV9002 is 20MHz. This is based off 1/5th of the maximum internal Tx observation bandwidth of the DPD block, which is 100MHz. Using this much margin allows the DPD engine to correct some of the odd harmonics that will have the biggest impact on stability.
Setup for DPD
Measurements
The DPD engine requires both Tx and Rx signals to calculate the coefficients. The coefficients will be applied in the Tx signal (pre-distort). Shown in
Figure 2. DPD HW Setup
This setup means that for the user’s implementation, one of the Rx channels will need to be permanently used as the DPD observation path. In the ADRV9002, this means the user can implement one of the following:
1T1R TDD with DPD | ![]() |
1T2R TDD with DPD | ![]() |
2T1R TDD with DPD | ![]() |
2T2R TDD with DPD | ![]() |
1T1R FDD with DPD | ![]() |
Example
Hardware setup
Shown in Figure 3 is a block diagram of the setup using the ADRV9001 evaluation board (EVB) Tx1 is the transmit channel. The Tx signal must first go through a filter to get rid of harmonics that may make the DPD unstable. The Tx signal is then passed through a simple ADL5611 gain block and then into a directional coupler to get a Tx output to the signal analyser. The signal is then attenuated to get the peak power of the signal down to -18dBm for the Rx1B input. The user needs to be aware of the kind of data being transmitted, for example if the data has a high PAR then the Tx data will need to be backed off enough so as not to saturate the DACs when the signal goes through the peak expansion (pre distortion).
Figure 3. Simple Example DPD Block Diagram
TES setup
With this simple setup the user can then use the TES to enable the DPD. For more details on any of the steps below please see the User Guide section on Digital Pre-Distortion and ADRV9001 Evaluation System.
- After successfully connecting to the FPGA, in the Configure tab select an LTE TDD setup.
Figure 4. Device Configuration
- The external path delay will need to be calibrated. This can be done in the with the Iron Python script window in the View Load the ‘External_Delay_Measurement.py’ script. This will return the value in ps for the ‘Path Delay’ in the next step. This file is located in the install folder for the TES C:\Program Files\Analog Devices\ADRV9001 Transceiver Evaluation Software\IronPython
Figure 5. Iron Python Script Window
- In the Board Configuration tab select the external loopback on the channel that will be performing DPD. Input the peak power and the calibrated path delay.
Figure 6. Board Configuration
- In the Digital Pre-Distortion section of the Advanced Features tab the user can now enable the DPD on the channel of choice. There are options to select the Look Up Table size (larger number of entries provides more granularity)
The Pre-LUT Scale can be used to get better DPD performance if the input signal to the DPD block is too small. The default value is 2 and be changed from 0 to 3.75 in 0.25 steps.
The polynomial terms can be set to Default or when further optimising the user can custom tune the Taps for a better response. For now, we use the default setting.
Figure 7. Advanced Features (DPD)
- In the Digital Pre-Distortion tab, the channel enabled in the Advanced features tab above will also appear enabled here. This tab gives the user the option to increase or decrease the number of samples of real data used to calculate the coefficients. There is an additional power scale that can be used for small input signals.
DPD Activation can be used to prevent the DPD from going unstable if the signal level going to the DPD block drops unexpectedly. For now, these settings can be left as the default values.
Figure 8. Digital Pre-Distortion Tab
- The part can now be Programmed. Enabling the DPD will require a DPD tracking calibration which looks for a feedback signal. If the hardware setup is not set up correctly the device will fail to program.
- Note: In TES version 0.21.0 the DPD updates the coefficients at the start of a frame. If you are using the Automated TDD function the frame length is known and will occur frequently compared to operating in normal mode. In normal mode you will need to Stop and Start the Tx transmitting to trigger a frame and update the DPD coefficients.
- Note: Make sure that the Transmit file being used has no discontinuities between the start and end of the file. The file is being sent in a loop and discontinuities will cause some unwanted spurious that will make destabilise the DPD performance.
Measurement Results
Doing the same measurement with and without DPD is the best way to show the impact. To run without DPD you will need to reset the part, disable DPD and program the part again. The results from this measurement are shown in Figure 9. The yellow trace is the result before the DPD is used and the pink trace is with DPD enabled. This shows a 16dB improvement however all setups with differing PAs will produce different results. Figure 9 is for illustrative purposes only.
Figure 9. Signal Analyser Measurement Example Measurement
The measurements below were taken using the ADRV9002 customer evaluation board controlled by the Transceiver Evaluation Software. The measurements show the results from two different PAs with DPD and without.
Measurement 1 - Tetra1
PA: Sky65160-11
ADRV9002 Profile:
- Tetra1, 144Ksps
- Internal LO
- Tx Continuous On
Transmit Waveform:
- TETRA1_sample_rate_144K_bw_25K
- This can be found in \ADRV9001 Transceiver Evaluation Software\Examples\Tx Data\
- PAR is about 3dB
Figure 10: Measurement 1 - Tetra1
Measurement 2 - LTE10M
PA: Sky66297-11
ADRV9002 Profile:
- TDD LTE10, 15.36Msps
- Internal LO
- Tx Continuous On
Transmit Waveform:
- CFR_sample_rate_15p36M_bw_10M
- This can be found in \ADRV9001 Transceiver Evaluation Software\Examples\Tx Data\
- PAR is about 9dB
Figure 11: Measurement 2 - LTE10M
Measurement 3 - LTE20M
PA: Sky66297-11
ADRV9002 Profile:
- TDD LTE20, 15.36Msps
- Internal LO
- Tx Continuous On
Transmit Waveform:
- CFR_sample_rate_15p36M_bw_10M
- This can be found in \ADRV9001 Transceiver Evaluation Software\Examples\Tx Data\
- PAR is about 9dB
Figure 12: Measurement 3 - LTE20M
MATLAB DPD Analysis Tool
The MATLAB tool is aimed at analyzing the captured data from dpd_capture.py. This is an IronPython script that can be run from the TES to capture Tx and Rx data for analysis. This tool will help check signal integrity, signal alignment, PA compression level and at last the fine tuning of DPD.
Figure 13: MATLAB DPD analysis tool
This DPD analysis tool takes in a .csv file that is gererated in the TES with the dpd_capture.py script. This is run from the Python editor in the View tab.
Figure 14: Python Editor
For more in depth understanding of the DPD features and setup have a look at the whitepaper on The Complete Guide to Troubleshoot and Fine Tune Digital Predistortion
Running this will require a MATLAB runtime engine and this is included in the install package for the DPD Analyser.
The ADRV9002_DPD_Analyser can be downloaded here: ADRV9002_DPD_Analyser.zip
The dpd_capture.py file can be downloaded here: dpd_capture.zip