パラメータ設定
リセット
δ は信号周波数の bin からの整数オフセット。δ=0 で漏れなし、δ=0.5 で漏れ最大(スカロップ損失最悪)。
窓関数の時間波形とスペクトル
上段:窓関数 w[n](青)/下段:窓のスペクトル |W[k]| dB(赤)/黄点線:信号 bin 位置 f₀+δ
理論・主要公式
窓関数は、有限区間のDFTで生じる漏れスペクトル(spectral leakage)を抑えるため、フレーム両端で滑らかに減衰させる重み関数です。代表的な窓は以下のとおりです(n = 0, 1, …, N−1):
矩形窓(窓なし):
$$w[n] = 1$$
Hann 窓:
$$w[n] = 0.5\left(1 - \cos\frac{2\pi n}{N-1}\right)$$
Hamming 窓:
$$w[n] = 0.54 - 0.46\cos\frac{2\pi n}{N-1}$$
Blackman 窓:
$$w[n] = 0.42 - 0.5\cos\frac{2\pi n}{N-1} + 0.08\cos\frac{4\pi n}{N-1}$$
窓のスペクトルは $W[k] = \mathrm{DFT}(w[n])$。メインローブ幅が広いほど周波数分解能は悪化し、サイドローブが低いほど漏れが少なくなります。両者はトレードオフの関係にあります。
コヒーレントゲイン CG(平均利得):
$$\mathrm{CG} = \frac{1}{N}\sum_{n=0}^{N-1} w[n]$$
窓関数のスペクトル特性比較シミュレーターとは
🙋
信号処理で「窓関数」ってよく聞くんですけど、なんで掛ける必要があるんですか?普通にFFTすればいいんじゃ?
🎓
それがハマりやすい落とし穴なんだ。FFTは「信号がフレーム長 N の周期で繰り返している」という前提で計算する。でも実際の信号は N の整数倍周期じゃないことがほとんどで、フレームの両端で信号がブツッと切れる。この「不連続」が、本来1本のはずのスペクトル線を周りの bin にダラダラと「漏らす」んだ。これが漏れスペクトル(spectral leakage)。シミュレーターで窓種類を0(矩形=窓なし)にして、δ を0.5にしてみて。下のスペクトルが裾を引いて広がるでしょ?
🙋
本当だ、矩形だとサイドローブがすごい!窓種類を1(Hann)に変えると、ピシッと一本になりますね。
🎓
そう、窓関数はフレーム両端をスーッと0に落とすことで、不連続をなくす役割なんだ。Hann窓は両端でちょうど0になるcosのカーブ。Hammingは少し残して最近接サイドローブを最小化、Blackmanは3つの余弦項で遠方まで徹底的に抑える。スライダーで0→1→2→3と動かすと、サイドローブのレベルがどんどん下がっていくのが見える。
🙋
じゃあBlackmanが一番いい窓ってことですか?全部Blackmanで良さそう。
🎓
それがトレードオフなんだ。サイドローブを抑えるとメインローブが広がる。stat-cardの「メインローブ幅」を見て——矩形は2 bin、Hann/Hammingは4 bin、Blackmanは6 binと、より広い。広いと近接した2つの周波数を分離する能力(周波数分解能)が落ちる。実務では「近接した周波数を分けたい」なら矩形寄り、「強い信号の近くに弱い信号を見つけたい」ならBlackman寄り、というふうに使い分けるよ。
🙋
「ピーク振幅誤差」のカードは何ですか?δ=0.5 で −1.42 dB って書いてある。
🎓
それは「スカロップ損失(scallop loss)」と呼ばれる現象だ。信号周波数がちょうど bin の真ん中(δ=0.5)にあると、メインローブの頂点がずれて、ピーク値が真の値より低く測定される。Hannでは最大−1.42 dB低くなる。振幅の正確さが大事な計測(例えば騒音計)では、この補正やオーバーサンプリング、フラットトップ窓(FlatTop)の採用が必要になる。δ を 0 ↔ 0.5 で動かして「振幅誤差」のカードが変化するのを見てみて。
よくある質問
Kaiser窓やFlatTop窓はどう違いますか?
Kaiser窓は形状を制御する1つのパラメータ β(または α)を持ち、矩形に近い狭メインローブ・高サイドローブから、Blackmanを超える低サイドローブまで連続的に変化できる「調節可能な窓」です。FlatTop窓は、メインローブの頂上を意図的に平坦にすることでスカロップ損失を 0.01 dB 未満に抑え、振幅測定(FFTアナライザ・騒音計)で標準的に使われます。代わりにメインローブはかなり広くなります(約 9 bin)。
δ=0 と δ=0.5 で何が変わりますか?
δ=0 は信号周波数が DFT の bin に完全に一致している状態で、漏れスペクトルもスカロップ損失もありません(窓のサイドローブを除く)。δ=0.5 は信号周波数が隣接 bin のちょうど真ん中にあり、最も大きな漏れとピーク振幅誤差が発生します。実信号では δ は事前にわからないため、「最悪ケースが δ=0.5」と覚えておき、その条件で十分な性能が得られる窓を選ぶのが定石です。
FFTとDFTの計算量は実用上どれくらい差がありますか?
N=1024 なら DFT は約100万演算、FFT(Cooley-Tukey)は約10000演算で、100倍程度の差。N=1,048,576 では DFT が1兆、FFT が約2000万で、5万倍以上の差になります。本ツールでは N≤1024 の小サイズなので可読性重視で直接 DFT を使っていますが、リアルタイム処理や大規模解析では FFT が必須です。NumPy・MATLAB・SciPy などの標準ライブラリの fft 関数を使えば十分です。
窓関数は時間領域以外でも使えますか?
はい、空間方向でも全く同じ原理で使われます。例えば画像処理での2次元FFT(テクスチャ解析、X線回折パターン解析)、アンテナアレーのビームフォーミング、レーダーパルス圧縮、開口光学など、有限区間のフーリエ変換が登場するあらゆる場面で「窓掛け」が応用されています。基本概念(メインローブ vs サイドローブのトレードオフ)も共通です。
実世界での応用
音響・振動解析: 機械の異常診断や騒音計測では、回転機械の振動信号をFFT解析して周波数成分を抽出します。Hann窓やHamming窓が汎用に使われ、振幅の正確さが必要なら FlatTop窓が選ばれます。回転速度が変動する実機計測では δ が変動するため、漏れスペクトル耐性のある窓選択が重要です。
通信信号処理: OFDM変調(Wi-Fi、4G/5G、デジタルTV)では、サブキャリア間干渉を抑えるため送信側で窓掛けを行います。Raised Cosine(RC)窓や Root Raised Cosine(RRC)窓が信号スペクトルの帯域外漏洩を抑えるのに使われ、隣接チャネルへの干渉を最小化します。
地震・地球物理学: 地震波の周波数解析やマイクロサイスミック観測では、長時間記録を短いフレームに区切ってFFTを行います(STFT、Short-Time Fourier Transform)。窓のサイドローブが地震波の小振幅後続波を覆い隠すと診断を誤るため、Blackman窓やKaiser窓が好まれます。
レーダー・ソナー: パルス圧縮レーダーやアクティブソナーでは、距離分解能(メインローブ幅)と弱目標検出能力(サイドローブレベル)のトレードオフが直接性能に効きます。強い目標の近くにある弱い目標を見逃さないため、Taylor窓やChebyshev窓など、サイドローブを一定レベルに揃える特殊な窓が使われます。
よくある誤解と注意点
最も多い誤解は、「窓関数を掛けると信号が変わってしまって良くないのでは」と考えてしまう ことです。確かに窓掛けは時間波形を改変しますが、これは「フレーム長が有限である」という測定の制約に対する最良の対処であり、改変しないこと(矩形窓)よりも改変したほうが、結果として真のスペクトルに近い推定が得られます。重要なのは、何も掛けない=「矩形窓を掛けている」のと等価だという認識です。窓を選ばないという選択肢は存在しません。
次に、「より低いサイドローブの窓を選べば常により良い」と思い込む こと。サイドローブを下げるとメインローブが広がり、近接した2つの周波数成分を分離する能力(周波数分解能)が落ちます。シミュレーターで窓種類を 0→3 と切り替えながら、スペクトル下段でメインローブの幅と高さを観察してみてください。矩形は鋭く尖り、Blackmanは丸く広がります。「分解能優先」か「低漏れ優先」か、目的に応じて選ぶことが重要です。
最後に、振幅測定での「コヒーレントゲイン補正」を忘れる こと。Hann窓を掛けるとスペクトルのピーク値は信号の真の振幅の半分(CG=0.5)になります。FFTアナライザでスペクトル振幅を読むときは、必ず使用した窓の CG で割って補正します。さらに δ≠0 の場合は、スカロップ損失分も補正が必要です(FlatTop窓を使えばこの補正は1%未満で済みます)。窓関数を使う以上、「スペクトルの値そのもの」ではなく「窓特性を考慮した補正値」を扱っていることを意識してください。