# 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}}$ 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:

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)