窓関数

窓関数とは、ある区間以外で0となる関数のことです。例えば、ある関数w(x)があった場合、以下のようにa<= x<= bで1、それ以外で0となるような関数が窓関数です。

例えば、以下も窓関数です。区間内の窓の形状は自由であり、様々な窓関数があります。

窓関数の使い方

窓関数w(x)は、他の関数fff(x)に掛けて利用します。例えば、以下の単振動波fff(x)に山型の窓関数w(x)を掛けてみます。

すると、以下の波形になります。式にすると、fff(x) w(x)です。窓関数の頂上部は1なので、頂上部に近い部分は元の波形に近い形で残り、山の裾の末端では0になるため、波形に0が掛けられて振幅も0となります。

同様に、以下の単振動波に長方形の窓関数を掛けてみます。

すると、以下のようにぶつ切りにした波形になります。

窓関数を使うと、ある関数fff(x)のある区間をそのまま、もしくは加工して切り出すことが出来ます。

矩形窓

矩形窓とは、以下の式で表される窓関数のことです。ifの範囲は、ーT/ 2<=t<=T/ 2とすることもあります。

w(t)=1if0<=t<=T

T=0.5の矩形窓の周波数特性をフーリエ変換を使って調べると以下になります。縦軸はピークが1になるように絶対値比として表示しています。

窓関数とフーリエ変換の関係

窓関数の大きな目的は、フーリエ変換を有限期間で行うことです。すでに説明したように関数に窓関数を掛けると、関数のある区間が切り出されるため、窓関数を掛けた関数をフーリエ変換すると、有限期間のフーリエ変換ができます。

続いて、フーリエ変換で得られる窓関数の周波数特性の役割について説明します。

先ほどの矩形窓の周波数特性は、関数fff(t)=1T=0.5の矩形窓w(t)=1を掛けたfff(t) w(t)=1のフーリエ変換の結果でもあります。一方、fff(t)=1のフーリエ変換の周波数特性は、0Hzのみ成分を持ちます。ということは、0Hz波形に矩形窓を掛けると、0Hz成分が矩形窓の周波数特性のように分散すると考えることができます。

同様に、20Hzの単振動波にT=0.5の矩形窓を掛けてフーリエ変換すると、以下の周波数特性になります。

メインローブが2つありますが、サイドローブの形が0Hzのときと比べて少し変化しているのは、2つのサイドローブが重なって合成されているためです。厳密には、メインローブも片方のサイドローブが合成されて形が変化しています。合成されているものを分離すれば、メインローブとサイドローブの形は、0Hzのものと同じです。

このように窓関数を掛けてフーリエ変換を行うと、特定の周波数成分が窓関数の周波数特性通りに分散します。

まとめると、ある関数に窓関数を掛けてフーリエ変換を行うと、有限期間でフーリエ変換を行うことができ、特定の周波数成分は、窓関数の周波数特性通りに分散します。そして、窓関数を掛ける関数が複数の周波数成分を持っている場合は、それぞれの周波数成分は、窓関数の周波数特性通りに分散し、重なった部分は合成(足し算)されます。なお、それぞれのメインローブのピークは、元の周波数成分のレベルに応じて変わります。

窓関数に種類がある理由

窓関数に様々な種類があるのは、複数のメインローブ、サイドローブが合成された場合に、周波数特性の解析観点での性質が変わるためです。例えば、以下は、同じ振幅の19Hz、20Hz、21Hzの単振動波を合成したものにT=0.5の矩形窓を掛けてフーリエ変換したものです。縦軸の絶対値比は、1つのメインローブを分離した場合のピークが1になるようにしています。

矩形窓は、比較的サイドローブが大きいため、上記のようにサイドローブが積み上がり易い性質を持っています。サイドローブが積み上がった位置に小さなレベルの周波数成分があると埋もれてしまいます。

また、矩形窓は、比較的メインローブの幅が狭いため、周波数成分をより細かく分離できます。

Tと窓関数の性能の関係

なお、ここまで見てきた矩形窓の周波数特性は、あくまでもT=0.5の場合の特性なので、Tを変更すれば、周波数特性も変わります。例えば、以下は、T=1.0の矩形窓をフーリエ変換した場合の周波数特性です。

T=0.5の矩形窓と比べると、メインローブもサイドローブもより中心に集まっており、周波数分解能が上がっています。周波数特性がバタついても良いから細かく周波数成分を観察したい場合はTを大きく、滑らかで大雑把な周波数特性でも良い場合はTを小さくします。

なお、Tを大きくすればするほど、フーリエ変換の計算量は増えます。