スペクトル表示: 窓関数 被加算項 | |||
直流分係数 \(A\) | |||
ウィンドウ長 \(N\) | bits | ( ponits) |
窓関数
\(\displaystyle\quad
w[n] = A - (1-A)\cos\frac{2\pi n}{N-1}
\)
そのスペクトル (DTFT) は
\(\displaystyle\quad
W(e^{j\omega}) = \Bigl(A S(\omega) + \frac{1-A}{2}\bigl(S(\omega+\alpha) + S(\omega-\alpha)\bigr)\Bigr) e^{-j\omega(N-1)/2}
\)
where
\(\displaystyle\quad
S(\omega) = \frac{\sin(\omega N/2)}{\sin(\omega/2)},\quad
\alpha = \frac{2\pi}{N-1}
\)
\(A=0.5\) のときhann窓,\(A=0.54\) のときhamming窓,\(A=1\) のとき矩形窓になります.
左側のグラフは窓関数全体のスペクトル,右側のグラフはそのメインローブ近傍 (\(|\omega|\le 5\alpha\)) の拡大図です.「スペクトル表示」のチェックボックスのうち,「窓関数」は \(W(e^{j\omega})\), 「被加算項」は \(A S(\omega), ((1-A)/2) S(\omega+\alpha), ((1-A)/2) S(\omega-\alpha)\) を指します.
窓関数について学習したとき,『最初と最後をゼロにすることにより,窓関数の適用(信号の切り出し)で生じる不連続性の影響を抑える』と習った人も多いと思います.hann窓はこの考え方通りですが,hamming窓は非ゼロの値から始まっています.なぜhamming窓の最初と最後はゼロではないのか,また,hamming窓における直流分の係数である0.54という値はどこから来ているのか,疑問に思う人もいるでしょう.
この様子を,周波数領域で確認してみます.
矩形窓にサイドローブが存在し,窓長を長くしてもサイドローブの高さがあまり低くならないのは,ひとえに矩形窓のDTFTがsinc関数に類似した \(S(\omega)\) であり,周波数グラフ上で正負に振動することに起因します.Cosine窓では,矩形窓に cosine をかけた成分が加算されていますが,この成分は \(S(\omega)\) を周波数軸上で \(\alpha\) だけずらしたもので,周波数をずらさない矩形窓のDTFTとは符号が逆になっています.
窓関数の直流成分と cosine の振幅をどちらも 1/2 にすると,cosine に由来するスペクトルの振幅さらにその 1/2 のものが2つ重なりますので,直流成分由来のスペクトルと打ち消しあい,サイドローブが小さくなります.これが,hann窓の原理です.
しかし,矩形窓スペクトルの振幅は \(1/\sin(\omega/2)\) に比例しますので,周波数を正負にずらした矩形窓スペクトルの合計が,中央の矩形窓スペクトルの値と完全に一致するわけではありません.hann窓は高周波でゼロに近づいていきますが,メインローブ付近では残存する値があまり小さくありません.そこで,メインローブ直近のサイドローブにおいて,振幅比率のバランスをとったのがhamming窓になります.直流分と cosine 成分の比率による窓関数スペクトルの変化については,generalized-hamming.html をご覧ください.
作成:2020年11月27日