scipy.signal.

check_NOLA#

scipy.signal.check_NOLA(window, nperseg, noverlap, tol=1e-10)[источник]#

Проверить, выполняется ли ограничение Nonzero Overlap Add (NOLA).

Параметры:
windowstr или tuple или array_like

Желаемое окно для использования. Если window является строкой или кортежем, он передаётся в get_window для генерации значений окна, которые по умолчанию являются DFT-чётными. См. get_window для списка окон и требуемых параметров. Если window если это array_like, он будет использоваться напрямую как окно, и его длина должна быть nperseg.

npersegint

Длина каждого сегмента.

noverlapint

Количество точек для перекрытия между сегментами.

tolfloat, опционально

Допустимая дисперсия взвешенной суммы бина от медианной суммы бина.

Возвращает:
вердиктbool

True если выбранная комбинация удовлетворяет ограничению NOLA в пределах tol, False в противном случае

Смотрите также

check_COLA

Проверить, выполняется ли ограничение Constant OverLap Add (COLA)

stft

Кратковременное преобразование Фурье

istft

Обратное коротковременное преобразование Фурье

Примечания

Чтобы включить инверсию STFT через обратное STFT в istft, оконная обработка сигнала должна удовлетворять условию «ненулевого перекрытия с суммированием» (NOLA):

\[\sum_{t}w^{2}[n-tH] \ne 0\]

для всех \(n\), где \(w\) является оконной функцией, \(t\) является индексом фрейма, и \(H\) это размер шага (\(H\) = nperseg - noverlap).

Это гарантирует, что нормировочные коэффициенты в знаменателе уравнения инверсии с перекрытием и суммированием не равны нулю. Только очень патологические окна не удовлетворяют ограничению NOLA.

Добавлено в версии 1.2.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

Примеры

>>> import numpy as np
>>> from scipy import signal

Подтвердить условие NOLA для прямоугольного окна с перекрытием 75% (3/4):

>>> 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