Main Content


Create nonlinear power amplifier with memory

Since R2024a


Use the rf.PAmemory System object™ to model a two-port power amplifier (PA) using a memory polynomial expression derived from the Volterra series. The Volterra series models the nonlinear relationship between input and output signals. This System object:

  • Includes memory effects, where the output response depends on the current input signal and the input signal at previous times.

  • Does not generate new frequency components and includes memory effects since the output response at any instance of time depends on both current and previous input signal values.

Use this System object when transmitting narrowband signals into your RF system.

To create a nonlinear power amplifier with memory and use it:

  1. Create the rf.PAmemory object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?



rfpa = rf.PAmemory creates a narrowband power amplifier with memory using a two-dimensional polynomial expression derived from a Volterra series to model the nonlinear relationship between input and output signals.


rfpa = rf.PAmemory (Name=Value) sets properties of the rf.PAmemory object using one or more name-value arguments. For example, rfpa = rf.PAmemory(Model='Cross-term memory') creates a power amplifier element designed using the cross-term memory type. Properties you do not specify retain their default values.


expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Model to design power amplifier, specified as Memory polynomial or Cross-term memory. This table summarizes the characteristics of the two models.

ModelCharacterization DataType of CoefficientsIn-Band Spectral RegrowthOut-of-Band Harmonic Generation
Memory polynomial (default)Bandpass (I,Q)2-D Complex matrixYesNo
Cross-term memoryBandpass (I,Q)2-D Complex matrixYesNo

For more information, see Model Types in rf.PAmemory System object.

Coefficient matrix, specified as a 2-D complex matrix for the Memory polynomial and Cross-term memory models.

For the Memory polynomial and Cross-Term Memory models, you can identify the complex coefficient matrix based on the measured complex (I,Q) output-vs.-input amplifier characteristic. As an example, see the helper function in Coefficient Matrix Computation.

The size of the matrix depends on the number of delays and the degree of the system nonlinearity.

  • For the Memory polynomial model, the matrix has dimensions Memory Depth (mem)-by-Voltage Order (deg) .

  • For the Cross-term memory model, the matrix has dimensions Memory Depth (mem)-by-{Memory Depth (mem)·(Voltage Order (deg)-1)+1} .

Sample time of the input-output data that the rf.PAmemory System object uses to construct the coefficient matrix, specified in seconds.


To enable this parameter, input rf.PAmemory System object to a MATLAB System (Simulink) block.




out = rfpa(in) returns a time-dependent amplified signal out based on the time-dependent input signal in.

Input Arguments

expand all

Time-dependent input signal, specified as a column. A column represents consecutive points in time.

Data Types: double | single

Output Arguments

expand all

Time-dependent output signal, returned as a complex column. The output time-dependent signal is equal in size to the input time dependent signal.

Data Types: double | single

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:


expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object


collapse all

Create a nonlinear power amplifier using the cross-term memory model. Extract the coefficient matrix from the PAcoefficients.mat file.

rfpa = rf.PAmemory (Model='Cross-term Memory',...

Generate the modulated symbols.

modData = qammod(randi([0 15],1000,1),16,'UnitAveragePower',true);

Return a time-dependent amplified signal out based on the time-dependent input signal modData.

out = rfpa(modData);

Plot the data in a scatter plot.


Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

Load the measured power amplifier (PA) data.


Extract and map the inputs and output signals of the PA data into local variables.

paInput = results.InputWaveform;
paOutput = results.OutputWaveform;

Perform the fit and RMS error calculation for these values. In this example, you use only half the data to compute the fitting coefficients, as the whole data set will be used to compute the relative error.

numDataPts = length(paInput);
halfDataPts = round(numDataPts/2);

Specify memory length, nonlinearity degree, and model type as inputs to compute PA coefficient matrix.

modType = "memPoly";
memLen = 5;
degLen = 5;

Compute the PA coefficient matrix using the fit_memory_poly_model helper function. For more information, see the helper function attached in this example or refer Coefficient Matrix Computation.

fitCoefMatMem = fit_memory_poly_model(             ...
fitCoefMatMem = 5x5 single matrix

  22.9312 + 3.2120i   8.4206 - 2.7358i -16.4111 - 6.9922i  12.5000 + 4.5507i  -3.0464 - 1.0331i
   0.0000 + 0.0000i   9.4204 + 7.0534i -18.2653 -19.1560i   9.5448 +21.1384i  -1.6043 - 5.3105i
 -18.1526 +10.5102i  -4.9765 -16.1011i  10.7683 +23.3718i  -3.8341 -21.8584i   0.3767 + 5.0546i
  30.5321 -11.4875i  -0.1402 + 8.4027i  -1.9678 - 9.2836i  -0.7806 +10.6694i   0.4286 - 2.5251i
 -14.7755 + 4.2991i   1.4905 - 1.8333i  -1.4512 + 1.4988i   1.4280 - 2.5626i  -0.3660 + 0.6396i

Input this coefficient matrix to the rf.PAmemory System object to create a nonlinear power amplifier.

rfpa = rf.PAmemory (CoefficientMatrix=fitCoefMatMem)
rfpa = 
  rf.PAmemory with properties:

                Model: 'Memory polynomial'
    CoefficientMatrix: [5x5 double]


expand all


[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, No. 10, October 2006, pp. 3852–3860.

[2] Gan, Li, and Emad Abd-Elrady. "Digital Predistortion of Memory Polynomial Systems using Direct and Indirect Learning Architectures". Proceedings of the Eleventh IASTED International Conference on Signal and Image Processing (SIP) (F. Cruz-Roldán and N. B. Smith, eds.), No. 654-802. Calgary, AB: ACTA Press, 2009.

Version History

Introduced in R2024a

See Also