scipy.signal.

check_NOLA#

scipy.signal.check_NOLA(window, nperseg, noverlap, tol=1e-10)[source]#

检查是否满足非零重叠加 (NOLA) 约束。

参数:
windowstr 或 tuple 或 array_like

要使用的窗口。如果 window 是字符串或元组,它将传递给 get_window 以生成窗口值,这些值默认情况下为 DFT-even。有关窗口列表和所需参数,请参阅 get_window。如果 window 是 array_like,它将直接用作窗口,其长度必须为 nperseg。

npersegint

每个段的长度。

noverlapint

段之间重叠的点数。

tolfloat,可选

允许的 bin 加权和与中值 bin 和的方差。

返回值:
verdictbool

如果选择的组合在 tol 内满足 NOLA 约束,则为 True,否则为 False

另请参阅

check_COLA

检查是否满足恒定重叠加 (COLA) 约束

stft

短时傅里叶变换

istft

逆短时傅里叶变换

备注

为了通过 istft 中的逆 STFT 来实现 STFT 的反转,信号窗口必须遵守“非零重叠加”(NOLA) 约束

\[\sum_{t}w^{2}[n-tH] \ne 0\]

对于所有 \(n\),其中 \(w\) 是窗口函数,\(t\) 是帧索引,\(H\) 是跳跃大小 (\(H\) = nperseg - noverlap)。

这确保了重叠加反转方程分母中的归一化因子不为零。只有非常病态的窗口才会违反 NOLA 约束。

在版本 1.2.0 中添加。

参考文献

[1]

Julius O. Smith III,“频谱音频信号处理”,W3K 出版社,2011 年,ISBN 978-0-9745607-3-1。

[2]

G. Heinzel,A. Ruediger 和 R. Schilling,“通过离散傅里叶变换 (DFT) 进行频谱和频谱密度估计,包括窗口函数的综合列表和一些新的 at-top 窗口”,2002 年,http://hdl.handle.net/11858/00-001M-0000-0013-557A-5

示例

>>> import numpy as np
>>> from scipy import signal

确认 75% (3/4) 重叠的矩形窗口的 NOLA 条件

>>> signal.check_NOLA(signal.windows.boxcar(100), 100, 75)
True

NOLA 也适用于 25% (1/4) 重叠

>>> signal.check_NOLA(signal.windows.boxcar(100), 100, 25)
True

“对称”汉宁窗口(用于滤波器设计)也是 NOLA

>>> signal.check_NOLA(signal.windows.hann(120, sym=True), 120, 60)
True

只要有重叠,就需要非常病态的窗口才能违反 NOLA

>>> w = np.ones(64, dtype="float")
>>> w[::2] = 0
>>> signal.check_NOLA(w, 64, 32)
False

如果没有足够的重叠,则窗口两端为零的窗口将无法工作

>>> signal.check_NOLA(signal.windows.hann(64), 64, 0)
False
>>> signal.check_NOLA(signal.windows.hann(64), 64, 1)
False
>>> signal.check_NOLA(signal.windows.hann(64), 64, 2)
True