Ricker wavelet

The Ricker wavelet is a model seismic wavelet, sometimes called a Mexican hat wavelet.

Analytic expression

The amplitude A of the Ricker wavelet with peak frequency f at time t is computed like so:

$A = (1-2 \pi^2 f^2 t^2) e^{-\pi^2 f^2 t^2}$
Example Ricker wavelet, as plotted by WolframAlpha.[1]

Sometimes the period (somewhat erroneously referred to occasionally as the wavelength) is given as 1/f, but since it has mixed frequencies, this is not quite correct, and for some wavelets is not even a good approximation. In fact, the Ricker wavelet has its sidelobe minima at

$\pm \frac{\sqrt{3/2}}{\pi f}$

These minima have the value

$A_\mathrm{min} = -\frac{2}{e^{3/2}}$

Apparent vs dominant frequency

We can use the trough-to-trough width of the Ricker to estimate the dominant frequency (i.e. the central frequency of the Ricker) from the apparent frequency (which will be driven by this trough-to-trough width). If 't' is the width in time:

$t_\mathrm{app} = 2 \frac{\sqrt{3/2}}{\pi f_\mathrm{dom}} = \frac{\sqrt{6}}{\pi f_\mathrm{dom}}$

and

$f_\mathrm{app} = \frac{1}{t_\mathrm{app}} = \frac{\pi f_\mathrm{dom}}{\sqrt{6}}$

then

$f_\mathrm{dom} = f_\mathrm{app} \frac{\sqrt{6}}{\pi}$

Make one in Python

Here's a snippet from an IPython Notebook by Evan:[2][3]

import numpy as np
import matplotlib.pyplot as plt

def ricker(f, length=0.128, dt=0.001):
t = np.arange(-length/2, (length-dt)/2, dt)
y = (1.0 - 2.0*(np.pi**2)*(f**2)*(t**2)) * np.exp(-(np.pi**2)*(f**2)*(t**2))
return t, y

f = 25 # A low wavelength of 25 Hz
t, w = ricker(f)