check_COLA#
- scipy.signal.check_COLA(window, nperseg, noverlap, tol=1e-10)[Quelle]#
Prüft, ob die Konstante Überlappungs-Additions-(COLA)-Bedingung erfüllt ist (Legacy-Funktion).
Veraltet
Diese Funktion gilt als veraltet und wird keine weiteren Updates mehr erhalten. Obwohl wir derzeit keine Pläne haben, sie zu entfernen, empfehlen wir, dass neuer Code stattdessen modernere Alternativen verwendet. Die COLA-Bedingung ist äquivalent zu einem konstanten dualen Fenster, d. h.
all(ShortTimeFFT.dual_win == ShortTimeFFT.dual_win[0]). Daherclosest_STFT_dual_windowverallgemeinert diese Funktion, wie das folgende Beispiel zeigt.>>> 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
- Parameter:
- windowstr oder Tupel oder array_like
Das zu verwendende gewünschte Fenster. Wenn window eine Zeichenkette oder ein Tupel ist, wird es an
get_windowübergeben, um die Fensterwerte zu generieren, die standardmäßig DFT-even sind. Sieheget_windowfür eine Liste von Fenstern und erforderliche Parameter. Wenn window array_like ist, wird es direkt als Fenster verwendet und seine Länge muss nperseg sein.- npersegint
Länge jedes Segments.
- noverlapint
Anzahl der Punkte, die zwischen den Segmenten überlappen.
- tolfloat, optional
Die zulässige Varianz der gewichteten Summe eines Bin von der Median-Bin-Summe.
- Rückgabe:
- verdictbool
True, wenn die gewählte Kombination COLA innerhalb von tol erfüllt, False andernfalls.
Siehe auch
closest_STFT_dual_windowErmöglicht die Bestimmung des nächstgelegenen Fensters, das die COLA-Bedingung für ein gegebenes Fenster erfüllt.
check_NOLAPrüft, ob die Nicht-Null-Überlappungs-Additions- (NOLA) Bedingung erfüllt ist
ShortTimeFFTBereitstellung der Kurzzeit-Fourier-Transformation und ihrer Umkehrung.
stftKurzzeit-Fourier-Transformation (Legacy)
istftInverse Kurzzeit-Fourier-Transformation (Legacy)
Hinweise
Um eine Kurzzeit-Fourier-Transformation (STFT) mit der sogenannten „Overlap-Add-Methode“ zu invertieren, muss das Signal-Windowing die Bedingung „Constant OverLap Add“ (COLA) erfüllen. Dies stellt sicher, dass jeder Punkt in den Eingangsdaten gleich gewichtet wird, wodurch Aliasing vermieden und eine vollständige Rekonstruktion ermöglicht wird. Beachten Sie, dass die in
ShortTimeFFT.istftund inistft(Legacy) implementierten Algorithmen nur erfordern, dass die schwächere Bedingung „Nonzero Overlap-Add“ (wie incheck_NOLA) erfüllt ist.- Einige Beispiele für Fenster, die COLA erfüllen.
Rechteckiges Fenster bei Überlappung von 0, 1/2, 2/3, 3/4, …
Bartlett-Fenster bei Überlappung von 1/2, 3/4, 5/6, …
Hann-Fenster bei 1/2, 2/3, 3/4, …
Jedes Fenster der Blackman-Familie bei 2/3 Überlappung.
Jedes Fenster mit
noverlap = nperseg-1
Eine sehr umfassende Liste anderer Fenster finden Sie in [2], in der die COLA-Bedingung erfüllt ist, wenn die „Amplitudenflachheit“ eins ist.
Hinzugefügt in Version 0.19.0.
Referenzen
[1]Julius O. Smith III, „Spectral Audio Signal Processing“, W3K Publishing, 2011, ISBN 978-0-9745607-3-1.
[2]G. Heinzel, A. Ruediger und 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
Beispiele
>>> from scipy import signal
Bestätigung der COLA-Bedingung für ein rechteckiges Fenster mit 75% (3/4) Überlappung.
>>> signal.check_COLA(signal.windows.boxcar(100), 100, 75) True
COLA ist jedoch nicht für 25% (1/4) Überlappung wahr.
>>> signal.check_COLA(signal.windows.boxcar(100), 100, 25) False
Ein „symmetrisches“ Hann-Fenster (für das Filterdesign) ist nicht COLA.
>>> signal.check_COLA(signal.windows.hann(120, sym=True), 120, 60) False
Ein „periodisches“ oder „DFT-even“ Hann-Fenster (für die FFT-Analyse) ist COLA für eine Überlappung von 1/2, 2/3, 3/4 usw.
>>> 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