窓関数

窓関数とは、ある有限区間以外で0となる関数である。 ある関数や信号に窓関数が掛け合わせられると、区間外は0になり、有限区間内だけが残るので、無限回の計算が不要になり数値解析が容易になる。窓関数は、データから成分を抽出するアルゴリズムの中核に当たり、スペクトル分析、フィルタ・デザインや、音声圧縮に応用される。窓関数を単に窓  ともいい、データに窓関数を掛け合わせることを窓を掛ける  という。理論的に最良の結果が得られるSinc関数を利用するフィルタは無限回の計算を必要とするが、フィルタを有限回の計算だけで実現するために、周波数分解能とダイナミックレンジのトレードオフの中で様々な窓関数が考案されている。単に有限個のデータを用意しただけでも暗黙的に窓関数を掛けた事になる。矩形窓の場合、周波数分解能は最良であるが、ダイナミックレンジは最悪で、データに含まれる成分がノイズに埋もれてしまい実用的でない。従って、改良された窓関数では各データに異なる重み付けを行って周波数分解能を多少犠牲にしてダイナミックレンジを改善している。

1. 窓関数の意味
---------

フーリエ変換は、区分的に 級な任意の関数 を、三角関数の線形結合で表す。 なお、 のフーリエ変換を で表す。

フーリエ変換では、関数 も三角関数も、無限区間 で定義されている。 しかし、実データを数値的にフーリエ変換するなら、無限の長さは扱えないので、有限区間 でフーリエ変換をおこない、区間外は無視することになる。 これは、関数 を区間外で0とみなすことに等しい。

つまり、関数 と関数 の積 を求め、そのフーリエ変換 を、 の代わりに得ていることになる。 このとき掛け合わせた関数 が窓関数である。

ここで定義した窓関数 でなくても、有限区間外が0で区間内が有界な関数ならば、窓関数として使える。 そこで、さまざまな窓関数が考案されている。 実際、上の矩形窓はあまり性能がよくない。それは、 にいちじるしい不連続があるからである。 実際に使われる窓関数のほとんどは、両端が滑らかに小さくなり区間外の0につながる、山形の関数である。

2. 窓関数の性能
---------

窓関数を使って求めたスペクトル と、本来のスペクトル は、もちろん同じではない。 積のフーリエ変換はフーリエ変換の畳み込み、つまり、 である。 余分な が畳み込まれることによって、フーリエ変換の結果は変化するが、この変化は望ましいものではない。

一般に は、中心が絶対値が大きく、両側に離れるにつれ小さくなるが、0になることはない。 ただし、単峰性ではなく、図のように、無数の峰を持つ。 各々の峰をローブといい、中央のいちばん大きいローブをメインローブ、他をサイドローブという。このような が畳み込まれることにより、スペクトルは、ピークがなまり、ノイズ・フロアが上がることになる。

窓関数には、

メインローブが狭い
サイドローブが低いという2つの特長が要求される。 しかし、この2つはトレード・オフの関係にあり、両立させるには限界がある。 そのため、ある状況では最適だった窓関数が、別の状況ではそうではないということも起こる。

2.1. 雑音帯域幅
----------

周波数分解能とダイナミックレンジの概念は、窓関数の使用者が何を行おうしているかに依存しており、やや主観的な傾向がある。 しかしながら、周波数分解能やダイナミックレンジは、定量化可能な全リーク量と密接に関連する。 リークは一般的に等価の帯域幅 として表される。 リークについてDTFTによる長方形への再分配を考えた場合、より多くのリークはより大きな帯域幅となる。 入力信号がランダム・ノイズ成分を含んでいる時、それぞれのDFTビンに含まれる平均電力に比例するため、この帯域幅は//雑音等価帯域幅//もしくは//等価雑音帯域幅//と呼ばれる。 一定時間で平均化したパワースペクトルのグラフが一般的に水平なノイズフロアとして現れる現象は、この結果発生している。ノイズフロアの高さは に比例する。よって、2つの異なる窓関数では、異なるノイズフロアが発生する。

3. 窓関数の応用
---------

フーリエ変換に限らず、DCTや連続ウェーブレット変換でも、窓関数を使う。

とりわけ、近年、音声圧縮などに使われるMDCTのための窓関数は、プリンセン‐ブラッドリー条件  という、他の用途では要求されない性質が必要なこともあり、独特なものが新しく登場している。 なお、プリンセン‐ブラッドリー条件を満たす窓関数を、MDCT窓、プリンセン‐ブラッドリー窓などという。

変わった応用では、窓関数を掛けるのではなく、畳み込むという手法がある。なので、窓関数がデジタル・フィルタとして働くことになる。

4. フィルター・デザイン
-------------

窓関数はデジタルフィルタのデザインにも用いられる。Sinc関数によって、理想的的な無限系列中のIIRのフィルター処理を有限系列中のFIRフィルター・デザインによる処理に変換する場合などがこれに該当する。これを "window method" と呼ぶ。

5. 窓関数の例
--------

特に断らない限り、区間を にとり、 と正規化した式を書く。 区間を にとる資料もある。 となる場合分けは省略した。 を適宜おぎなって読んでほしい。

離散化するには、 に対して、 と、 の2種類の方法があるが、特殊な用途を除き、どちらでも大差はない。また、初めから に対する関数 や系列 を表す資料もあるので、注意してほしい。

グラフは、 と離散化したときの、窓関数自身と、DFTで求めたパワースペクトルである。

5.1. 代表的な窓関数
------------

5.1.1. 矩形窓
----------

rectangular window。方形窓とも。

単に有限長のデータを用意しただけのとき、暗黙のうちにこの窓関数を使っている。理論上、周波数分解能は最も良い。

5.1.2. ガウス窓
-----------

Gauss window。ガウシアン窓  とも。

