关于Slepian和广义高斯窗的几个问题

信息处理 窗函数
2022-01-01 13:28:04

我正在尝试为scipy.signal 中的所有窗口函数添加文档,但我被困在了Slepian(与 DPSS 相同?)和广义高斯窗口上,这是我以前从未听说过的。

有两个变量是某种类型的形状参数,p在广义高斯和width在 Slepian 中。sig似乎是 sigma,标准偏差。)

2个问题:

  1. 谁能解释这些变量的名称和作用,而不是我进行逆向工程和猜测?

  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 定义ωc“以弧度每秒为单位的所需主瓣截止频率”。

广义正态分布有 β(等于两倍p?),它被称为形状参数,β = 1 的正态分布和 β = 2 的拉普拉斯分布。

3个回答

Slepian 序列是一个函数族。对于给定的 NW,大多数算法一次计算 2*NW - 1 个序列。N 是序列中的点数,W 决定给定 Slepian 序列的傅里叶变换的频域主瓣宽度的一半。通常,您会使用 3 或 4 的 NW 进行信号处理。

在 scipy 中,他们要求N(Python 代码中的 m)和W(Python代码中的宽度)参数分别在matlab中输入时间带宽积NW作为单个参数。这是有道理的,因为您通常在计算固定窗口大小的 Slepian 序列,N.

如果您正在估计平稳时间序列的功率谱,则 DPSS 是您应该使用的一组窗口。

广义高斯函数返回一个类高斯函数,根据 p 参数提升到连续更高的幂。随着 p 逐渐提高到更高的幂,广义高斯在时域中变得更窄。高斯函数的优点在于它是自己的傅里叶变换,它是实现不确定性原理极限的函数。如果您想计算短时傅立叶变换或频谱图作为非平稳时间序列的时变功率谱的估计量,则高斯函数可能很有用。

反驳GG的一个例子是它自己的变换。p = 0.5 给出了一个普通的背靠背指数,其变换为 2a/(s^2 + a^2)。

至于DC块,它是。在频域 Fdcx(w) = 1 - F(w)。这将使 DC 附近的拒绝与 w 中的近 DC 在现在的通带中变得未优化。所以我只会使用 Dolph 来使宽带通带变成等波纹。

这是时域中的脉冲减去原始窗口函数。冲动有多大?它必须强制序列的总和为零。

警告,偶数长度序列在奈奎斯特频率处强制为零,因此您需要避免这种情况。

GG 的傅里叶变换也是一个高斯变换。使用卷积定理,FT(Gaussian \times Gaussian) = FT(Gaussian) \conv FT(Gaussian) = Gaussian \conv Gaussian = Gaussian。希望有帮助!