窓関数

はある有限区間（台）以外で0となる関数である。とも。

## 概要
窓関数はある有限区間以外で0となる関数である（⇒ #定義）。窓は関数や信号に掛け合わせて適用されることが主であり、これにより関数の有限区間のみを切り出す（⇒ #窓掛け）。様々な数学的変換のなかに登場し（⇒ #利用）、応用数学や工学への応用範囲も広い（⇒ #応用）。窓関数の性能はその周波数スペクトルを用いて議論されることが多く（⇒ #性能）、目的に応じた様々な性能の窓関数が提唱されている（⇒ #例）。

## 定義
実数 a, b と任意の関数 g(x) を用いて窓関数 w(x) は次のように定義される：

## 窓掛け
は関数や信号に窓関数を掛けることである。

窓掛けは時間領域において関数と窓関数の要素積である。すなわち窓関数 w(x) は関数 f(x) に以下の形で適用される：

### 窓掛けの効果

#### 時間領域の窓掛け効果
時間領域において窓掛けは関数の区間切り出しという効果を持つ。

窓 w(x) はその定義から有限区間 a \leq x \leq b でのみ非ゼロの値を取りそれ以外では 0 である。窓掛けは関数と窓の要素積であるから、関数 f(x) を窓掛けして得た関数 y(x) もまた有限区間 a \leq x \leq b でのみ非ゼロの値を取りそれ以外では 0 である。つまり以下の式を満たす：これは関数のある有限区間を（フェードイン/フェードアウトしながら）切り出す効果と理解できる。切り出し（= 区間外 0 保証）により、信号の特定時刻周辺における特性解析（参考: 音声分析#短時間分析）や、無限区間関数における積分や和の正しい計算打ち切りを可能にする。

#### 周波数領域の窓掛け効果
周波数領域において窓掛けは意味を持つ。

窓掛けされた関数 wf の周波数スペクトル \mathfrak{F} (wf) と関数本来のスペクトル \mathfrak{F} f は同じではない。積のフーリエ変換はフーリエ変換の畳み込み、つまり、
である。余分な \mathfrak{F} w が畳み込まれることによって、フーリエ変換の結果は変化するが、この変化は望ましいものではない。

## 性能

窓関数 w の性能はその周波数スペクトル \mathfrak{F} w を用いてしばしば議論される。これは窓関数が窓掛けの形で適用されることが殆どであり、窓掛けが関数の周波数特性へ影響するからである（⇒ #周波数領域の窓掛け効果）。

一般に \mathfrak{F} w は、中心が絶対値が大きく、両側に離れるにつれ小さくなるが、0になることはない（w(x) \, が有限区間外で0ならば、常にそうなる）。ただし、単峰性ではなく、図のように、無数の峰（**ローブ**）を持つ。中央のいちばん大きいローブをメインローブ、他をサイドローブという。このような \mathfrak{F} w が畳み込まれることにより、スペクトルは、ピークがなまり（周波数分解能が下がり）、ノイズ・フロアが上がる（ダイナミック・レンジが狭まる）ことになる。

窓関数には以下の2つの特性が要求される：
# メインローブが狭い（周波数分解能が良い）
# サイドローブが低い（ダイナミックレンジが広い）
しかしこの2つはトレード・オフの関係にある。そのため窓関数の性能の良し悪しは用途に依存する。

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

## 利用
窓関数は様々な数学的変換のなかで利用される。以下はその一例である：

* 窓掛け
** 短時間フーリエ変換（STFT）: 任意窓による窓掛けで短時間信号を切り出し
** 離散コサイン変換（DCT）
** 修正離散コサイン変換（MDCT）: プリンセン‐ブラッドリー条件 を満たす窓による窓掛け
** 連続ウェーブレット変換

変わった利用では、窓関数を畳み込むという手法がある。\mathfrak{F} (w * f) = \mathfrak{F} w \mathfrak{F} f（畳み込みのフーリエ変換はフーリエ変換の積）なので、窓関数がデジタルフィルタとして働く。

### フーリエ変換
フーリエ変換では関数と三角関数が無限区間  (-\infty,\infty)  で値を取る。しかしフーリエ変換を数値計算する場合、無限長を扱えないため、有限区間 [a,b] \, でフーリエ変換をおこなって区間外は無視する。これは関数 f(x) \, を区間外で0とみなすことに等しい（「区間内のデータを周期的に繰り返す」という表現をすることもあるが、DFT（離散フーリエ変換）の場合はこの2つは等価である）。これは数学的に矩形窓による窓掛けと同義である。

