Skip to contents

The Pseudo-Voigt function is an approximation for the Voigt function. It is defined as a linear combination of the Gaussian and Lorentzian functions, weighted by a mixing parameter \(\eta\) (eta) that determines the relative contribution of each component.

Usage

pseudo_voigt(x, y0, xc, wG, wL, A, eta = NULL)

Arguments

x

A numeric vector representing the independent variable (e.g., wavelength or frequency).

y0

A numeric value specifying the baseline offset.

xc

A numeric value representing the center of the peak.

wG

A numeric value specifying the Gaussian full width at half maximum (FWHM).

wL

A numeric value specifying the Lorentzian FWHM.

A

A numeric value representing the peak area.

eta

A numeric value between 0 and 1, representing the mixing parameter. If eta = NULL (default), the mixing parameter is approximated by a polynomial function of wG and wL. This approximation (accuracy of 1%), proposed by Ida et al. (2000), provides an analytical expression for the mixing parameter based on the relative FWHM of the Gaussian and Lorentzian components. The polynomial approximation is useful when the precise value of eta is unknown.

Value

A numeric vector of the same length as x, containing the computed pseudo-Voigt function values. If eta = NULL, the function returns a list with the following components:

  • $y: A numeric vector of the same length as x, containing the computed pseudo-Voigt function values using the approximated mixing parameter.

  • $eta: The approximate mixing parameter calculated using the polynomial approximation based on the wG and wL values.

Details

The Pseudo-Voigt function is given by:

$$y = y_0 + A \cdot [ \eta \cdot L(x, x_c, w_L) + (1 - \eta) \cdot G(x, x_c, w_G)]$$

where:

  • \(A\) is the peak area

  • \(y_0\) is the baseline offset

  • \(G(x, x_c, w_G)\) is the Gaussian component with center \(x_c\) and the full width at half maximum \(w_G\)

  • \(L(x, x_c, w_G)\) is the Lorentzian component with center \(x_c\) and the full width at half maximum \(w_L\)

  • \(\eta\) is the mixing parameter, with \(0 \leq \eta \leq 1\). The mixing parameter \(\eta\) allows the pseudo-Voigt function to describe a wide range of line shapes, from pure Gaussian (\(\eta = 0\)) to pure Lorentzian (\(\eta = 1\)), and various intermediate shapes in between.

The Olivero and Longbothum (1977) approximation, and its subsequent refinements (Belafhal 2000; Zdunkowski et al. 2007), offer an efficient and accurate way (accuracy of 0.02%) to estimate the half-width of a Voigt line, which is given by:

$$w_v = \frac{1}{2} \cdot [c_1 \cdot w_L + \sqrt(c_2 \cdot w_L^2 + 4 \cdot w_G^2)]$$ with \(c_1 = 1.0692\), \(c_2 = 0.86639\)

References

  • Zdunkowski, W., Trautmann, T., Bott, A., (2007). Radiation in the Atmosphere — A Course in Theoretical Meteorology. Cambridge University Press.

  • Belafhal, A., (2000). The shape of spectral lines: Widths and equivalent widths of the Voigt profile. Opt. Commun., 177(1-6):111–118.

  • Olivero, J., Longbothum, R., (1977). Empirical fits to the Voigt line width: A brief review. J. Quant. Spectrosc. Radiat. Transfer, 17(2):233–236.

  • Ida, T., Ando, M., Toraya, H., (2000). Extended pseudo-Voigt function for approximating the Voigt profile. Journal of Applied Crystallography. 33(6):1311–1316.

Examples

x <- seq(-2, 2, length.out = 100)
y1 <- pseudo_voigt(x, y0 = 0, xc = 0, wG = 1, wL = 0.5, A = 2, eta = 0)
y2 <- pseudo_voigt(x, y0 = 0, xc = 0, wG = 1, wL = 0.5, A = 2, eta = 0.5)
y3 <- pseudo_voigt(x, y0 = 0, xc = 0, wG = 1, wL = 0.5, A = 2, eta = 1)
y4 <- pseudo_voigt(x, y0 = 0, xc = 0, wG = 1, wL = 0.5, A = 2)
plot(x, y1, type = "l", col = "red", main = "Pseudo-Voigt Profile", ylim = c(0, 5.5))
lines(x, y2, col = "blue")
lines(x, y3, col = "green")
lines(x, y4$y, col = "black")
legend("topright", legend = c("eta = 1", "eta = 0.5", "eta = 0", "eta = NULL"),
col = c("red", "blue", "green", "black"), lty = 1)


# The approximated mixing parameter:
y4$eta
#> [1] 0.4647941