Devices#
- class RappAmplifier(a_sat: float, *, l: int = 2, g_ss: float = 1, name: str = 'Rapp Amplifier')[source]#
Rapp model of a memoryless solid-state power amplifier (SSPA).
Signal Model#
The Rapp model is a purely AM/AM memoryless nonlinearity: the amplitude is compressed, the phase is left untouched.
\[y[n] = g \left( 1 + \left( \frac{|x[n]|}{a_\mathrm{sat}} \right)^{2l} \right)^{-\frac{1}{2l}} x[n]\]Equivalently, the AM/AM characteristic on the envelope \(r = |x[n]|\) is
\[|y[n]| = \frac{g \, r} {\left( 1 + \left( r / a_\mathrm{sat} \right)^{2l} \right)^{1/(2l)}}, \qquad \arg y[n] = \arg x[n]\]which is linear with slope \(g\) for \(r \ll a_\mathrm{sat}\) and saturates at \(g \, a_\mathrm{sat}\) for \(r \gg a_\mathrm{sat}\). The smoothness factor \(l\) controls how abruptly the transition happens: \(l \to \infty\) tends to a hard clipper at \(a_\mathrm{sat}\), while small \(l\) gives a soft, early compression.
Axes: element-wise – applied pointwise, shape-agnostic.
- param a_sat:
Input saturation amplitude \(a_\mathrm{sat}\), in the same unit as \(|x[n]|\).
- type a_sat:
float
- param l:
Magnitude smoothness factor \(l\). Default is 2.
- type l:
int, optional, keyword-only
- param g_ss:
Small-signal (linear-region) gain \(g\). Default is 1.
- type g_ss:
float, optional, keyword-only
- param name:
Name of the amplifier instance. Default is
"Rapp Amplifier".- type name:
str, optional, keyword-only
References
C. Rapp, “Effects of HPA-nonlinearity on a 4-DPSK/OFDM-signal for a digital sound broadcasting system,” in Proc. Second European Conference on Satellite Communications (ECSC-2), Liege, Belgium, Oct. 1991, pp. 179-184.
F. M. Ghannouchi, O. Hammi, M. Helaoui, Behavioral Modeling and Predistortion of Wideband Wireless Transmitters, John Wiley & Sons, 2015, Eq. (4.45).
Examples
>>> amp = RappAmplifier(1.0, l=2) >>> print(np.round(amp(np.array([0.5, 1.0, 4.0])), 4)) [0.4925 0.8409 0.999 ]
- class SalehAmplifier(a_sat: float = 1, *, alpha_am: float = 1.9638, beta_am: float = 0.9945, alpha_pm: float = 2.5293, beta_pm: float = 2.8168, name: str = 'Saleh Amplifier')[source]#
Saleh model of a memoryless travelling-wave tube amplifier (TWTA).
Signal Model#
Unlike the Rapp model, the Saleh model carries an AM/PM conversion: the amplifier turns an amplitude variation into a phase rotation, which is the dominant impairment of a TWTA. Writing the normalized input envelope \(r[n] = |x[n]| / a_\mathrm{sat}\),
\[y[n] = x[n] \, G\left(r[n]\right) \, e^{j \Phi\left(r[n]\right)}\]with the AM/AM conversion
\[G(r) = \frac{\alpha_a}{1 + \beta_a r^2} \qquad \Longrightarrow \qquad |y[n]| = a_\mathrm{sat} \, \frac{\alpha_a \, r[n]} {1 + \beta_a \, r^2[n]}\]and the AM/PM conversion
\[\Phi(r) = \frac{\alpha_\phi \, r^2}{1 + \beta_\phi \, r^2}\]The output amplitude peaks at \(r = 1 / \sqrt{\beta_a}\), where it reaches \(a_\mathrm{sat} \alpha_a / (2 \sqrt{\beta_a})\), and then decreases – a TWTA is driven back past saturation, unlike the monotone Rapp SSPA. The phase shift grows monotonically and saturates at \(\alpha_\phi / \beta_\phi\) radians. The default coefficients are those fitted by Saleh to a measured TWTA.
Axes: element-wise – applied pointwise, shape-agnostic. The output is always complex, because of the AM/PM term.
- param a_sat:
Input saturation amplitude \(a_\mathrm{sat}\) used to normalize the envelope, \(r[n] = |x[n]| / a_\mathrm{sat}\). Default is 1.
- type a_sat:
float, optional
- param alpha_am:
AM/AM small-signal gain \(\alpha_a\). Default is 1.9638.
- type alpha_am:
float, optional, keyword-only
- param beta_am:
AM/AM compression coefficient \(\beta_a\). Default is 0.9945.
- type beta_am:
float, optional, keyword-only
- param alpha_pm:
AM/PM conversion coefficient \(\alpha_\phi\) in rad. Default is 2.5293.
- type alpha_pm:
float, optional, keyword-only
- param beta_pm:
AM/PM saturation coefficient \(\beta_\phi\). Default is 2.8168.
- type beta_pm:
float, optional, keyword-only
- param name:
Name of the amplifier instance. Default is
"Saleh Amplifier".- type name:
str, optional, keyword-only
References
A. A. M. Saleh, “Frequency-independent and frequency-dependent nonlinear models of TWT amplifiers,” IEEE Transactions on Communications, vol. 29, no. 11, pp. 1715-1720, Nov. 1981.
Examples
>>> y = SalehAmplifier()(np.array([0.5, 1.0, 2.0], dtype=complex)) >>> print(np.round(np.abs(y), 4)) # AM/AM: peaks near r = 1, then falls [0.7864 0.9846 0.789 ] >>> print(np.round(np.angle(y), 4)) # AM/PM: growing phase rotation (rad) [0.371 0.6627 0.8247]