scipy.signal.

check_NOLA#

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

檢查是否滿足非零重疊相加 (NOLA) 限制。

參數:
windowstr 或 tuple 或 array_like

想要使用的視窗。如果 window 是字串或 tuple,則會將其傳遞給 get_window 以產生視窗值,預設為 DFT 偶數。請參閱 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, “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