窓関数のスペクトル特性比較 戻る
信号処理シミュレーター

窓関数のスペクトル特性比較 — メインローブ幅とサイドローブ抑圧

矩形・Hann・Hamming・Blackman窓のスペクトル特性を可視化。窓長・信号周波数・周波数オフセットを変えて、漏れスペクトル抑制と分解能のトレードオフを直感的に学べます。

パラメータ設定
窓長 N
信号周波数 f₀
bin
周波数オフセット δ
bin
窓種類(0=矩形 1=Hann 2=Hamming 3=Blackman)

δ は信号周波数の bin からの整数オフセット。δ=0 で漏れなし、δ=0.5 で漏れ最大(スカロップ損失最悪)。

計算結果
メインローブ幅 (-6 dB)
最大サイドローブ抑圧
コヒーレントゲイン CG
ピーク振幅誤差(δ=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窓は形状を制御する1つのパラメータ β(または α)を持ち、矩形に近い狭メインローブ・高サイドローブから、Blackmanを超える低サイドローブまで連続的に変化できる「調節可能な窓」です。FlatTop窓は、メインローブの頂上を意図的に平坦にすることでスカロップ損失を 0.01 dB 未満に抑え、振幅測定(FFTアナライザ・騒音計)で標準的に使われます。代わりにメインローブはかなり広くなります(約 9 bin)。
δ=0 は信号周波数が DFT の bin に完全に一致している状態で、漏れスペクトルもスカロップ損失もありません(窓のサイドローブを除く)。δ=0.5 は信号周波数が隣接 bin のちょうど真ん中にあり、最も大きな漏れとピーク振幅誤差が発生します。実信号では δ は事前にわからないため、「最悪ケースが δ=0.5」と覚えておき、その条件で十分な性能が得られる窓を選ぶのが定石です。
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%未満で済みます)。窓関数を使う以上、「スペクトルの値そのもの」ではなく「窓特性を考慮した補正値」を扱っていることを意識してください。