DPD
Digital predistorter
 Library:
Communications Toolbox / RF Impairments Correction
Description
Apply digital predistortion (DPD) to a complex baseband signal using a memory polynomial to compensate for nonlinearities in a power amplifier. For more information, see Digital Predistortion.
This icon shows the block with all ports enabled.
Ports
Input
In
— Input baseband signal
column vector
Input baseband signal, specified as a column vector. This port is unnamed until
the Coefficient source parameter is set to Input
port
.
Data Types: double
Complex Number Support: Yes
Coef
— Memorypolynomial coefficients
matrix
Memorypolynomial coefficients, specified as a matrix. The number of rows in the matrix must equal the memory depth of the memory polynomial.
If the Polynomial type parameter is set to
Memory polynomial
, the number of columns in the matrix is the degree of the memory polynomial.If Polynomial type is set to
Crossterm memory polynomial
, the number of columns in the matrix must equal m(n1)+1. m is the memory depth of the polynomial, and n is the degree of the memory polynomial.
Example: complex([1 0 0 0 0; 0 0 0 0 0; 0 0 0 0
0])
Dependencies
To enable this port, set the Coefficient source parameter
to Input port
.
Data Types: double
Complex Number Support: Yes
Output
Out
— Predistorted baseband signal
column vector
Predistorted baseband signal, returned as a column vector of the same length as the input signal.
Parameters
Polynomial type
— Polynomial type
Memory polynomial
(default)  Crossterm memory polynomial
Polynomial type used for predistortion, specified as one of these values:
Memory polynomial
— Computes predistortion coefficients by using a memory polynomial without cross termsCrossterm memory polynomial
— Computes predistortion coefficients by using a memory polynomial with cross terms
For more information, see Digital Predistortion.
Coefficient source
— Source of memorypolynomial coefficients
Property
(default)  Input port
Source of the memory polynomial coefficients, specified as one of these values:
Property
— Specify this value to use the Coefficients parameter to define the memorypolynomial coefficientsInput port
— Specify this value to use the Coef input port to define the memorypolynomial coefficients
Coefficients
— Memorypolynomial coefficients
complex([1 0 0 0 0; 0 0 0 0 0; 0 0 0 0
0])
(default)  matrix
Memorypolynomial coefficients, specified as a matrix. The number of rows must equal the memory depth of the memory polynomial.
If the Polynomial type is set to
Memory polynomial
, the number of columns is the degree of the memory polynomial.If the Polynomial type is set to
Crossterm memory polynomial
, the number of columns must equal m(n1)+1. m is the memory depth of the polynomial, and n is the degree of the memory polynomial.
For more information, see Digital Predistortion.
Dependencies
To enable this parameter, set Coefficient source to
Property
.
Data Types: double
Complex Number Support: Yes
Simulate using
— Type of simulation to run
Code generation
(default)  Interpreted execution
Type of simulation to run, specified as Code generation
or
Interpreted execution
.
Code generation
–– Simulate the model by using generated C code. The first time you run a simulation, Simulink^{®} generates C code for the block. The C code is reused for subsequent simulations unless the model changes. This option requires additional startup time, but the speed of the subsequent simulations is faster thanInterpreted execution
.Interpreted execution
–– Simulate the model by using the MATLAB^{®} interpreter. This option requires less startup time than theCode generation
method, but the speed of subsequent simulations is slower. In this mode, you can debug the source code of the block.
Block Characteristics
Data Types 

Multidimensional Signals 

VariableSize Signals 

More About
Digital Predistortion
Wireless communication transmissions commonly require wide bandwidth signal transmission over a wide signal dynamic range. To transmit signals over a wide dynamic range and achieve high efficiency, RF power amplifiers (PAs) commonly operate in their nonlinear region. As this constellation diagram shows, the nonlinear behavior of a PA causes signal constellation distortions that pinch the amplitude (AMAM distortion) and twist phase (AMPM distortion) of constellation points proportional to the amplitude of the constellation point.
The goal of digital predistortion is to find a nonlinear function that linearizes the net effect of the PA nonlinear behavior at the PA output across the PA operating range. When the PA input is x(n), and the predistortion function is f(u(n)), where u(n) is the true signal to be amplified, the PA output is approximately equal to G×u(n), where G is the desired amplitude gain of the PA.
The digital predistorter can be configured to use a memory polynomial with or without cross terms.
The memory polynomial with cross terms predistorts the input signal as
$$x\text{(}n\text{)}=f\text{(}u\text{(}n\text{))}\triangleq {\displaystyle \sum _{m\text{=0}}^{M1}{c}_{m}\times u\text{(}n\text{}m\text{)}}+{\displaystyle \sum _{m\text{=0}}^{M1}{\displaystyle \sum _{j\text{=0}}^{M1}{\displaystyle \sum _{k\text{=0}}^{K1}{a}_{mjk}\times u\text{(}n\text{}m\text{)}\times u\text{(}n\text{}j\text{)}{}^{k}}}}.$$
The memory polynomial with cross terms has (M+M×M×(K1)) coefficients for c_{m} and a_{mjk}.
The memory polynomial without cross terms predistorts the input signal as
$$x\text{(}n\text{)}=f\text{(}u\text{(}n\text{))}\triangleq {\displaystyle \sum _{m\text{=0}}^{M1}{\displaystyle \sum _{k\text{=0}}^{K1}{a}_{mk}\times u\text{(}n\text{}m\text{)}\times u\text{(}n\text{}m\text{)}{}^{k}}}.$$
The polynomial without cross terms has M×K coefficients for a_{mk}.
Estimating Predistortion Function and Coefficients
The DPD coefficient estimation uses an indirect learning architecture to find function f(u(n)) to predistort input signal u(n) which precedes the PA input.
The DPD coefficient estimation algorithm models nonlinear PA memory effects based on the work in reference papers by Morgan, et al [1], and by Schetzen [2], using the theoretical foundation developed for Volterra systems.
Specifically, the inverse mapping from the PA output normalized by the PA gain, {y(n)/G}, to the PA input, {x(n)}, provides a good approximation to the function f(u(n)), needed to predistort {u(n)} to produce {x(n)}.
Referring to the memory polynomial equations above, estimates are computed for the memorypolynomial coefficients:
c_{m} and a_{mjk} for a memory polynomial with cross terms
a_{mk} for a memory polynomial without cross terms
The memorypolynomial coefficients are estimated by using a least squares fit algorithm or a recursive least squares algorithm. The least squares fit algorithm or a recursive least squares algorithms use the memory polynomial equations above for a memory polynomial with or without cross terms, by replacing {u(n)} with {y(n)/G}. The function order and dimension of the coefficient matrix are defined by the degree and depth of the memory polynomial.
For an example that details the process of accurately estimating memorypolynomial coefficients and predistorting a PA input signal, see Digital Predistortion to Compensate for Power Amplifier Nonlinearities.
For background reference material, see the works listed in [1] and [2].
References
[1] Morgan, Dennis R., Zhengxiang Ma, Jaehyeong Kim, Michael G. Zierdt, and John Pastalan. "A Generalized Memory Polynomial Model for Digital Predistortion of Power Amplifiers." IEEE^{®} Transactions on Signal Processing. Vol. 54, Number 10, October 2006, pp. 3852–3860.
[2] M. Schetzen. The Volterra and Wiener Theories of Nonlinear Systems. New York: Wiley, 1980.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using Simulink® Coder™.
Version History
See Also
Blocks
Objects
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 United Kingdom (English)