numpy.blackman
-
numpy.blackman(M)[source] -
Возвращает окно Блэкмана.
Окно Блэкмана — это функция обрезания, образованная с использованием первых трёх членов суммы косинусов. Оно разработано для минимизации утечки. Окно близко к оптимальному, лишь немного хуже окна Кайзера.
- Параметры
-
-
Mint -
Количество точек в выходном окне. Если значение нулевое или меньше, возвращается пустой массив.
-
- Возвращает
-
-
outndarray -
Окно, с максимальным значением, нормализованным до единицы (значение единицы появляется только если число образцов нечётное).
-
См. также
-
bartlett, hamming, hanning,kaiser
Примечания
Окно Блэкмана определяется как
Большинство ссылок на окно Блэкмана взяты из литературы по обработке сигналов, где оно используется как одна из многих функций окна для сглаживания значений. Оно также известно как функция аподизации (что означает «удаление стопы», т.е. сглаживание разрывов в начале и конце выборочного сигнала) или функция обрезания. Известно как «почти оптимальная» функция обрезания, почти такая же хорошая (по некоторым показателям), как окно Кайзера.
Ссылки
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, # 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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.blackman.html