File Exchange

image thumbnail

Adaptive DPD Design

version (7.48 MB) by Kerry Schutz
A workflow for modeling and simulating PAs and adaptive DPDs.


Updated 01 Aug 2014

View Version History

View License

See the README.PDF for an explanation of the contents of this zip file and how to use the models. See DPD.PDF for general background on PA and DPD modeling.
Digital pre-distortion (DPD) is a baseband signal processing technique that corrects for impairments inherent to RF power amplifiers (PAs). These impairments cause out-of-band emissions or spectral regrowth and in-band distortion which correlates with an increased bit-error-rate (BER). Wideband signals with a high peak-to-average ratio, as is characteristic of LTE/4G transmitters, are particulary susceptible to these unwanted effects.
In this paper, we illustrate a workflow for modeling and simulating PAs and DPDs. The models shown in this article are based on two technical papers, [1] and [2]. We start from PA measurements. From measurements, we derive a static DPD design based on a memory polynomial. Such a polynomial corrects for both the non-linearities and memory effects in the PA. For simulation purposes, we construct a system-level model to evaluate the DPD’s effectiveness. Because any PAs characteristics will vary over time and operating conditions, we extend the static DPD design to an adaptive one. We evaluate two adaptive DPD designs, one based on the (Least-Mean Square) LMS algorithm and a second using the Recurive Predictor Error Method (RPEM) algorithm.

Cite As

Kerry Schutz (2021). Adaptive DPD Design (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (19)

Alex Fox

Can`t download because the file is damaged((

Artur Hara

very good for start the dpd research, thanks!

文一 贾

Abdelwahab Afifi

@senh sali @Alireza Jahanbakhshi
I have the same issue. I want to apply this on OFDM signal

odai ka

hello, i have a problem deploying of beam oriented DPD to a massive mimo 5G architecture , Any help ??

Hello, I have a OFDM signal with FFT size 2048, would you please tell me how can I apply this signal to your code?

senh sali

i want to aplay your code for a OFDM signal how i can do it ?

Angelos Goulianos

Hi are you sure that the fit_memory_poly_model works correctly?It seems that referring to past values is not there. for example:
if you analyze x_terms in the scripts for M=2 lets say:
for K=1,M=0:
x_terms(1,1:2)=X(1:2)abs(X(1:2)).^K-1 . Here X(1) is the current input and X(2) should be the previous input according to the mattrix formation in DPD.pdf. However, looking at DPD_analysis.m X(2) corresponds to up(2) which is the next input to the mattrix. Any explanation on this would be much appreciated


HI Bilal Khan
I'm using this DPD document for real PA,but the ACPR of (before DPD) is better than (After DPD).maybe we could have a talk and fix this problem?
my mail ID:

Bilal Khan


I hope someone still visit here and help me out with a problem. I am using polynomial model for estimating DPD coefficients based on LS solution. The problem is my memoryless model works better than memory polynomial model for DPD (in terms of ACPR reduction not EVM). I dont understnad this. WIth memory polynomial model i get a little extra power in one adjacent channel and the spectrum is unsymmetrical i couldnt understand it why? I have tried the functions provided in this file aswell but the same problem i am getting.
Does anyone ever encounter such problme or if someone can help me out that would be great. Btw i am doing measurement with real PA not simulink model. I am using ARB, PSG UXA in my loop.


very useful for beginners.thks!

Zhe Wu

nirbhay kumar

can any one help me for creating VHLD code for this model or any one testing this model in any FPGA and please share that code
thank u
my mail id -


John Reyland

Very helpful for someone trying to learn this predistortion game

bin jia

David Chang

the simulated am/am curve lies in the linear range of the Seleh model; and on increasing the slide gain to about 0.8 (for RPEM) the feedback fails...


looks like a function called "fit_memory_poly_model" got missing.


MATLAB Release Compatibility
Created with R2013b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!