numpy.blackman
-
numpy.blackman(M)[source] -
Возвращает окно Блэкмана.
Окно Блэкмана — это обрезной элемент, созданный с использованием первых трех членов суммы косинусов. Оно разработано для обеспечения минимальной утечки. Оно близко к оптимальному, немного хуже окна Кайзера.
Параметры: -
M : int -
Количество точек в выходном окне. Если ноль или меньше, возвращается пустой массив.
Возвращает: -
out : ndarray -
Окно с максимальным значением, нормированным до единицы (значение единица появляется только если количество выборок нечетное).
Примечания
Окно Блэкмана определяется как
Большинство ссылок на окно Блэкмана взяты из литературы по обработке сигналов, где оно используется как одна из многих функций окон для сглаживания значений. Оно также известно как функция аподизации (что означает «удаление стопы», т. е. сглаживание разрывов в начале и конце выборочного сигнала) или функция обрезки. Оно известно как «почти оптимальная» функция обрезки, почти такая же хорошая (по некоторым оценкам) как окно Кайзера.
Ссылки
Blackman, R.B. и Tukey, J.W., (1958) Измерение спектра мощностей, Dover Publications, Нью-Йорк.
Опенгейм, А.В., и Р.В. Шафер. Обработка дискретных сигналов во времени. Верхний Сэддел Ривер, Нью-Джерси: Prentice-Hall, 1999, стр. 468-471.
Примеры
>>> 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])Постройте окно и частотную характеристику:
>>> from numpy.fft import fft, fftshift >>> window = np.blackman(51) >>> plt.plot(window) [<matplotlib.lines.Line2D object at 0x...>] >>> plt.title("Blackman window") Text(0.5, 1.0, 'Blackman 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 Blackman window") Text(0.5, 1.0, 'Frequency response of Blackman 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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/generated/numpy.blackman.html