## 応用
窓関数は応用数学や工学で広く応用される。以下はその一例である：

* スペクトル分析
* 音声圧縮
* フィルタデザイン

### フィルタデザイン

窓関数はデジタルフィルタのデザインに応用される。一例として、Sinc関数により理想的的な無限系列中のIIRフィルタ処理を有限系列中のFIRフィルタ処理に変換する（*window method*）。

## 例
特に断らない限り、本節では窓関数 w(x) について以下の表現を採用する：

* 台区間: [0,1]
* 正規化: \max_{x} w(x) = 1
* 場合分け: 台の外側「w(x) = 0, \mbox{ otherwise}」を省略

なお、他の文献では区間 [-1,1] や [-0.5,0.5] を採用する場合もある。離散化するには、k = 0, \ldots , N - 1 に対して、x = k / (N - 1) \, と、x = (k + 0.5) / N \, の2種類の方法があるが、特殊な用途を除き、どちらでも大差はない。また、初めから k \, に対する関数 w(k) \, や系列 w_k \, を表す資料もあるので、注意してほしい。グラフは、x = k / (N - 1) \, と離散化したときの、窓関数自身と、DFTで求めたパワースペクトルである。

### 矩形窓

。とも。

単に有限長のデータを用意しただけのとき、暗黙のうちにこの窓関数を使っている。理論上、周波数分解能は最も良い。一方で x = 0, 1 にいちじるしい不連続があり、時間領域での信号飛び、周波数特性での高いサイドローブ（=低ダイナミックレンジ）の所以となっている。
*w(x) = 1 

### ガウス窓

Gauss window。ガウシアン窓 (Gaussian window) とも。

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

*w(x) = \exp \left( -\frac{(x-0.5)^2}{\sigma^2} \right) 

### ハン窓

。、 、とも。

が考案した。。ハン窓及び後述のハミング窓は、後の研究で後述する一つの関数族「一般化ハミング窓（"raised cosine" または "generalized Hamming" 窓）」に分類されたため、ハン（Han）とハミング（Hamming）両名の名前から合成された「ハニング窓（hanning window）」という呼び方でハン窓を指す場合もある。
*w(x) = 0.5 - 0.5 \cos 2 \pi x 

### ハミング窓

。

ハン窓の改良版として、リチャード・ハミングが考案した。。ハン窓より周波数分解能が良く、ダイナミック・レンジが狭い。区間の両端で不連続なのが特徴。
*w(x) = 0.54 - 0.46 \cos 2 \pi x 

### テューキー窓
ジョン・テューキーが考案した。コサイン関数を用いて以下のように表される。
:w(x)=
\begin{cases}1,& x\leq \frac{L_x}{2}-x_w \\
\frac{1}{2}-\frac{1}{2}\cos\left(\frac{\pi\left(x-\frac{L_x}{2}\right)}{x_w}\right),& \frac{L_x}{2}-x_w\frac{L_x}{2}
\end{cases}
ここで*x<sub>w</sub>* は窓の幅である。

### ブラックマン窓

。

ラルフ・ブラックマンが考案した。。ハン窓/ハミング窓より、周波数分解能が悪く、ダイナミック・レンジが広い。
*w(x) = 0.42 - 0.5 \cos 2 \pi x + 0.08 \cos 4 \pi x 

### カイザー窓

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

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

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

\alpha = 0 \, では矩形窓と同じ。\alpha = 1.5 \, ではハミニング窓に、\alpha = 2 \, ではハン窓に、\alpha = 3 \, ではブラックマン窓に似た形になる。

*w(x) = \frac{ I_0 \left\{ \pi \alpha \sqrt{ 1 - (2 x - 1) ^ 2 } \right\} }{ I_0( \pi \alpha ) } 
ただし、I_0 \, は第1種の0次の変形ベッセル関数。

### バートレット窓

Bartlett window。三角窓 (triangular window) とも。

教科書には必ず出てくるが、実際に使うことは少ない。
*w(x) = 1 - 2|x - 0.5| 

### 指数窓
exponential window。

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

