短時間フーリエ変換(STFT)とスペクトログラム
周波数が刻々と変わる音声や振動を、いつどの周波数が鳴ったかまで可視化できる。窓を滑らせるSTFTと時間・周波数分解能のトレードオフを原理から押さえます。
- 1.STFT は信号を短い窓で区切り、その都度 DFT を取る操作。窓を時間方向にずらしながら繰り返すことで、周波数成分が時間とともにどう変化するかを追える。
- 2.窓を短くすると時間分解能は上がるが周波数分解能が下がり、長くすると逆になる。両者の積には下限があり同時には細かくできない(時間・周波数不確定性)。
- 3.STFT の大きさの2乗を時間×周波数の平面に並べた画像がスペクトログラム。窓を大きく重ねる(オーバーラップ)ことで時間軸の連続性とピーク検出精度を確保する。
定常でない信号をどう解析するか
通常のフーリエ変換は、信号全体を一度に周波数へ分解します。これは周波数成分が最初から最後まで一定な 定常信号 には有効ですが、音声・音楽・機械振動・レーダーのように 周波数が時間とともに変わる非定常信号 には向きません。全区間の DFT は「この曲にドとソが含まれる」ことは教えても、「ドがいつ鳴りソがいつ鳴ったか」という時間情報を平均化して潰してしまうからです。フーリエ変換とスペクトル解析 が周波数の地図だとすれば、本稿で扱う 短時間フーリエ変換(STFT) は「いつ・どの周波数が」を同時に描く時間×周波数の地図です。原理・トレードオフ・実装上の要点を、LaTeX を使わずプレーンな式で追います。
発想は単純です。信号が非定常でも、十分短い時間で切り出せばその区間内ではほぼ定常 とみなせます。ならば信号を短い区間に区切り、区間ごとに DFT を取り、それを時間順に並べればよい。この「短い窓を滑らせながら局所的にフーリエ変換する」操作が STFT です。
STFT の定義:窓を掛けて滑らせる
STFT は、解析対象 x[n] に窓関数 w[n] を掛けて有限区間を切り出し、その区間の DFT を取ります。窓の中心位置(フレーム開始点)を m だけずらしながら繰り返すことで、時間 m と周波数ビン k の二次元関数が得られます。
X[m, k] = Σ_{n=0..L-1} x[n + m·H] · w[n] · exp(-j 2π k n / L)
L : 窓長(フレーム長、DFT 点数)
H : ホップ長(フレームをずらす標本数)
m : フレーム番号(時間インデックス、時刻 ≈ m·H / fs)
k : 周波数ビン(周波数 ≈ k·fs / L)
各フレーム m は、その位置での局所スペクトル X[m, ·] を持ちます。これを時間方向に積み重ねたものが STFT の全体像です。DFT 部分は通常の離散フーリエ変換そのものなので、X[m, k] の周波数分解能や共役対称性、FFT による高速化といった性質は フーリエ変換とスペクトル解析 の議論がそのまま当てはまります。STFT が付け加えるのは 窓を滑らせる時間軸 だけです。
STFT の各フレームは、デジタルフィルタ設計と窓関数 で扱う窓掛けと同じく、信号に w[n] を乗じてから DFT を取る操作です。違いは、1 回で終わらせず窓を H 標本ずつ前進させて何度も取り、結果を時系列に並べる点だけです。したがって窓関数の選び方(ハニング・ハミング等)が STFT の分解能特性を直接左右します。
時間・周波数分解能のトレードオフ
STFT の核心は、時間分解能と周波数分解能を同時には細かくできない という制約です。これは窓長 L(=観測時間 T = L / fs)が両方を同時に決めてしまうことから生じます。
- 周波数分解能
Δf = fs / L = 1 / T。窓が長い(L大)ほど細かく周波数を分離できる。 - 時間分解能
Δt ≈ T = L / fs。窓が短い(L小)ほど、いつ起きたかを鋭く特定できる。
両者は Δf と Δt の関係で見ると Δf · Δt ≈ 1 となり、片方を小さくすればもう片方が必ず大きくなる 反比例の関係にあります。窓を短くして時間の切れ味を上げると周波数がぼやけ、窓を長くして周波数を鋭くすると時間がぼやけます。この二律背反が STFT 設計の最大の勘所です。
時間広がりと周波数広がりの積 Δt · Δf には理論的な下限が存在し、どんな窓を使ってもそれを下回れません(ガウス窓のとき最小に近づく)。これは信号処理版の不確定性原理で、量子力学の位置・運動量の不確定性と同じ数学的構造を持ちます。つまり「時間も周波数も同時に無限に細かく」は原理的に不可能で、STFT の限界は実装の未熟さではなく数学的な壁です。用途に応じてどちらを優先するかを選ぶしかありません。
具体的には、打楽器のアタックやクリック音のような 過渡的で時間位置が重要な信号は短い窓、和音や定常音の微妙な周波数差を見たい 周波数分離が重要な信号は長い窓 を選びます。同じ音源でも目的次第で最適な窓長は変わります。
| 窓長 L | 周波数分解能 Δf=fs/L | 時間分解能 Δt≈L/fs | 向いた対象 |
|---|---|---|---|
| 短い(例 256) | 粗い(周波数がぼやける) | 細かい(時刻を鋭く特定) | 打撃音・過渡・立ち上がり |
| 長い(例 4096) | 細かい(近接周波数を分離) | 粗い(時刻がにじむ) | 和音・定常音・微小ピッチ差 |
| 中間(例 1024) | バランス | バランス | 音声・一般的な音響解析 |
スペクトログラム:時間×周波数の画像
STFT X[m, k] は複素数なので、そのままでは可視化しにくい振幅と位相の情報を含みます。実務では大きさの 2 乗(パワー)を取り、横軸に時間 m、縦軸に周波数 k、値を色や濃淡で表した画像にします。これが スペクトログラム です。
S[m, k] = |X[m, k]|^2 (パワースペクトログラム)
表示は通常 10·log10(S[m, k]) の dB スケール
(ダイナミックレンジが広く、微弱成分も見えるため)
パワーを dB へ変換して表示するのが定番なのは、音や振動のエネルギーが数桁にわたって分布し、線形スケールでは強い成分に埋もれて弱い成分が見えなくなるためです。対数化により微弱なハーモニクスや暗騒音まで一枚の画像で読み取れます。この「小さな値をつぶさず表現する」動機は 量子化とADCのノイズ でダイナミックレンジを稼ぐ発想と同根です。
横方向に伸びる明るい線は、その周波数が持続していること(定常成分・基音や倍音)を表します。縦方向に走る明るい筋は、その瞬間に全周波数へエネルギーが広がったこと、すなわち打撃音やクリックのような過渡を表します。斜めに上下する線は周波数が滑らかに変化するチャープ(サイレンや鳥の声、レーダーの掃引信号)です。この 3 つのパターンを覚えるだけで、多くの信号の性質が一目で読めます。
オーバーラップ:窓を重ねて滑らかにつなぐ
フレームを窓長ぶんまるごと(H = L)進めると、隣り合うフレームは重ならず、しかも窓の両端で減衰した部分の情報が失われます。窓関数は中央を強調し端をゼロへ落とすため、境界付近の標本は軽くしか評価されないからです。これを防ぐのが オーバーラップ、すなわちホップ長 H を窓長 L より小さく取り、フレームどうしを重ねることです。
重なり率は (1 - H / L) で表し、実務では 50% や 75%(H = L/2 や L/4)が多用されます。オーバーラップには次の効果があります。
- ある窓で端に落ちた成分を、隣の窓では中央付近で拾えるため 情報の取りこぼしが減る。
- 時間方向のフレーム間隔
H / fsが細かくなり、スペクトログラムの 時間軸が滑らかで連続的 になる。 - 過渡的なイベントがフレーム境界と窓端に同時に当たって見逃される確率が下がる。
ホップ長 H を小さくすると時間軸のサンプル点は密になりますが、各フレームの周波数分解能を決める窓長 L は変わらないため、個々のスペクトルのぼやけ具合(真の時間分解能)は改善しません。これは、フーリエ変換とスペクトル解析 のゼロ詰めが見た目のビン間隔を細かくしても真の周波数分解能を上げないのと同じ構図です。オーバーラップはあくまで時間軸の補間・取りこぼし防止であって、Δt ≈ L/fs の壁は窓長を短くしない限り破れません。
なお、STFT から元の信号を再構成するには、各フレームの窓とホップが特定の条件(COLA:Constant OverLap-Add)を満たす必要があります。ハニング窓で 50% や 75% 重ねる組み合わせはこの条件を満たすため、フィルタリングやノイズ除去のように「STFT で加工して逆変換で戻す」処理でも標準的に使われます。前提として、そもそも入力が 標本化定理とエイリアシング を満たして折り返しなく標本化されていることが、意味のある時間周波数解析の出発点になります。
- STFT の目的:非定常信号を短い窓で区切り、区間ごとに DFT して周波数の時間変化を追う。
- トレードオフ:窓長
Lが両分解能を同時に決める。Δf = fs/L、Δt ≈ L/fs、積Δt·Δf ≈ 1。 - 不確定性:
Δt·Δfに下限あり。時間・周波数を同時に無限には細かくできない(ガウス窓で最小)。 - 窓長の選択:過渡・時刻重視は短い窓、周波数分離重視は長い窓。
- スペクトログラム:
|X[m,k]|^2を時間×周波数に並べた画像。表示は dB スケールが定番。 - オーバーラップ:
H < Lでフレームを重ね、取りこぼし防止と時間軸の平滑化。真の時間分解能は上げない。
まとめ
STFT は、全区間フーリエ変換が失う時間情報を取り戻すために、短い窓を滑らせながら局所的に DFT を取る 時間周波数解析です。要点は、(1) 非定常信号も短区間ではほぼ定常とみなせるという前提に立つこと、(2) 窓長 L が周波数分解能 Δf = fs/L と時間分解能 Δt ≈ L/fs を同時に決め、両者の積には不確定性原理による下限があって同時には細かくできないこと、(3) STFT の大きさの 2 乗を時間×周波数平面へ並べた画像がスペクトログラムで、dB スケール表示で広いダイナミックレンジを可視化すること、(4) ホップ長を窓長より小さく取るオーバーラップで取りこぼしを防ぎ時間軸を滑らかにするが、それ自体は真の時間分解能を上げないこと、です。窓長という一つのつまみが時間と周波数の切れ味を綱引きさせる——この構造を掴めば、音声認識・故障診断・通信・レーダーまで、あらゆる非定常信号の解析を同じ原理で読み解けます。
信号処理・制御 Article
短時間フーリエ変換(STFT)とスペクトログラムを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
STFT
比較で見る軸
難易度: advanced / カテゴリ: 信号処理・制御 / タグ数: 6
導入後に効く点
窓を短くすると時間分解能は上がるが周波数分解能が下がり、長くすると逆になる。両者の積には下限があり同時には細かくできない(時間・周波数不確定性)。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 信号処理・制御
- タグ数
- 6
判断チェックリスト
- 自社の用途が「STFT / スペクトログラム」に近いか確認する。
- 強みである「STFT は信号を短い窓で区切り、その都度 DFT を取る操作。窓を時間方向にずらしながら繰り返すことで、周波数成分が時間とともにどう変化するかを追える。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。