numpy.kaiser
- numpy.kaiser(M, beta)[source]
-
Возвращает окно Кайзера.
Окно Кайзера — это обрезной профиль, сформированный с помощью функции Бесселя.
- Параметры
-
- Mint
-
Число точек в выходном окне. Если значение равно нулю или меньше, возвращается пустой массив.
- betafloat
-
Параметр формы окна.
- Возвращает
-
- outarray
-
Окно, в котором максимальное значение нормировано до единицы (значение единица появляется только если число выборок нечётное).
Примечания
Окно Кайзера определяется как
\[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()>>> 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()
© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.kaiser.html