ガウス関数のフーリエ変換は再びガウス関数になる。ガウス関数は無限に広がるため、実用上必要な長さまでで計算を打ち切る必要がある。無限に広がる窓関数を不連続に打ち切った場合、矩形窓を掛けた事になり、通過帯域と阻止帯域にリップルが発生し、サイドローブも大きく上昇する。主に、ガボール変換 や連続ウェーブレット変換で使われる。

5.1.3. ハン窓
----------

hann window。フォンハン窓 、2乗余弦窓、raised cosine windowとも。ユリウス・フォン・ハンが考案した。ハン窓及び後述のハミング窓は、後の研究で後述する一つの関数族「一般化ハミング窓」に分類されたため、ハンとハミング両名の名前から合成された「ハニング窓」という呼び方でハン窓を指す場合もある。

最もよく使われる窓関数の一つ。

5.1.4. ハミング窓
------------

hamming window。ハン窓の改良版として、リチャード・ハミングが考案した。

ハン窓と並び、最もよく使われる窓関数の一つ。ハン窓より周波数分解能が良く、ダイナミック・レンジが狭い。区間の両端で不連続なのが特徴。

5.1.5. テューキー窓
-------------

ジョン・テューキーが考案した。コサイン関数を用いて以下のように表される。

ここで//xw// は窓の幅である。

ハニング窓

5.1.6. ブラックマン窓
--------------

Blackman window。ラルフ・ブラックマンが考案した。

ハン窓/ハミング窓より、周波数分解能が悪く、ダイナミック・レンジが広い。この種のフィルタの中では、最もよく使われる。

5.1.7. カイザー窓
------------

Kaiser window。カイザー‐ベッセル窓  ともいうが、後述のカイザー‐ベッセル派生窓と紛らわしい。J・F・カイザーが考案した。

柔軟な特性変更ができるためデジタル信号処理において良く用いられる。

実数パラメタ を持つ。が0であれば矩形窓そのものである。を大きくするほどD/A変換の理論上において最も理想的な特性を持つガウス窓への近似度を高めることができ、周波数分解能が悪くなる代わりにダイナミックレンジが広くなる。の調節だけで2種類の窓関数の特性の間を連続的に推移できるのが最大の特長である。周波数分解能はおおよそ に反比例する。

では矩形窓と同じ。 ではハミニング窓に、 ではハン窓に、 ではブラックマン窓に似た形になる。

ただし、 は第1種の0次の変形ベッセル関数。

5.1.8. バートレット窓
--------------

Bartlett window。三角窓  とも。

教科書には必ず出てくるが、実際に使うことは少ない。

5.1.9. 指数窓
----------

exponential window。

減衰積分をおこなうとき、暗黙のうちにこの窓関数を使っている。コンパクト・サポートでないので、実際に使うときは適当な区間の外を0にする。左右非対称なので、エコー検出など、時間非対称な問題に使う。

5.2. その他の窓関数
------------

5.2.1. 一般化ハミング窓
---------------

ハン窓とハミング窓の一般化。実数パラメタ を持ち、 でハン窓、 でハミング窓、 で矩形窓になる。

5.2.2. バートレット‐ハン窓
-----------------

Bartlett‐Hann window。修正バートレット‐ハン窓  とも。

バートレット窓とハン窓の線形混合。異なる比率のものを使うこともある。

5.2.3. ナットール窓
-------------

Nuttall window。

5.2.4. ブラックマン‐ハリス窓
------------------

Blackman‐Harris window。

5.2.5. ブラックマン‐ナットール窓
--------------------

Blackman‐Nuttall window。

5.2.6. フラット・トップ窓
----------------

flat top window。スペクトルのメインローブの頂部が平らであることから、こう呼ぶ。別の式で表される窓関数を「フラット・トップ窓」と呼ぶことがある。

5.2.7. パルザン窓
------------

Parzen window。

ガウス窓の区分3次関数による近似。

5.2.8. 赤池窓
----------

Akaike window。

5.2.9. ウェルチ窓
------------

Welch window。

5.3. MDCT窓関数
------------

MDCTの前処理に使う。 MDCTでの変数定義の慣習にしたがい、離散化には、 のデータ数を とした式 を用いることが多い。

5.3.1. サイン窓
-----------

sine window。半波余弦窓  とも。MP3など多くのフォーマットが使用。

5.3.2. Vorbis窓
--------------

Vorbis window。Vorbisが使用。

5.3.3. カイザー‐ベッセル派生窓
-------------------

Kaiser‐Bessel derived window。KBD窓  とも。AC3やAACが使用。

5.4. フィルタとして使う窓関数
-----------------

5.4.1. ランツォシュ窓
--------------

Lanczos window。ランツォシュ・フィルタとも。

整数パラメタ を持つ。 の値によって、 次ランツォシュ窓、ランツォシュ 窓などと呼ぶ。

データのデシメーションの前処理に、LPFとして使われる。

ただし、 は正規化sinc関数。

5.4.2. Sinc窓
------------

窓と言いつつ、無限長の台を持つ関数である。直接的な実装を考えた場合は実用的ではないが、フィルタの基礎理論として重要で、近似的な窓であるランツォシュ窓などが考案され画像の拡大縮小などに広く活用されている。

Sinc窓はBrick-wall filtersとなる。

6. 脚注
-----

6.1. 注釈
-------

6.2. 出典
-------

7. 関連項目
-------

フーリエ変換
短時間フーリエ変換
修正離散コサイン変換
ウェーブレット変換
カイザー窓
デジタル信号処理
データ圧縮
窓関数 

8. 外部リンク
--------

[1] - 井澤裕司
[2] - 測定器玉手箱
[3] - Paul Bourke
[4] - Roger L. Easton, Jr.
[5]