Spec-Zone.ru › NumPy 1.18

numpy.kaiser

numpy.kaiser(M, beta) [source]

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

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

Параметры
Mint

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

betafloat

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

Возвращает
outarray

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

См. также

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.

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

Ссылки

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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.kaiser.html

Spec-Zone.ru

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