numpy.bartlett
-
numpy.bartlett(M)[source] -
Возвращает окно Бартлетта.
Окно Бартлетта очень похоже на треугольное окно, за исключением того, что конечные точки равны нулю. Оно часто используется в обработке сигналов для обрезания сигнала, не вызывая чрезмерных пульсаций в частотной области.
Параметры: -
M : int -
Количество точек в выходном окне. Если значение равно или меньше нуля, возвращается пустой массив.
Возвращает: -
out : array -
Треугольное окно, с максимальным значением, нормализованным к единице (значение единица появляется только если число выборок нечётное), с первым и последним образцами, равными нулю.
Примечания
Окно Бартлетта определяется как
Большинство ссылок на окно Бартлетта взяты из литературы по обработке сигналов, где оно используется как одна из многих функций окон для сглаживания значений. Обратите внимание, что свёртка с этим окном производит линейную интерполяцию. Оно также известно как функция аподизации (что означает «удаление ноги», то есть сглаживание разрывов в начале и конце выборочного сигнала) или обрезания. Преобразование Фурье Бартлетта представляет собой произведение двух функций sinc. Обратите внимание на отличное обсуждение в книге Каназевича.
Ссылки
[1] М.С. Бартлетт, «Периодограмма анализа и непрерывные спектры», Biometrika 37, 1-16, 1950. [2] Э.Р. Каназевич, «Анализ временных последовательностей в геофизике», Издательство университета Альберты, 1975, стр. 109-110. [3] А.В. Опенгейм и Р.В. Шафер, «Обработка дискретных сигналов», Prentice-Hall, 1999, стр. 468-471. [4] Википедия, «Функция окна», https://en.wikipedia.org/wiki/Window_function [5] У.Х. Пресс, Б.П. Фланнери, С.А. Теукольский и У.Т. Ветерлинг, «Численные рецепты», Издательство Кембриджского университета, 1986, страница 429. Примеры
>>> import matplotlib.pyplot as plt >>> np.bartlett(12) array([ 0. , 0.18181818, 0.36363636, 0.54545455, 0.72727273, # may vary 0.90909091, 0.90909091, 0.72727273, 0.54545455, 0.36363636, 0.18181818, 0. ])Постройте окно и его частотную характеристику (требуются SciPy и matplotlib):
>>> from numpy.fft import fft, fftshift >>> window = np.bartlett(51) >>> plt.plot(window) [<matplotlib.lines.Line2D object at 0x...>] >>> plt.title("Bartlett window") Text(0.5, 1.0, 'Bartlett 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 Bartlett window") Text(0.5, 1.0, 'Frequency response of Bartlett 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.bartlett.html