カイザー窓はパラメータを変更することで柔軟に特性を変更できるので信号処理にもよく用いられる。
パラメータ$\beta(=\pi\alpha)$が0の場合は矩形窓。$\beta$を大きくすることで周波数分解能は悪くなるがダイナミックレンジが広くなる。つまり、$\beta$を変更するだけで周波数分解能とダイナミックレンジという両立しない2種類の窓関数の特性を連続的に推移できる。
また、カイザー窓はDPSSのよい近似にもなっている。DPSSとは、全電力に対するメインローブの電力比を最大化するという特徴をもっている。
""" compaire kaiser function for different beta """ # -*- coding: utf-8 -*- import numpy as np import scipy.signal as signal import matplotlib.pyplot as plt import sys, os #beta beta = {'ractangle 0':0, 'similar to a Hamming 5':5, 'similar to a Hann 6':6, 'Similar to a Blackman 8.6':8.6} w_list = [] N = 51 for k in beta: w_list.append(k) plt.plot(signal.kaiser(N, beta[k])) plt.legend(w_list) plt.ylabel("Amplitude") plt.xlabel("sample") plt.title('kaiser function') plt.show() plt.close('all') #display frequency response of window function fftpt=8192 f = lambda x : np.fft.fftshift(np.fft.fft(x, fftpt)/np.sqrt(fftpt)) freq_list = 2 * np.pi * np.linspace(-0.5, 0.5, fftpt) #each w_list = [] for k in beta: w_list.append(k) fftdt_lin = f(signal.kaiser(N, beta[k])) fftdt_log = 20*np.log10(np.abs(fftdt_lin)) plt.plot(freq_list, fftdt_log) plt.legend(w_list) plt.ylabel("Amplitude[dB]") plt.xlabel("bin") plt.title('frequency response of window function') plt.xlim([-1,1]) plt.ylim([-170,0]) plt.show()
コメント