check_NOLA#
- scipy.signal.check_NOLA(window, nperseg, noverlap, tol=1e-10)[源码]#
检查是否满足非零重叠相加(Nonzero Overlap Add,NOLA)约束。
- 参数:
- windowstr 或 tuple 或 array_like
要使用的期望窗。如果 window 是字符串或元组,它会传递给
get_window
以生成窗值,这些值默认是 DFT-偶数。有关窗列表和所需参数,请参阅get_window
。如果 window 是 array_like,它将直接用作窗,其长度必须是 nperseg。- nperseg整型
每个段的长度。
- noverlap整型
段之间重叠的点数。
- tol浮点型,可选
允许的箱子加权和与中位数箱子和之间的方差。
- 返回:
- verdict布尔型
如果所选组合在 tol 范围内满足 NOLA 约束,则为 True,否则为 False
另请参阅
check_COLA
检查是否满足恒定重叠相加(Constant OverLap Add,COLA)约束
stft
短时傅里叶变换
istft
逆短时傅里叶变换
说明
为了通过
istft
中的逆短时傅里叶变换(inverse STFT)实现 STFT 的逆变换,信号加窗必须遵守“非零重叠相加”(nonzero overlap add,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, “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
确认 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