カイザー窓はパラメータを変更することで柔軟に特性を変更できるので信号処理にもよく用いられる。

パラメータ$\beta(=\pi\alpha)$が0の場合は矩形窓。$\beta$を大きくすることで周波数分解能は悪くなるがダイナミックレンジが広くなる。つまり、$\beta$を変更するだけで周波数分解能とダイナミックレンジという両立しない2種類の窓関数の特性を連続的に推移できる。

また、カイザー窓はDPSSのよい近似にもなっている。DPSSとは、全電力に対するメインローブの電力比を最大化するという特徴をもっている。

kaiser_func
kaiser_fft
"""
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()