窓関数(ウィンドウ)の基礎と音楽信号解析での実践的選び方

はじめに — 窓関数とは何か

窓関数(ウィンドウ)は、時間領域で信号の一部を選択して周波数解析(特に離散フーリエ変換:DFT/FFT)を行う際に掛け合わせる重み関数です。音楽や音声の短時間スペクトルを得る短時間フーリエ変換(STFT)やスペクトログラム、ピッチ検出、位相ボコーダー、グラニュラー合成など、ほぼすべての時間-周波数解析処理で重要になります。窓を何も掛けない矩形窓(rectangular)は時間領域をそのまま切り取る最も単純な方法ですが、周波数領域で高いサイドローブ(スペクトルリーク)を生みやすく、実用的には様々な窓関数が使われます。

基本的な性質:時間解像度と周波数解像度、リーク

窓関数を選ぶときに理解すべき基本概念は次の3つです。

  • メインローブ幅(main-lobe width) — 周波数分解能に直結。メインローブが狭いほど近接周波数成分を分離しやすい。
  • サイドローブレベル(side-lobe level) — 離れた周波数からの漏れ(リーク)を示す。サイドローブが低い窓は、強い成分が弱い成分を覆い隠すのを防ぐ。
  • 時間-周波数トレードオフ — 短い窓は時間解像度が高いが周波数解像度が低く、長い窓は逆。窓の形状もこのバランスに影響する。

矩形窓は最も狭いメインローブ(高い周波数解像度)を持ちますが、非常に高いサイドローブを持ち、スペクトルリークが大きいのが欠点です。一方でBlackmanやKaiserなどはサイドローブ抑圧に優れますがメインローブが広く、周波数分解能は劣ります。

代表的な窓の定義と特徴(実用向け)

ここではSTFTや分析でよく使われる主要な窓を紹介します。式は長さNの窓で、n=0,...,N-1とします。

  • 矩形窓(rectangular): w[n]=1。最も単純。解像度は良いがリーク大。
  • ハン窓(Hann, ハニングとも表記): w[n]=0.5*(1-cos(2πn/(N-1)))。50%オーバーラップでのCOLA(constant overlap-add)性を持ち、一般的なスペクトログラムで好まれる。
  • ハミング窓(Hamming): w[n]=0.54-0.46*cos(2πn/(N-1))。ハンに似るがメインローブがわずかに狭く、最初のサイドローブが低減されている。
  • ブラックマン窓(Blackman): w[n]=0.42-0.5*cos(2πn/(N-1))+0.08*cos(4πn/(N-1))。さらにサイドローブ抑圧に優れる。
  • ブラックマン-ハリス窓(Blackman–Harris): 4項の係数を使い、非常に低いサイドローブを実現。高ダイナミックレンジの解析向け。
  • カイザー窓(Kaiser): w[n]=I0(β*sqrt(1-((2n/(N-1)-1)^2)))/I0(β)。パラメータβでメインローブ幅とサイドローブ抑圧を連続的に調整可能。理工系で重宝。
  • ガウス窓(Gaussian): 正規分布に基づく。時間-周波数で最小の不確定性(Gabor関係)を持つ(パラメータで広がり調整)。
  • タッキー窓(Tukey): 一部を矩形、端をハンに切り替える。αで矩形部の割合を調整可能。

STFTと窓の実践的な選び方

音楽信号解析では目的別に窓と窓長、オーバーラップを決めます。

  • 楽音の周波数成分を精密に測りたい(音高・倍音解析)→ 長めの窓(例: 2048〜16384サンプル)とメインローブ幅が狭い窓。ただし音の時間変化(演奏のアタック等)を潰さないか注意。
  • 短い時間変化・トランジェント検出(打楽器、アタック検出)→ 短い窓(例: 256〜1024)と時間解像度重視。矩形や短いハン窓など。
  • スペクトログラム表示(可視化)→ HannかHammingをデフォルトにすることが多い。Hannは50%オーバーラップでCOLAし、見た目と合成の安定性が良い。
  • ダイナミックレンジの高いスペクトル解析(低レベル成分を捉えたい)→ Blackman-HarrisやKaiser(高β)を選ぶ。

