def lorentz(M, std=1.0, sym=True):
"""Lorentz window (same as Cauchy function). Function skeleton stolen from
scipy.signal.gaussian().
The Lorentz function is
.. math::
L(x) = \\frac{\Gamma}{(x-x_0)^2 + \Gamma^2}
Here :math:`x_0 = 0` and `std` = :math:`\Gamma`.
Some definitions use :math:`1/2\,\Gamma` instead of :math:`\Gamma`, but
without 1/2 we get comparable peak width to Gaussians when using this
window in convolutions, thus ``scipy.signal.gaussian(M, std=5)`` is similar
to ``lorentz(M, std=5)``.
Parameters
----------
M : int
number of points
std : float
spread parameter :math:`\Gamma`
sym : bool
Returns
-------
w : (M,)
"""
if M < 1:
return np.array([])
if M == 1:
return np.ones(1,dtype=float)
odd = M % 2
if not sym and not odd:
M = M+1
n = np.arange(0, M) - (M - 1.0) / 2.0
w = std / (n**2.0 + std**2.0)
w /= w.max()
if not sym and not odd:
w = w[:-1]
return w
评论列表
文章目录