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.