numpy.blackman#

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

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

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

Параметры:
Mint

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

Возвращает:
выход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. и Tukey, J.W., (1958) The measurement of power spectra, Dover Publications, New York.

Оппенгейм, А.В., и Р.В. Шафер. Обработка дискретных сигналов. Верхняя Сэдл-Ривер, Нью-Джерси: Prentice-Hall, 1999, стр. 468-471.

Примеры

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> np.blackman(12)
array([-1.38777878e-17,   3.26064346e-02,   1.59903635e-01, # may vary
        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])

Построить график окна и частотной характеристики.

import matplotlib.pyplot as plt
from numpy.fft import fft, fftshift
window = np.blackman(51)
plt.plot(window)
plt.title("Blackman window")
plt.ylabel("Amplitude")
plt.xlabel("Sample")
plt.show()  # doctest: +SKIP
../../_images/numpy-blackman-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 Blackman window")
plt.ylabel("Magnitude [dB]")
plt.xlabel("Normalized frequency [cycles per sample]")
plt.axis('tight')
plt.show()
../../_images/numpy-blackman-1_01_00.png