短時間フーリエ変換

短時間フーリエ変換（たんじかんフーリエへんかん、short-time Fourier transform、short-term Fourier transform、STFT）とは、関数に窓関数をずらしながら掛けて、それにフーリエ変換すること。音声など時間変化する信号の周波数と位相（の変化）を解析するためによく使われる。 理論上フーリエ係数を求めるには無限の区間に渡って積分を行わなければならないが、実験値等からフーリエ係数を求めるには範囲を区切らなければならない。そのために、ある範囲の実験値のフーリエ係数を求めるには、このある範囲の実験値が周期的に無限に繰り返されていると仮定して計算するのが一般的である。だがここで問題なのは、ある範囲の最初の値と最後の値を無理やりつなげることによって発生する不連続な要素である。これを解決するため、中央が 1 付近の値でその範囲外で 0 に収束する関数を掛けて、不連続な要素を極力排除することが行われる。これが短時間フーリエ変換である。このとき、この掛け合わせる関数を窓関数と言う。 STFTは以下のように数式表現できる（ i {\displaystyle i} は虚数単位）： S T F T x , w ( t , ω ) = ∫ − ∞ ∞ x ( τ ) w ( τ − t ) e − i ω τ d τ {\displaystyle \mathrm {STFT} _{x,w}(t,\omega )=\int _{-\infty }^{\infty }x(\tau )w(\tau -t)e^{-i\omega \tau }\,d\tau } ここで w ( t ) {\displaystyle w(t)\,} は窓関数であり、普通 t = 0 {\displaystyle t=0\,} 付近に中心をもつ山の概形をしていて、 t = 0 {\displaystyle t=0\,} の付近から離れると 0 になる関数である。また x ( t ) {\displaystyle x(t)\,} は変換される関数（信号）である。そして、 S T F T x , w ( t , ω ) {\displaystyle \mathrm {STFT} _{x,w}(t,\omega )\,} は時刻 t {\displaystyle t\,} 角周波数 ω {\displaystyle \omega \,} のスペクトルを表現する複素数である。 離散時間に関するSTFTは次のようになる： S T F T x , w [ n , ω ] = ∑ m = − ∞ ∞ x [ n + m ] w [ m ] e − i ω m {\displaystyle \mathrm {STFT} _{x,w}[n,\omega ]=\sum _{m=-\infty }^{\infty }x[n+m]w[m]e^{-i\omega m}} 連続時間での式と同様に w [ n ] {\displaystyle w[n]\,} は窓関数、 x [ n ] {\displaystyle x[n]\,} は変換される関数である。この式では n {\displaystyle n\,} が離散値であるが ω {\displaystyle \omega \,} が連続でもよい。しかし通常高速フーリエ変換を用いて計算機で計算されるので、 ω {\displaystyle \omega \,} も離散化される。 STFTの絶対値を2乗することで、パワースペクトルの時間変化が得られる： p o w e r x , w ( t , ω ) = | S T F T x , w ( t , ω ) | 2 {\displaystyle \mathrm {power} _{x,w}(t,\omega )=|\mathrm {STFT} _{x,w}(t,\omega )|^{2}\,} また、位相スペクトルの時間変化は、STFTの偏角で得られる： p h a s e x , w ( t , ω ) = arg ⁡ S T F T x , w ( t , ω ) {\displaystyle \mathrm {phase} _{x,w}(t,\omega )=\arg \mathrm {STFT} _{x,w}(t,\omega )} 不確定性原理（フーリエ変換の不確定性原理）とは、時刻の不確定さと周波数の不確定さの間に Δ x Δ ω ≥ 1 2 {\displaystyle \Delta x\Delta \omega \geq {\frac {1}{2}}} の関係があることである。一般化された言い方では、フーリエ変換で結ばれた2つの変数の対に対して上のような関係がなりたつことを指す。 STFTの問題点の一つは解像度が限られてしまうことである。窓関数の窓の幅などの形状によって、周波数分解能を良くするか時間分解能を良くするかのトレードオフが決まってしまう。幅の広い窓は周波数分解能が良いが時間分解能は悪い。逆に幅の狭い窓は時間分解能は良いが周波数分解能が悪い。 この事実はウェーブレット変換を作る原因にもなった。ウェーブレット変換ではSTFTと異なり時間分解能と周波数分解能が両立することが出来る。 量子力学における運動量と位置に関するハイゼンベルクの不確定性原理とは普通区別されるが、実はフーリエ変換の不確定性原理に基因するものである。シュレディンガー方程式によれば、定常な場合、 ψ ( x , t ) = ψ ( x ) e − i E t ℏ = ψ ( x ) e − i ω t {\displaystyle \psi (x,t)=\psi (x)e^{-{iEt \over {\hbar }}}=\psi (x)e^{-i\omega t}} であり、フーリエ級数の形になっているので、 Δ x Δ ω ≥ 1 / 2 {\displaystyle \Delta x\Delta \omega \geq 1/2} が成り立つ。これに ω = p / ℏ {\displaystyle \omega =p/\hbar } を代入したものが、いわゆるハイゼンベルクの不確定性原理の式 Δ x Δ p ≥ ℏ 2 {\displaystyle \Delta x\Delta p\geq {\frac {\hbar }{2}}} である。 周波数が 10,25,50,100 Hz の順に 5 秒ごとに変化していく信号を考える。 x ( t ) = cos ⁡ ( 2 π f t ) , {\displaystyle x(t)=\cos(2\pi ft),\,} f / H z = { 10 , if  0 ≤ t / s < 5 25 , if  5 ≤ t / s < 10 50 , if  10 ≤ t / s < 15 100 , if  15 ≤ t / s < 20 {\displaystyle f/\mathrm {Hz} ={\begin{cases}10,&{\mbox{if }}0\leq t/\mathrm {s} <5\\25,&{\mbox{if }}5\leq t/\mathrm {s} <10\\50,&{\mbox{if }}10\leq t/\mathrm {s} <15\\100,&{\mbox{if }}15\leq t/\mathrm {s} <20\end{cases}}} 窓の幅を変えてSTFTすると次のようなスペクトラムが得られる。25ミリ秒の窓は信号の周波数変化の時刻を完全に識別できているが、信号の周波数を特定できない。一方で1000ミリ秒の窓は信号の周波数を特定できるが、信号の周波数変化をしたところがボケてしまっている。 25ミリ秒の窓 125ミリ秒の窓 375ミリ秒の窓 1000ミリ秒の窓 逆短時間フーリエ変換（ぎゃくたんじかんフーリエへんかん、英: inverse short-time Fourier transform; ISTFT）は時間周波数表現を時間表現へ逆変換する操作である。各フレームのフーリエ係数を逆変換して時間表現へ戻し、合成窓 w s {\displaystyle w_{s}} を掛け、フレーム群を位置合わせしながら重畳加算することで1つの時間表現を合成する。 時間的に重なった信号を重畳加算するため、元信号の完全再構成は一般に可能でない。 w s {\displaystyle w_{s}} に矩形窓を採用して複数のフレームを重ねると元信号より大きくなることからこれは明らかである。「信号 →（STFT）→ 係数 →（ISTFT）→再構成信号」で完全な再構成を可能にする条件を完全再構成条件という。