Spec-Zone.ru › NumPy 1.21

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

Spec-Zone.ru

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