numpy.hanning#

numpy.hanning(M)[источник]#

Возвращает окно Ханна.

Окно Ханнинга — это сужение, образованное с использованием взвешенного косинуса.

Параметры:
Mint

Количество точек в выходном окне. Если ноль или меньше, возвращается пустой массив.

Возвращает:
выходndarray, форма (M,)

Окно с максимальным значением, нормализованным до единицы (значение единица появляется только если M нечётное).

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

bartlett, blackman, hamming, kaiser

Примечания

Окно Ханнинга определяется как

\[w(n) = 0.5 - 0.5\cos\left(\frac{2\pi{n}}{M-1}\right) \qquad 0 \leq n \leq M-1\]

Окно Ханнинга было названо в честь Юлиуса фон Ханна, австрийского метеоролога. Оно также известно как Косинусный колокол. Некоторые авторы предпочитают называть его окном Ханна, чтобы избежать путаницы с очень похожим окном Хэмминга.

Большинство ссылок на окно Ханнинга происходят из литературы по обработке сигналов, где оно используется как одна из многих оконных функций для сглаживания значений. Оно также известно как аподизация (что означает «удаление ноги», т.е. сглаживание разрывов в начале и конце дискретизированного сигнала) или сужающая функция.

Ссылки

[1]

Блэкман, Р.Б. и Тьюки, Дж.В., (1958) Измерение спектров мощности, Dover Publications, Нью-Йорк.

[2]

E.R. Kanasewich, «Time Sequence Analysis in Geophysics», The University of Alberta Press, 1975, стр. 106-108.

[3]

Википедия, "Оконная функция", https://en.wikipedia.org/wiki/Window_function

[4]

У.Х. Пресс, Б.П. Флэннери, С.А. Тьюколски и У.Т. Веттерлинг, «Численные рецепты», Cambridge University Press, 1986, страница 425.

Примеры

>>> import numpy as np
>>> np.hanning(12)
array([0.        , 0.07937323, 0.29229249, 0.57115742, 0.82743037,
       0.97974649, 0.97974649, 0.82743037, 0.57115742, 0.29229249,
       0.07937323, 0.        ])

Постройте окно и его частотную характеристику.

import matplotlib.pyplot as plt
from numpy.fft import fft, fftshift
window = np.hanning(51)
plt.plot(window)
plt.title("Hann window")
plt.ylabel("Amplitude")
plt.xlabel("Sample")
plt.show()
../../_images/numpy-hanning-1_00_00.png
plt.figure()
A = fft(window, 2048) / 25.5
mag = np.abs(fftshift(A))
freq = np.linspace(-0.5, 0.5, len(A))
with np.errstate(divide='ignore', invalid='ignore'):
    response = 20 * np.log10(mag)
response = np.clip(response, -100, 100)
plt.plot(freq, response)
plt.title("Frequency response of the Hann window")
plt.ylabel("Magnitude [dB]")
plt.xlabel("Normalized frequency [cycles per sample]")
plt.axis('tight')
plt.show()
../../_images/numpy-hanning-1_01_00.png