scipy.signal.

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]). Daher closest_STFT_dual_window verallgemeinert 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. Siehe get_window fü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_window

Ermöglicht die Bestimmung des nächstgelegenen Fensters, das die COLA-Bedingung für ein gegebenes Fenster erfüllt.

check_NOLA

Prüft, ob die Nicht-Null-Überlappungs-Additions- (NOLA) Bedingung erfüllt ist

ShortTimeFFT

Bereitstellung der Kurzzeit-Fourier-Transformation und ihrer Umkehrung.

stft

Kurzzeit-Fourier-Transformation (Legacy)

istft

Inverse 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.istft und in istft (Legacy) implementierten Algorithmen nur erfordern, dass die schwächere Bedingung „Nonzero Overlap-Add“ (wie in check_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