我正在尝试为scipy.signal 中的所有窗口函数添加文档,但我被困在了Slepian(与 DPSS 相同?)和广义高斯窗口上,这是我以前从未听说过的。
有两个变量是某种类型的形状参数,p
在广义高斯和width
在 Slepian 中。(sig
似乎是 sigma,标准偏差。)
2个问题:
谁能解释这些变量的名称和作用,而不是我进行逆向工程和猜测?
你能解释一下这些窗户的用途或用途吗?
def general_gaussian(M, p, sig, sym=True):
"""Return a window with a generalized Gaussian shape.
The Gaussian shape is defined as ``exp(-0.5*(x/sig)**(2*p))``, the
half-power point is at ``(2*log(2)))**(1/(2*p)) * sig``.
"""
if M < 1:
return np.array([])
if M == 1:
return np.ones(1, 'd')
odd = M % 2
if not sym and not odd:
M = M + 1
n = np.arange(0, M) - (M - 1.0) / 2.0
w = np.exp(-0.5 * (n / sig) ** (2 * p))
if not sym and not odd:
w = w[:-1]
return w
def slepian(M, width, sym=True):
"""Return the M-point slepian window.
"""
if (M * width > 27.38):
raise ValueError("Cannot reliably obtain slepian sequences for"
" M*width > 27.38.")
if M < 1:
return np.array([])
if M == 1:
return np.ones(1, 'd')
odd = M % 2
if not sym and not odd:
M = M + 1
twoF = width / 2.0
alpha = (M - 1) / 2.0
m = np.arange(0, M) - alpha
n = m[:, np.newaxis]
k = m[np.newaxis, :]
AF = twoF * special.sinc(twoF * (n - k))
[lam, vec] = linalg.eig(AF)
ind = np.argmax(abs(lam), axis=-1)
w = np.abs(vec[:, ind])
w = w / max(w)
if not sym and not odd:
w = w[:-1]
return w
可能的匹配:
nipy 的 dpss_windows 函数使用NW
,“对应于 2NW = BW*f0 = BW*N/dt 但 dt 取为 1 的标准化半带宽”
Matlab的dpss使用time_halfbandwidth
的是同一个窗口吗?是time_halfbandwidth
一样的width
吗?
这个 DPSS 定义有“以弧度每秒为单位的所需主瓣截止频率”。
广义正态分布有 β(等于两倍p
?),它被称为形状参数,β = 1 的正态分布和 β = 2 的拉普拉斯分布。