Spec-Zone.ru › NumPy 1.15

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] Википедия, «Функция окна», 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.15.4/reference/generated/numpy.kaiser.html

Spec-Zone.ru

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