### 一般化ハミング窓
ハン窓とハミング窓の一般化。実数パラメタ a, \ 0.5 \leq a \leq 1 を持ち、a = 0.5 \, でハン窓、a = 0.54 \, でハミング窓、a = 1 \, で矩形窓になる。
*w(x) = a - (1 - a) \cos 2 \pi x 

### バートレット‐ハン窓

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

バートレット窓とハン窓の線形混合。異なる比率のものを使うこともある。
*w(x) = 0.62 - 0.48 | x - 0.5 | - 0.38 \cos 2 \pi x 

### ナットール窓

。
*w(x) = 0.355768 - 0.487396 \cos 2 \pi x + 0.144232 \cos 4 \pi x - 0.012604 \cos 6 \pi x 

### ブラックマン‐ハリス窓

Blackman‐Harris window。
*w(x) = 0.35875 - 0.48829 \cos 2 \pi x + 0.14128 \cos 4 \pi x - 0.01168 \cos 6 \pi x 

### ブラックマン‐ナットール窓

。
*w(x) = 0.3635819 - 0.4891775 \cos 2 \pi x + 0.1365995 \cos 4 \pi x - 0.0106411 \cos 6 \pi x
 

### フラット・トップ窓

。

スペクトルのメインローブの頂部が平らであることから、こう呼ぶ。別の式で表される窓関数を「フラット・トップ窓」と呼ぶことがある。
*w(x) = 1 - 1.93 \cos 2 \pi x + 1.29 \cos 4 \pi x - 0.388 \cos 6 \pi x + 0.032 \cos 8 \pi x 

### パルザン窓
Parzen window。

ガウス窓の区分3次関数による近似。
*w(x) = \begin{cases} 1 - 1.5 x^2 + 0.75 |x|^3, & \mbox{if } |x| \leq 1 \\ 0.25 (2 - |x|)^3, & \mbox{if } 1 \leq |x| \leq 2 \end{cases}

### 赤池窓
Akaike window。
*w(x) = 0.625 - 0.5 \cos 2 \pi x - 0.125 \cos 4 \pi x 

### ウェルチ窓
Welch window。
*w(x) = 4 x (1 - x) 

### MDCT窓関数
MDCT（修正離散コサイン変換）の前処理に使う。
MDCTでの変数定義の慣習にしたがい、離散化には、x = (k + 0.5) / N, \ k = 0, \ldots ,N - 1 のデータ数を 2N \, とした式

を用いることが多い。

### サイン窓
。半波余弦窓 (half cycle sine window) とも。
MP3など多くのフォーマットが使用。
*w(x) = \sin \pi x 

### Vorbis窓
。
Vorbisが使用。
*w(x) = \sin \left( \frac{\pi}{2} \sin^2 \pi x  \right) 

### カイザー‐ベッセル派生窓
Kaiser‐Bessel derived window。KBD窓 (KBD window) とも。

AC3やAACが使用。

### フィルタとして使う窓関数

#### ランツォシュ窓

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

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

データのデシメーション（画像縮小など）の前処理に、LPF（低域通過フィルタ）として使われる。
*w(x) = \mathrm{sinc} x \cdot \mathrm{sinc} \frac{x}{n}, \ \mbox{if } |x| \leq n 

ただし、\mathrm{sinc}x = ( \sin \pi x ) / \pi x \, は正規化sinc関数。

#### Sinc窓

窓と言いつつ、無限長の台を持つ（つまり原点からどこまで離れても関数値が0にならない）関数である。無限回の計算が必要なため直接的な実装を考えた場合は実用的ではない。一方でフィルタの基礎理論としては重要で、近似的な窓であるランツォシュ窓などが考案され画像の拡大縮小などに広く活用されている。

Sinc窓はBrick-wall filtersとなる。

## 脚注

### 注釈

### 出典


## 参考文献

* 

## 関連項目
* フーリエ変換
* 短時間フーリエ変換
* 修正離散コサイン変換
* ウェーブレット変換
* カイザー窓
* デジタル信号処理
* データ圧縮
* 窓関数 (SQL)
## 外部リンク
* 窓関数 (Window Function) - 井澤裕司
* フーリエ変換と窓関数 - 測定器玉手箱
* Windows - Paul Bourke
* Window Functions - Roger L. Easton, Jr.
* Ogg/Vorbis in embeded systems