check_COLA#
- scipy.signal.check_COLA(window, nperseg, noverlap, tol=1e-10)[источник]#
Проверить, выполняется ли ограничение Constant OverLap Add (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
- Параметры:
- windowstr или tuple или array_like
Желаемое окно для использования. Если window является строкой или кортежем, он передаётся в
get_windowдля генерации значений окна, которые по умолчанию являются DFT-чётными. См.get_windowдля списка окон и требуемых параметров. Если window если это array_like, он будет использоваться напрямую как окно, и его длина должна быть nperseg.- npersegint
Длина каждого сегмента.
- noverlapint
Количество точек для перекрытия между сегментами.
- tolfloat, опционально
Допустимая дисперсия взвешенной суммы бина от медианной суммы бина.
- Возвращает:
- вердиктbool
True если выбранная комбинация удовлетворяет COLA в пределах tol, False в противном случае
Смотрите также
closest_STFT_dual_windowПозволяет определить ближайшее окно, удовлетворяющее ограничению COLA для заданного окна
check_NOLAПроверить, выполняется ли ограничение Nonzero Overlap Add (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, …
Любое окно семейства Блэкмана с перекрытием 2/3
Любое окно с
noverlap = nperseg-1
Очень полный список других окон можно найти в [2], где условие COLA выполняется, когда "Амплитудная плоскость" равна единице.
Добавлено в версии 0.19.0.
Ссылки
[1]Джулиус О. Смит III, «Спектральная обработка аудиосигналов», W3K Publishing, 2011, ISBN 978-0-9745607-3-1.
[2]Г. Хайнцель, А. Рюдигер и Р. Шиллинг, «Оценка спектра и спектральной плотности с помощью дискретного преобразования Фурье (DFT), включая полный список оконных функций и некоторые новые окна at-top», 2002, http://hdl.handle.net/11858/00-001M-0000-0013-557A-5
Примеры
>>> from scipy import signal
Подтвердить условие COLA для прямоугольного окна с перекрытием 75% (3/4):
>>> 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) является COLA для перекрытия 1/2, 2/3, 3/4 и т.д.:
>>> 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