scipy.signal.

check_NOLA#

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

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

参数:
窗口str 或 tuple 或 array_like

要使用的期望窗口。如果 window 是一个字符串或元组,它会被传递给 get_window 以生成窗口值,这些值默认是 DFT-even 的。请参阅 get_window 以获取窗口列表和所需参数。如果 window 是类数组,它将直接用作窗口,并且其长度必须为 nperseg。

nperseg整数

每个段落的长度。

noverlap整数

段落之间重叠的点数。

tolfloat, 可选

一个箱子的加权和与中位数箱子和之间的允许偏差。

返回:
裁决布尔

True 如果选择的组合在 tol 内满足 NOLA 约束,否则为 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约束。

Added in version 1.2.0.

参考文献

[1]

Julius O. Smith III, “Spectral Audio Signal Processing”, W3K Publishing, 2011, ISBN 978-0-9745607-3-1.

[2]

G. Heinzel, A. Ruediger and R. Schilling, “Spectrum and spectral density estimation by the Discrete Fourier transform (DFT), including a comprehensive list of window functions and some new at-top windows”, 2002, http://hdl.handle.net/11858/00-001M-0000-0013-557A-5

示例

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

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

>>> 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