Spec-Zone.ru › NumPy 1.17

numpy.kaiser

numpy.kaiser(M, beta) [source]

Возвращает окно Кайзера.

Окно Кайзера — это обрезание, сформированное с использованием функции Бесселя.

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

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

beta : float

Параметр формы окна.

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

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

См. также

bartlett, blackman, hamming, hanning

Примечания

Окно Кайзера определяется как

w(n) = I_0\left( \beta \sqrt{1-\frac{4n^2}{(M-1)^2}}
\right)/I_0(\beta)

где

\quad -\frac{M-1}{2} \leq n \leq \frac{M-1}{2},

где I_0 — модифицированная функция Бесселя нулевого порядка.

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

Окно Кайзера может аппроксимировать многие другие окна путём изменения параметра бета.

beta Форма окна
0 Прямоугольное
5 Аналогично Хэмминга
6 Аналогично Ханнинга
8.6 Аналогично Блэкмана

Значение бета 14, вероятно, является хорошей отправной точкой. Обратите внимание, что по мере увеличения бета окно сужается, поэтому количество образцов должно быть достаточно большим для выборки всё более узкой вершины, в противном случае будут возвращаться NaN.

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

Ссылки

[1] J. F. Kaiser, «Цифровые фильтры» — Глава 7 в «Анализ систем на цифровом компьютере», Редакторы: Ф.Ф. Куо и Дж.Ф. Кайзер, с. 218-285. John Wiley and Sons, Нью-Йорк, (1966).
[2] E.R. Kanasewich, «Анализ временных последовательностей в геофизике», Издательство Университета Альберты, 1975, стр. 177-178.
[3] Википедия, «Функция окна», https://en.wikipedia.org/wiki/Window_function

Примеры

>>> import matplotlib.pyplot as plt
>>> np.kaiser(12, 14)
 array([7.72686684e-06, 3.46009194e-03, 4.65200189e-02, # may vary
        2.29737120e-01, 5.99885316e-01, 9.45674898e-01,
        9.45674898e-01, 5.99885316e-01, 2.29737120e-01,
        4.65200189e-02, 3.46009194e-03, 7.72686684e-06])

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

>>> from numpy.fft import fft, fftshift
>>> window = np.kaiser(51, 14)
>>> plt.plot(window)
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.title("Kaiser window")
Text(0.5, 1.0, 'Kaiser window')
>>> plt.ylabel("Amplitude")
Text(0, 0.5, 'Amplitude')
>>> plt.xlabel("Sample")
Text(0.5, 0, 'Sample')
>>> plt.show()
../../_images/numpy-kaiser-1_00_00.png
>>> 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))
>>> 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 Kaiser window")
Text(0.5, 1.0, 'Frequency response of Kaiser 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')
(-0.5, 0.5, -100.0, ...) # may vary
>>> plt.show()
../../_images/numpy-kaiser-1_01_00.png

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

Spec-Zone.ru

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