scipy.signal.

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.istftistft(旧版)中实现的算法仅要求满足较弱的“非零重叠相加”条件(如 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