Spec-Zone.ru › NumPy 1.16

numpy.blackman

numpy.blackman(M) [source]

Возвращает окно Блэкмана.

Окно Блэкмана — это обрезной фильтр, сформированный с помощью первых трёх членов суммы косинусов. Оно было разработано для минимально возможных потерь. Оно близко к оптимальному, лишь немного хуже окна Кайзера.

Параметры:
M : int

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

Возвращает:
out : ndarray

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

См. также

bartlett, hamming, hanning, kaiser

Примечания

Окно Блэкмана определяется как

w(n) = 0.42 - 0.5 \cos(2\pi n/M) + 0.08 \cos(4\pi n/M)

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

Ссылки

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

Oppenheim, A.V., and R.W. Schafer. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999, pp. 468-471.

Примеры

>>> import matplotlib.pyplot as plt
>>> np.blackman(12)
array([ -1.38777878e-17,   3.26064346e-02,   1.59903635e-01,
         4.14397981e-01,   7.36045180e-01,   9.67046769e-01,
         9.67046769e-01,   7.36045180e-01,   4.14397981e-01,
         1.59903635e-01,   3.26064346e-02,  -1.38777878e-17])

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

>>> from numpy.fft import fft, fftshift
>>> window = np.blackman(51)
>>> plt.plot(window)
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.title("Blackman window")
<matplotlib.text.Text object at 0x...>
>>> plt.ylabel("Amplitude")
<matplotlib.text.Text object at 0x...>
>>> plt.xlabel("Sample")
<matplotlib.text.Text object at 0x...>
>>> plt.show()
../../_images/numpy-blackman-1_00_00.png
>>> plt.figure()
<matplotlib.figure.Figure object at 0x...>
>>> A = fft(window, 2048) / 25.5
>>> mag = np.abs(fftshift(A))
>>> freq = np.linspace(-0.5, 0.5, len(A))
>>> 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 Blackman window")
<matplotlib.text.Text object at 0x...>
>>> plt.ylabel("Magnitude [dB]")
<matplotlib.text.Text object at 0x...>
>>> plt.xlabel("Normalized frequency [cycles per sample]")
<matplotlib.text.Text object at 0x...>
>>> plt.axis('tight')
(-0.5, 0.5, -100.0, ...)
>>> plt.show()
../../_images/numpy-blackman-1_01_00.png

© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.16.1/reference/generated/numpy.blackman.html

Spec-Zone.ru

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