窓長とサンプルレートで周波数解像度はサンプルレート/N(1ビンの幅)に依存しますが、窓形状のメインローブ幅はその理論的解像度をさらに制約します。目安としては、矩形窓が最もビン分解能を活かせますが、隣接する強い周波数成分がある場合はリークでマスクされます。

重ね合わせ合成(OLA/COLA)とオーバーラップ

STFTを解析・合成で用いる際、窓とオーバーラップ(hop size)の組合せは合成誤差(音量変化や振幅変動)に直結します。多くの窓は特定のオーバーラップ率でCOLA(窓を重ね合わせた合計が定数)を満たします。代表例はHann窓で、hop=N/2(50%)でCOLAを満たします。これにより分析→処理→合成したときに時間波形が元と一致(スケーリングを補正すれば)しやすくなります。

振幅補正(コヒーレントゲインと等価ノイズ帯域幅)

窓は信号振幅に影響するため、スペクトルの振幅を正しく比較・表示するには補正が必要です。主に二つの概念が使われます。

  • コヒーレントゲイン(coherent gain): 窓の直流成分の平均(sum(w)/N)で表される。正弦波がDFTの正しい周波数ビンに乗るときの振幅減衰を補正するために使う。
  • 等価ノイズ帯域幅(ENBW): 窓によるノイズフロアの増幅を表す指標で、窓のエネルギーに基づき定義される。パワースペクトルの正規化に用いる。

実用的には、スペクトログラム表示やレベル推定ではこれらの補正を行うことで比較可能な結果が得られます。

窓とフィルタ設計、窓関数法

窓はFIRフィルタ設計にも用いられます(窓関数法)。理想的なインパルス応答(例えば理想ローパスのsinc)を切り取るときに、その端を滑らかにするために窓を掛けます。ここでも窓の選択は主ローブ幅(遮断領域の幅)とサイドローブ(リップル)に影響します。Kaiser窓はβでトレードオフを連続的に調整できるため、設計時に便利です。

実践的なヒントとチェックリスト

  • まず目的(周波数分解能か時間解像度か、低レベル成分の検出か)を明確にする。
  • 初期設定としては、音声・音楽の一般解析にはHann窓(N=1024〜4096, hop=N/2)を試す。見た目と合成互換性でバランスが良い。
  • 精密な倍音解析や周波数推定では、窓長を伸ばし、必要ならブラックマン系を検討する。ただしアタックや時間変化に注意。
  • トランジェント処理やエンベロープ抽出には短窓と適切なスムージングを併用する。
  • スペクトルの振幅比較を行う場合は、コヒーレントゲインとENBWで補正する。
  • オーバーラップとCOLA関係を確認し、解析→合成を行う処理(例:位相ボコーダー)では合成誤差を低減する。

応用例:位相ボコーダー、ピッチ検出、ノイズリダクション

窓は応用によって重要性が変わります。位相ボコーダー(時間伸縮・ピッチシフティング)では位相精度と振幅連続性が重要なため、COLA性を持つ窓と適切なオーバーラップが必須です。ピッチ検出ではピーク分解能とリーク抑圧のバランスが必要で、演奏中の隣接倍音が強い場合はサイドローブ抑圧が優先されます。ノイズリダクションやスペクトルサブトラクションではノイズフロア評価が正確であることが重要で、ENBWの小さい窓を選ぶか補正を行います。

まとめ

窓関数は単なる前処理ではなく、時間-周波数解析全体の品質を左右する重要な要素です。矩形、Hann/Hamming、Blackman、Kaiserなど代表的な窓の特性を理解し、目的に応じて窓形状・窓長・オーバーラップ・振幅補正を組み合わせることで、音楽信号解析の精度と使いやすさが大きく向上します。実装時にはCOLAやコヒーレントゲイン、ENBWなどの概念を押さえ、テスト信号(正弦波、複数正弦波、インパルス)で挙動を確認することをお勧めします。

エバープレイの中古レコード通販ショップ

エバープレイでは中古レコードのオンライン販売を行っております。
是非一度ご覧ください。

エバープレイオンラインショップのバナー

また、レコードの宅配買取も行っております。
ダンボールにレコードを詰めて宅配業者を待つだけで簡単にレコードが売れちゃいます。
是非ご利用ください。
https://everplay.jp/delivery

参考文献