numpy.hanning() и косинусные окна
NumPy не предоставляет отдельной функции numpy.cosine: косинусные оконные функции реализованы как семейство np.hanning, np.hamming, np.blackman, np.bartlett и np.kaiser. Все они возвращают одномерный массив весов длины M, основанных на косинусной формуле, и используются для уменьшения «утечки» спектра при БПФ.
Сигнатуры
numpy.hanning(M)
numpy.hamming(M)
numpy.blackman(M)
numpy.bartlett(M)
numpy.kaiser(M, beta)
Параметры
M— длина окна (число отсчётов).beta(только дляkaiser) — параметр формы окна.
Возвращаемое значение
ndarray длины M со значениями весов в диапазоне [0, 1] (для hamming — от ~0.08 до 1).
Примеры
Пример 1. Окно Хэннинга длиной 8.
import numpy as np
print(np.round(np.hanning(8), 3))
[0. 0.188 0.611 0.95 0.95 0.611 0.188 0. ]
Пример 2. Окно Хэмминга.
print(np.round(np.hamming(6), 3))
[0.08 0.398 0.912 0.912 0.398 0.08 ]
Пример 3. Применение окна к сигналу перед БПФ.
t = np.arange(16)
signal = np.sin(2 * np.pi * t / 8)
windowed = signal * np.hanning(16)
print(np.round(windowed[:4], 3))
[0. 0.027 0.498 0.892]
Пример 4. Сравнение трёх окон.
M = 5
print("hanning:", np.round(np.hanning(M), 2))
print("hamming:", np.round(np.hamming(M), 2))
print("blackman:", np.round(np.blackman(M), 2))
hanning: [0. 0.5 1. 0.5 0. ]
hamming: [0.08 0.54 1. 0.54 0.08]
blackman: [-0. 0.34 1. 0.34 -0. ]
Пример 5. Окно Кайзера с разными β.
for beta in [0, 5, 14]:
print(beta, np.round(np.kaiser(5, beta), 3))
0 [1. 1. 1. 1. 1.]
5 [0.037 0.518 1. 0.518 0.037]
14 [0. 0.071 1. 0.071 0. ]
См. также
Примечание
Лицензия и источники
Техническое описание функции адаптировано из официальной документации NumPy (https://numpy.org/doc/stable/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.