check_COLA#
- scipy.signal.check_COLA(window, nperseg, noverlap, tol=1e-10)[source]#
检查是否满足恒定重叠相加(COLA)约束(旧版函数)。
旧版
此函数被视为旧版,将不再接收更新。虽然我们目前没有计划将其移除,但建议新代码改用更现代的替代方案。COLA 约束等同于拥有一个恒定的双窗口,即
all(ShortTimeFFT.dual_win == ShortTimeFFT.dual_win[0])
。因此,closest_STFT_dual_window
概括了此函数,如下例所示>>> import numpy as np >>> from scipy.signal import check_COLA, closest_STFT_dual_window, windows ... >>> w, w_rect, hop = windows.hann(12, sym=False), np.ones(12), 6 >>> dual_win, alpha = closest_STFT_dual_window(w, hop, w_rect, scaled=True) >>> np.allclose(dual_win/alpha, w_rect, atol=1e-10, rtol=0) True >>> check_COLA(w, len(w), len(w) - hop) # equivalent legacy function call True
- 参数:
- window字符串、元组或类数组对象
要使用的期望窗口。如果 window 是字符串或元组,它将传递给
get_window
以生成窗口值,这些值默认为 DFT 偶数。有关窗口列表和所需参数,请参阅get_window
。如果 window 是类数组对象,它将直接用作窗口,其长度必须为 nperseg。- nperseg整型
每个段的长度。
- noverlap整型
段之间重叠的点数。
- tol浮点型,可选
允许的 bin 加权和与中值 bin 和的方差。
- 返回:
- verdict布尔型
如果所选组合在 tol 范围内满足 COLA,则为 True,否则为 False。
另请参阅
closest_STFT_dual_window
允许确定给定窗口最接近满足 COLA 约束的窗口
check_NOLA
检查是否满足非零重叠相加(NOLA)约束
ShortTimeFFT
提供短时傅里叶变换及其逆变换
stft
短时傅里叶变换(旧版)
istft
逆短时傅里叶变换(旧版)
说明
为了使用所谓的“重叠相加法”反转短时傅里叶变换(STFT),信号加窗必须服从“恒定重叠相加”(COLA)约束。这确保了输入数据中的每个点都得到同等加权,从而避免混叠并允许完全重建。请注意,在
ShortTimeFFT.istft
和istft
(旧版)中实现的算法仅要求满足较弱的“非零重叠相加”条件(如check_NOLA
中所示)。- 满足 COLA 的窗口示例
重叠率为 0, 1/2, 2/3, 3/4, … 时的矩形窗口
重叠率为 1/2, 3/4, 5/6, … 时的巴特利特窗口
重叠率为 1/2, 2/3, 3/4, … 时的汉宁窗口
任何 Blackman 系列窗口在 2/3 重叠时
任何
noverlap = nperseg-1
的窗口
其他窗口的非常全面的列表可以在 [2] 中找到,其中当“幅度平坦度”(Amplitude Flatness)为1时,COLA 条件得到满足。
0.19.0 版本新增。
参考文献
[1]Julius O. Smith III, 《频谱音频信号处理》(Spectral Audio Signal Processing), W3K Publishing, 2011, ISBN 978-0-9745607-3-1。
[2]G. Heinzel, A. Ruediger 和 R. Schilling, 《离散傅里叶变换(DFT)的频谱和谱密度估计,包括窗口函数的全面列表和一些新的顶部窗口》(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
示例
>>> from scipy import signal
确认矩形窗口在 75% (3/4) 重叠时的 COLA 条件
>>> signal.check_COLA(signal.windows.boxcar(100), 100, 75) True
但 COLA 对于 25% (1/4) 重叠不成立
>>> signal.check_COLA(signal.windows.boxcar(100), 100, 25) False
“对称”汉宁窗口(用于滤波器设计)不满足 COLA
>>> signal.check_COLA(signal.windows.hann(120, sym=True), 120, 60) False
“周期”或“DFT-偶数”汉宁窗口(用于 FFT 分析)在 1/2, 2/3, 3/4 等重叠时满足 COLA
>>> signal.check_COLA(signal.windows.hann(120, sym=False), 120, 60) True
>>> signal.check_COLA(signal.windows.hann(120, sym=False), 120, 80) True
>>> signal.check_COLA(signal.windows.hann(120, sym=False), 120, 90) True