GMWs are defined in the frequency domain, as:

\[\Psi_{k; \beta, \gamma}(\omega^+) = A_{k; \beta, \gamma} \omega^\beta e^{-\omega^\gamma} L_k^c(2 \omega^\gamma)\]

where $L_k^c$ denotes the generalized Laguerre polynomial

\[L_k^c (x) = \sum_{m=0}^k (-1)^m \frac{ \Gamma(k + c + 1) }{ \Gamma(c + m + 1)\Gamma(k - m + 1) } \frac{x^m}{m!}\]

where $c = r - 1$ and $r = (2\beta + 1) / \gamma$, and the amplitude term $A$ depends on normalization, L1 (bandpass) or L2 (energy):

\[\begin{align} A_{k; \beta, \gamma}^{\text{L1}} &= 2 \left( \frac{e \gamma}{\beta} \right)^{\beta / \gamma} \\ A_{k; \beta, \gamma}^{\text{L2}} &= \sqrt{ 2\pi \gamma 2^r \frac{\Gamma(k + 1)}{\Gamma(k + r)} \left( \frac{\beta}{\gamma} \right)^{1 / \gamma} } \\ \end{align}\]

$\omega^+$ replaces $U(\omega)$ (unit-step function), for simplicity, in denoting $\Psi(\omega < 0) = 0$ (analyticity).


In single expression:

\[\begin{align} \Psi_{k; \beta, \gamma}^{\text{L1}}(\omega^+) &= 2 \left( \frac{e \gamma}{\beta} \right)^{\beta / \gamma} \omega^\beta e^{-\omega^\gamma} \sum_{m=0}^k (-1)^m \frac{ \Gamma(k + r) }{ \Gamma(r + m)\Gamma(k - m + 1) } \frac{(2\omega^\gamma)^m}{m!} \\ \Psi_{k; \beta, \gamma}^{\text{L2}}(\omega^+) &= \sqrt{ 2\pi \gamma 2^r \frac{\Gamma(k + 1)}{\Gamma(k + r)} \left( \frac{\beta}{\gamma} \right)^{1 / \gamma} } \omega^\beta e^{-\omega^\gamma} \sum_{m=0}^k (-1)^m \frac{ \Gamma(k + r) }{ \Gamma(r + m)\Gamma(k - m + 1) } \frac{(2\omega^\gamma)^m}{m!} \\ \end{align}\]

For the base wavelet, where $k=0$ and $L_0^c = 1$, these simplify to:

\[\begin{align} \Psi_{\beta, \gamma}^{\text{L1}} (\omega^+) &= 2 \left( \frac{e \gamma}{\beta} \right)^{\beta / \gamma} \omega^\beta e^{-\omega^\gamma} \\ \Psi_{\beta, \gamma}^{\text{L2}} (\omega^+) &= \sqrt{ 2\pi \gamma 2^r \frac{1}{\Gamma(r)} \left( \frac{\beta}{\gamma} \right)^{1 / \gamma} } \omega^\beta e^{-\omega^\gamma} \\ \end{align}\]

and the (peak) center frequency for both is $\omega_{\beta, \gamma} = (\beta / \gamma)^{1/\gamma}$.


Notes

Scale: above expressions omit scale; when accounted, L1 is computed as-is, simply inputting $\omega := s \cdot \omega$, but L2 additionally multiplies by $\sqrt{s}$:

\[\begin{align} \Psi_{s, k; \beta, \gamma}^{\text{L1}} (\omega) &= \Psi_{k; \beta, \gamma}^{\text{L1}} (s \omega) \\ \Psi_{s, k; \beta, \gamma}^{\text{L2}} (\omega) &= \sqrt{s} \Psi_{k; \beta, \gamma}^{\text{L2}} (s \omega) \\ \end{align}\]

Analytic vs anti-analytic: above expressions are for the analytic GMW, $\Psi^+$; there’s also the anti-analytic $\Psi^-$, non-zero for negative frequencies, which computes its conjugate in time domain: $\Psi^- (\omega) = \Psi^+ (-\omega) \Leftrightarrow \psi^-(t) = \psi^{+*}(t)$. Combining the two thus yields a real wavelet.

Interactive plots: GMW L1GMW L2


Derivations

Python pseudocode deriving above per original (MATLAB, JLAB) formulation (w/ name changes), following .m code, for the case k=0 where L=1:

# note: `f` and `f0` are *radian* quantities, not linear cyclic
# `**` and `^` used interchaneably
f0 = exp( (ln(beta) - ln(gamma)) / gamma )
   = exp( ln(beta^{1/gamma}) - ln(gamma^{1/gamma}) )
   = beta^{1/gamma} / gamma^{1/gamma}
   = (beta / gamma)^{1/gamma}

## norm='bandpass' ############################################
psizero = 2 * exp(- beta * ln(f0) + f0**gamma
                  + beta * ln(w)  - w**gamma)
        = 2 * H * G 

H = exp( beta * (ln(w) - ln(f0)) )
  = exp( beta * (ln(w) - ln((beta/gamma)^{1/gamma})) )
  = exp( ln(w^beta) - ln((beta/gamma)^{beta/gamma}) )
  = exp( ln(w^beta) + ln((gamma/beta)^{beta/gamma}) )
  = w^beta (gamma/beta)^{beta/gamma}

G = exp( fo^gamma - w^gamma )
    exp( (beta/gamma)^(gamma/gamma) - w^gamma )
    exp( beta/gamma - w^gamma )

Psi = psizero  # coeff == 1, L == 1
    = 2 * H * G
    = 2 * w^beta * (gamma/beta)^{beta/gamma} * e^{ beta/gamma - w^gamma }
    = 2 * w^beta * (gamma*e/beta)^{beta/gamma} * e^{-w^gamma}
    = 2 * (gamma*e/beta)^{beta/gamma} * w^beta * e^{-w^gamma}
       
## norm='energy' ##############################################
psizero = exp( beta * ln(w) - w**gamma )
        = exp( ln(w^beta) - w^gamma )
        = w^beta * e^{-w^gamma}  

A = sqrt( 2*pi * gamma * (2**r) * exp(gammaln(k+1) - gammaln(k + r)) )
  = sqrt( 2*pi * gamma * (2**r) * exp( -ln(gamma(r)) ) )
  = sqrt( 2*pi * gamma * (2**r) * exp( ln(1/gamma(r)) ) )
  = sqrt( 2*pi * gamma * (2**r) / gamma(r) )

coeff = sqrt(f0/f) * A
      = sqrt( 2*pi * (f0/f) * gamma * (2**r) / gamma(r) )

Psi = coeff * psizero * L
    = sqrt( 2*pi * gamma * (2^r) / gamma(r) ) * sqrt(f0/f)
      * w^beta * e^{-w^gamma}
    = sqrt( 2*pi * gamma * (2^r) / gamma(r) * (beta / gamma)^{1/gamma} / f)
      * w^beta * e^{-w^gamma}

Note that sqrt(f0/f) is absent in Eq 10 of ref 1 (L2 norm case). Its inclusion normalizes the time-domain wavelet’s energy to unity, and the complete expression is given in CWT examples as sqrt(scale) * psih.


References

  1. “Generalized Morse Wavelets”. Sofia C. Olhede, Andrew T. Walden. November, 2002.
    IEEE Transactions On Signal Processing.
  2. “Higher-Order Properties of Analytic Wavelets”. Johnathan M. Lilly, Sofia C. Olhede. January, 2009. IEEE Transactions On Signal Processing.