Spec-Zone.ru › NumPy 1.19

numpy.hanning

numpy.hanning(M) [source]

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

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

Параметры
Mint

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

Возвращает
outndarray, shape(M,)

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

См. также

bartlett, blackman, hamming, kaiser

Примечания

Окно Ханнинга определяется следующим образом:

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

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

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

Ссылки

1

Blackman, R.B. and Tukey, J.W., (1958) The measurement of power spectra, Dover Publications, New York.

2

E.R. Kanasewich, “Time Sequence Analysis in Geophysics”, The University of Alberta Press, 1975, pp. 106-108.

3

Wikipedia, «Функция окна», https://en.wikipedia.org/wiki/Window_function

4

W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling, “Numerical Recipes”, Cambridge University Press, 1986, page 425.

Примеры

>>> 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)
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.title("Hann window")
Text(0.5, 1.0, 'Hann window')
>>> plt.ylabel("Amplitude")
Text(0, 0.5, 'Amplitude')
>>> plt.xlabel("Sample")
Text(0.5, 0, 'Sample')
>>> plt.show()
../../_images/numpy-hanning-1_00_00.png
>>> plt.figure()
<Figure size 640x480 with 0 Axes>
>>> 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)
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.title("Frequency response of the Hann window")
Text(0.5, 1.0, 'Frequency response of the Hann window')
>>> plt.ylabel("Magnitude [dB]")
Text(0, 0.5, 'Magnitude [dB]')
>>> plt.xlabel("Normalized frequency [cycles per sample]")
Text(0.5, 0, 'Normalized frequency [cycles per sample]')
>>> plt.axis('tight')
...
>>> plt.show()
../../_images/numpy-hanning-1_01_00.png

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.hanning.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API