Spec-Zone.ru › NumPy 1.16

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] Джей. Ф. Кайзер, «Цифровые фильтры» — гл. 7 в «Анализ систем с помощью цифрового компьютера», Редакторы: Ф.Ф. Куо и Дж.Ф. Кайзер, стр. 218-285. John Wiley and Sons, Нью-Йорк, (1966).
[2] Э.Р. Канасевич, «Анализ временных последовательностей в геофизике», Университет Альберты, 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,
         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()
../../_images/numpy-kaiser-1_00_00.png
>>> 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()
../../_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.16.1/reference/generated/numpy.kaiser.html

Spec-Zone.ru

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