import warnings
import numpy as np
from scipy.signal.windows import gaussian as spgauss
[docs]def ricker(t, f0=10):
r"""Ricker wavelet
Create a Ricker wavelet given time axis ``t`` and central frequency ``f_0``
Parameters
----------
t : :obj:`numpy.ndarray`
Time axis (positive part including zero sample)
f0 : :obj:`float`, optional
Central frequency
Returns
-------
w : :obj:`numpy.ndarray`
Wavelet
t : :obj:`numpy.ndarray`
Symmetric time axis
wcenter : :obj:`int`
Index of center of wavelet
"""
if len(t) % 2 == 0:
t = t[:-1]
warnings.warn("one sample removed from time axis...")
w = (1 - 2 * (np.pi * f0 * t) ** 2) * np.exp(-((np.pi * f0 * t) ** 2))
w = np.concatenate((np.flipud(w[1:]), w), axis=0)
t = np.concatenate((np.flipud(-t[1:]), t), axis=0)
wcenter = np.argmax(np.abs(w))
return w, t, wcenter
[docs]def gaussian(t, std=1):
r"""Gaussian wavelet
Create a Gaussian wavelet given time axis ``t``
and standard deviation ``std`` using
:py:func:`scipy.signal.windows.gaussian`.
Parameters
----------
t : :obj:`numpy.ndarray`
Time axis (positive part including zero sample)
std : :obj:`float`, optional
Standard deviation of gaussian
Returns
-------
w : :obj:`numpy.ndarray`
Wavelet
t : :obj:`numpy.ndarray`
Symmetric time axis
wcenter : :obj:`int`
Index of center of wavelet
"""
if len(t) % 2 == 0:
t = t[:-1]
warnings.warn("one sample removed from time axis...")
w = spgauss(len(t) * 2 - 1, std=std)
t = np.concatenate((np.flipud(-t[1:]), t), axis=0)
wcenter = np.argmax(np.abs(w))
return w, t, wcenter