Power Amplifier Modeling

Power amplification modeling represents a single processing step within the radio-frequency hardware model of transmitting modems.

classDiagram PowerAmplifier <|-- RappPowerAmplifier PowerAmplifier <|-- ClippingPowerAmplifier Serializable <|-- PowerAmplifier PowerAmplifier <|-- SalehPowerAmplifier PowerAmplifier <|-- CustomPowerAmplifier

Each power amplifier model instance implements an equation

\[s'(t) = f\lbrace s(t), t \rbrace \in \mathbb{C}\]

distorting complex-valued signal samples \(s(t) \in \mathbb{C}\) feeding into the power amplifier. For time-invariant (i.e. memoryless) models \(f\lbrace s(t), t \rbrace = f\lbrace s(t) \rbrace\). The following figure visualizes the gain characteristics for the implemented amplification models for a saturation point \(s_\mathrm{sat} = 1\).

(Source code, png, hires.png, pdf)

../_images/plot_pa_characteristics.png
class PowerAmplifier(saturation_amplitude=inf, adjust_power=False)

Bases: hermespy.core.factory.Serializable

Base class of a power-amplifier model.

Implements a distortion-less amplification model

\[s'(t) = s(t) \text{,}\]

which may be overwritten by classes inheriting from this base.

Parameters
  • saturation_amplitude (float, optional) – Cut-off point for the linear behaviour of the amplification in Volt.

  • adjust_power (bool, optional) – Power adjustment flag.

yaml_tag: str = 'Distortionless'

YAML serialization tag.

adjust_power: bool

Power adjustment flag.

If enabled, the power amplifier will normalize the distorted signal after propagation modeling.

property saturation_amplitude: float

Cut-off point for the linear behaviour of the amplification.

Referred to as \(s_\mathrm{sat} \ \mathbb{R}_{+}\) in equations.

Returns

Saturation amplitude in Volt.

Return type

float

Raises

ValueError – If amplitude is smaller than zero.

send(input_signal)

Model signal amplification characteristics.

Internally calls the model subroutine of power-amplifier models implementing this prototype-class.

Parameters

input_signal (np.ndarray) – Sample vector of the signal feeding into the power amplifier.

Returns

Distorted signal after amplification modeling.

Return type

np.ndarray

model(input_signal)

Model signal amplification characteristics.

Parameters

input_signal (np.ndarray) – Sample vector of the signal feeding into the power amplifier.

Returns

Distorted signal after amplification modeling.

Return type

np.ndarray

plot(samples=None, axes=None)

Plot the power amplifier distortion characteristics.

Generates a matplotlib plot depicting the phase/amplitude.

Parameters
  • samples (np.ndarray, optional) – Sample points at which to evaluate the characteristics. In other words, the x-axis of the resulting characteristics plot.

  • axes (Optional[Tuple[plt.axes, plt.axes]], optional) – Axes to which to plot the characteristics. By default, a new figure is created.

Return type

None

classmethod to_yaml(representer, node)

Serialize a PowerAmplifier object to YAML.

Parameters
  • representer (BaseRepresenter) – A handle to a representer used to generate valid YAML code. The representer gets passed down the serialization tree to each node.

  • node (PowerAmplifier) – The amplifier instance to be serialized.

Returns

The serialized YAML node.

Return type

Node

class ClippingPowerAmplifier(**kwargs)

Bases: hermespy.simulation.rf_chain.power_amplifier.PowerAmplifier

Model of a clipping power amplifier.

Complex signal samples with amplitudes above \(s_\mathrm{sat} \in \mathbb{R}\) will be clipped to the maximum amplitude value. In case of clipping, the respective sample angles will be preserved, so that

\[s'(t) = \frac{s(t)}{|s(t)|} \cdot \min{(|s(t)|, s_\mathrm{sat})} \text{.}\]
Parameters

kwargs (Any) – PowerAmplifier base class initialization arguments.

yaml_tag: str = 'Clipping'

YAML serialization tag.

model(input_signal)

Model signal amplification characteristics.

Parameters

input_signal (np.ndarray) – Sample vector of the signal feeding into the power amplifier.

Returns

Distorted signal after amplification modeling.

Return type

np.ndarray

adjust_power: bool

Power adjustment flag.

If enabled, the power amplifier will normalize the distorted signal after propagation modeling.

class RappPowerAmplifier(smoothness_factor=1.0, **kwargs)

Bases: hermespy.simulation.rf_chain.power_amplifier.PowerAmplifier

Model of a power amplifier according to Rapp’s model.

Implements a saturation characteristic according to

\[s'(t) = s(t) \cdot \left( 1 + \left( \frac{|s(t)|}{s_\mathrm{sat}} \right)^{2p_\mathrm{Rapp}} \right)^{-\frac{1}{2p_\mathrm{Rapp}}} \text{,}\]

where \(p_\mathrm{Rapp} \in \lbrace x \in \mathbb{R} | x \geq 1 \rbrace\) denotes the smoothness factor of the saturation curve.

See Rapp1 for further details.

Clipping Power Amplifier object initialization.

Parameters
  • smoothness_factor (float, optional) – Smoothness factor of the amplification saturation characteristics.

  • kwargs (Any) – PowerAmplifier base class initialization arguments.

yaml_tag: str = 'Rapp'

YAML serialization tag.

property smoothness_factor: float

Smoothness factor of the amplification saturation characteristics.

Also referred to as Rapp-factor \(p_\mathrm{Rapp}\).

Returns

Smoothness factor.

Return type

float

Raises

ValueError – If smoothness factor is smaller than one.

model(input_signal)

Model signal amplification characteristics.

Parameters

input_signal (np.ndarray) – Sample vector of the signal feeding into the power amplifier.

Returns

Distorted signal after amplification modeling.

Return type

np.ndarray

classmethod to_yaml(representer, node)

Serialize a RappPowerAmplifier object to YAML.

Parameters
  • representer (BaseRepresenter) – A handle to a representer used to generate valid YAML code. The representer gets passed down the serialization tree to each node.

  • node (RappPowerAmplifier) – The amplifier instance to be serialized.

Returns

The serialized YAML node.

Return type

Node

adjust_power: bool

Power adjustment flag.

If enabled, the power amplifier will normalize the distorted signal after propagation modeling.

class SalehPowerAmplifier(amplitude_alpha, amplitude_beta, phase_alpha, phase_beta, **kwargs)

Bases: hermespy.simulation.rf_chain.power_amplifier.PowerAmplifier

Model of a power amplifier according to Saleh.

Implements a saturation characteristic according to

\[s'(t) = s(t) \cdot A\lbrace s(t) \rbrace e^{\mathrm{j} \Phi\lbrace s(t) \rbrace}\]

where

\[A\lbrace s \rbrace = \frac{ \alpha_\mathrm{a} \frac{|s|}{s_\mathrm{sat}} } { 1 + \beta_\mathrm{a} \frac{|s|^2}{s_\mathrm{sat}^2} }\]

describes the amplitude model depending on two parameters \(\alpha_\mathrm{a}, \beta_\mathrm{a} \in \mathbb{R}_{+}\) and

\[\Phi\lbrace s \rbrace = \frac{ \alpha_\Phi \frac{|s|}{s_\mathrm{sat}} } { 1 + \beta_\Phi \frac{|s|^2}{s_\mathrm{sat}^2} }\]

describes the phase model depending on \(\alpha_\Phi, \beta_\Phi \in \mathbb{R}\), respectively.

See Saleh2 for further details.

Parameters
  • amplitude_alpha (float) – Amplitude model factor alpha.

  • amplitude_beta (float) – Amplitude model factor beta.

  • phase_alpha (float) – Phase model factor alpha.

  • phase_beta (float) – Phase model factor beta.

  • kwargs (Any) – PowerAmplifier base class initialization arguments.

yaml_tag: str = 'Saleh'

YAML serialization tag.

phase_alpha: float

Phase model factor \(\alpha_\Phi\).

phase_beta: float

Phase model factor \(\beta_\Phi\).

property amplitude_alpha: float

Amplitude model factor \(\alpha_\mathrm{a}\).

Returns

Amplitude factor.

Return type

float

Raises

ValueError – If the factor is smaller than zero.

property amplitude_beta: float

Amplitude model factor \(\beta_\mathrm{a}\).

Returns

Amplitude factor.

Return type

float

Raises

ValueError – If the factor is smaller than zero.

model(input_signal)

Model signal amplification characteristics.

Parameters

input_signal (np.ndarray) – Sample vector of the signal feeding into the power amplifier.

Returns

Distorted signal after amplification modeling.

Return type

np.ndarray

classmethod to_yaml(representer, node)

Serialize a SalehPowerAmplifier object to YAML.

Parameters
  • representer (BaseRepresenter) – A handle to a representer used to generate valid YAML code. The representer gets passed down the serialization tree to each node.

  • node (SalehPowerAmplifier) – The amplifier instance to be serialized.

Returns

The serialized YAML node.

Return type

Node

class CustomPowerAmplifier(input, gain, phase, **kwargs)

Bases: hermespy.simulation.rf_chain.power_amplifier.PowerAmplifier

Model of a customized power amplifier.

Parameters
  • input (np.ndarray) –

  • gain (np.ndarray) –

  • phase (np.ndarray) –

  • kwargs (Any) – PowerAmplifier base class initialization arguments.

Raises

ValueError – If input, gain, and phase are not vectors of identical length.

yaml_tag: str = 'Custom'

YAML serialization tag.

model(input_signal)

Model signal amplification characteristics.

Parameters

input_signal (np.ndarray) – Sample vector of the signal feeding into the power amplifier.

Returns

Distorted signal after amplification modeling.

Return type

np.ndarray

1

Ch. Rapp. Effects of HPA-nonlinearity on a 4-DPSK/OFDM-signal for a digital sound broadcasting system. In Second European Conf. on Sat. Comm., 22. - 24.10.91, Liege, Belgium., 179–184. 1991. URL: https://elib.dlr.de/33776/.

2

A.A.M. Saleh. Frequency-independent and frequency-dependent nonlinear models of TWT amplifiers. IEEE Transactions on Communications, 29(11):1715–1720, November 1981. doi:10.1109/TCOM.1981.1094911.