scipy.signal.windows.

kaiser#

scipy.signal.windows.kaiser(M, beta, sym=True)[source]#

返回 Kaiser 視窗。

Kaiser 視窗是一種使用 Bessel 函數形成的錐形函數。

參數:
Mint

輸出視窗中的點數。如果為零,則返回一個空陣列。當為負數時,會拋出例外。

betafloat

形狀參數,決定主瓣寬度和旁瓣位準之間的權衡。隨著 beta 變大,視窗變窄。

symbool, optional

當為 True(預設值)時,產生一個對稱視窗,用於濾波器設計。當為 False 時,產生一個週期性視窗,用於頻譜分析。

返回:
wndarray

視窗,最大值標準化為 1(但如果 M 為偶數且 sym 為 True,則不會出現值 1)。

註解

Kaiser 視窗定義為

\[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\) 是修正的零階 Bessel 函數。

Kaiser 視窗以 Jim Kaiser 命名,他發現了基於 Bessel 函數的 DPSS 視窗的簡單近似。Kaiser 視窗非常近似於離散長球面序列或 Slepian 視窗,這是最大化視窗主瓣能量相對於總能量的轉換。

Kaiser 可以通過改變 beta 參數來近似其他視窗。(有些文獻使用 alpha = beta/pi。) [4]

beta

視窗形狀

0

矩形

5

類似於 Hamming

6

類似於 Hann

8.6

類似於 Blackman

beta 值為 14 可能是一個好的起點。請注意,隨著 beta 變大,視窗變窄,因此樣本數需要足夠大才能採樣越來越窄的峰值,否則將返回 NaN。

大多數關於 Kaiser 視窗的參考文獻來自訊號處理文獻,其中它被用作許多視窗函數之一,用於平滑值。它也被稱為 apodization(意思是“移除腳”,即平滑採樣訊號開始和結束處的不連續性)或錐形函數。

參考文獻

[1]

J. F. Kaiser, “數位濾波器” - F.F. Kuo 和 J.F. Kaiser 編輯的 “數位電腦系統分析” 第 7 章,第 218-285 頁。John Wiley and Sons, New York, (1966)。

[2]

E.R. Kanasewich, “地球物理學中的時間序列分析”,阿爾伯塔大學出版社,1975 年,第 177-178 頁。

[3]

維基百科,“視窗函數”,https://en.wikipedia.org/wiki/Window_function

[4]

F. J. Harris, “關於使用視窗進行離散傅立葉變換的諧波分析”,IEEE 會刊,第 66 卷,第 1 期,第 51-83 頁,1978 年 1 月。DOI:10.1109/PROC.1978.10837

範例

繪製視窗及其頻率響應

>>> import numpy as np
>>> from scipy import signal
>>> from scipy.fft import fft, fftshift
>>> import matplotlib.pyplot as plt
>>> window = signal.windows.kaiser(51, beta=14)
>>> plt.plot(window)
>>> plt.title(r"Kaiser window ($\beta$=14)")
>>> plt.ylabel("Amplitude")
>>> plt.xlabel("Sample")
>>> plt.figure()
>>> A = fft(window, 2048) / (len(window)/2.0)
>>> freq = np.linspace(-0.5, 0.5, len(A))
>>> response = 20 * np.log10(np.abs(fftshift(A / abs(A).max())))
>>> plt.plot(freq, response)
>>> plt.axis([-0.5, 0.5, -120, 0])
>>> plt.title(r"Frequency response of the Kaiser window ($\beta$=14)")
>>> plt.ylabel("Normalized magnitude [dB]")
>>> plt.xlabel("Normalized frequency [cycles per sample]")
../../_images/scipy-signal-windows-kaiser-1_00.png
../../_images/scipy-signal-windows-kaiser-1_01.png