Main Content

DPD

Digital predistorter

  • DPD block

Libraries:
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 and Optimizing Estimator Polynomial Degree and Memory Depth.

This icon shows the block with all ports enabled.

Examples

expand all

Apply digital predistortion (DPD) to a 16-QAM signal of random symbols. The DPD Coefficient Estimator block uses a captured signal containing from input and output signals from a power amplifier (PA) to determine the predistortion coefficient matrix. Digital predistortion of the signal preconditions is to correct impairments that the PA introduces. This model does not include a block representing the PA.

The PreLoadFcn callback initializes model parameters, and also loads workspace variables PA_Input and PA_Output from the file commpowamp_dpd_data.mat. For more information, see Model Callbacks (Simulink).

The PA_Input and PA_Output variables are baseband-equivalent signals captured at the input and output of a PA. PA_Input and PA_Output are used by the DPD Coefficient Estimator block to estimate the memory-polynomial coefficients. The memory-polynomial coefficients are input to the DPD block to predistort the PA input signal.

The input signal path of the model generates a random symbol stream, applies 16-QAM modulation, and then applies raised-cosine transmit filtering to the modulated signal.

The input signal is digitally predistorted in the DPD block using the memory-polynomial coefficients generated in the DPD Coefficient Estimator block. The DPD block returns the predistorted input signal for the PA that produced the distorted PA output signal.

Ports

Input

expand all

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

Memory-polynomial 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 Cross-term memory polynomial, the number of columns in the matrix must equal m(n-1)+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

expand all

Predistorted baseband signal, returned as a column vector of the same length as the input signal.

Parameters

expand all

To edit block parameters interactively, use the Property Inspector. From the Simulink® Toolstrip, on the Simulation tab, in the Prepare gallery, select Property Inspector.

Polynomial type used for predistortion, specified as one of these values:

  • Memory polynomial — Computes predistortion coefficients by using a memory polynomial without cross terms

  • Cross-term memory polynomial — Computes predistortion coefficients by using a memory polynomial with cross terms

For more information, see Digital Predistortion.

Source of the memory polynomial coefficients, specified as one of these values:

  • Property — Specify this value to use the Coefficients parameter to define the memory-polynomial coefficients

  • Input port — Specify this value to use the Coef input port to define the memory-polynomial coefficients

Memory-polynomial 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 Cross-term memory polynomial, the number of columns must equal m(n-1)+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.

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 model reuses the C code for subsequent simulations unless the model changes. This option requires additional startup time, but the speed of the subsequent simulations is faster than with the Interpreted execution option.

  • Interpreted execution — Simulate the model by using the MATLAB® interpreter. This option shortens startup time, but the speed of subsequent simulations is slower than with the Code generation option. In this mode, you can debug the source code of the block.

For more information, see Interpreted Execution vs. Code Generation (Simulink).

Block Characteristics

Data Types

double | single

Multidimensional Signals

no

Variable-Size Signals

yes

Algorithms

expand all

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

Introduced in R2019a