Spec-Zone.ru › NumPy 1.14

numpy.kaiser

numpy.kaiser(M, beta) [source]

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

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

Параметры:

M : int

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

beta : float

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

Возвращает:

out : массив

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

См. также

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.

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

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

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

Ссылки

[R39] J. F. Kaiser, “Цифровые фильтры” — Глава 7 в “Системный анализ с помощью цифрового компьютера”, Редакторы: F.F. Kuo и J.F. Kaiser, стр. 218-285. John Wiley and Sons, Нью-Йорк, (1966).
[R40] E.R. Kanasewich, “Анализ временных последовательностей в геофизике”, Издательство Альберты, 1975, стр. 177-178.
[R41] Википедия, “Функция окна”, http://en.wikipedia.org/wiki/Window_function

Примеры

>>> np.kaiser(12, 14)
array([  7.72686684e-06,   3.46009194e-03,   4.65200189e-02,
         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")
<matplotlib.text.Text object at 0x...>
>>> plt.ylabel("Amplitude")
<matplotlib.text.Text object at 0x...>
>>> plt.xlabel("Sample")
<matplotlib.text.Text object at 0x...>
>>> plt.show()
>>> plt.figure()
<matplotlib.figure.Figure object at 0x...>
>>> 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")
<matplotlib.text.Text object at 0x...>
>>> plt.ylabel("Magnitude [dB]")
<matplotlib.text.Text object at 0x...>
>>> plt.xlabel("Normalized frequency [cycles per sample]")
<matplotlib.text.Text object at 0x...>
>>> plt.axis('tight')
(-0.5, 0.5, -100.0, ...)
>>> plt.show()

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

Spec-Zone.ru

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