numpy.kaiser#
- numpy.kaiser(M, beta)[原始碼]#
傳回 Kaiser 窗。
Kaiser 窗是使用 Bessel 函數形成的錐形。
- 參數:
- Mint
輸出窗中的點數。如果為零或更小,則傳回空陣列。
- betafloat
窗的形狀參數。
- 傳回值:
- outarray
窗,最大值標準化為一(只有在樣本數為奇數時才會出現值一)。
註解
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 參數來近似許多其他窗。
beta
窗形狀
0
矩形
5
類似於 Hamming 窗
6
類似於 Hanning 窗
8.6
類似於 Blackman 窗
beta 值為 14 可能是一個好的起點。請注意,隨著 beta 值變大,窗會變窄,因此樣本數需要足夠大才能對越來越窄的峰值進行採樣,否則會傳回 NaN。
大多數關於 Kaiser 窗的參考文獻來自訊號處理文獻,其中它被用作許多用於平滑值的窗函數之一。它也稱為 apodization(意思是「去除腳」,即平滑採樣訊號開始和結束處的不連續性)或錐形函數。
參考文獻
[1]J. F. Kaiser, “Digital Filters” - Ch 7 in “Systems analysis by digital computer”, Editors: F.F. Kuo and J.F. Kaiser, p 218-285. John Wiley and Sons, New York, (1966).
[2]E.R. Kanasewich, “Time Sequence Analysis in Geophysics”, The University of Alberta Press, 1975, pp. 177-178.
[3]Wikipedia, “Window function”, https://en.wikipedia.org/wiki/Window_function
範例
>>> import numpy as np >>> 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])
繪製窗和頻率響應。
import matplotlib.pyplot as plt from numpy.fft import fft, fftshift window = np.kaiser(51, 14) plt.plot(window) plt.title("Kaiser window") plt.ylabel("Amplitude") plt.xlabel("Sample") plt.show()
plt.figure() 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) plt.title("Frequency response of Kaiser window") plt.ylabel("Magnitude [dB]") plt.xlabel("Normalized frequency [cycles per sample]") plt.axis('tight') plt.show()