numpy.hanning
- numpy.hanning(M)[source]
-
Возвращает окно Ханна.
Окно Ханна — это обрезание, сформированное с помощью взвешенного косинуса.
- Параметры
-
- Mint
-
Количество точек в выходном окне. Если ноль или меньше, возвращается пустой массив.
- Возвращает
-
- outndarray, форма(M,)
-
Окно, с максимальным значением, нормализованным к единице (значение единица появляется только если
Mявляется нечётным).
Примечания
Окно Ханна определяется как
\[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, “Window function”, 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()>>> 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()
© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.hanning.html