scipy.signal.

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