Warning: Undefined variable $type in /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php on line 3
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/1/sub.jp-asate/web/wiki/includes/json/FormatJson.php on line 297
Warning: Trying to access array offset on value of type bool in /home/users/1/sub.jp-asate/web/wiki/includes/Setup.php on line 660
Warning: session_name(): Session name cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/Setup.php on line 834
Warning: ini_set(): Session ini settings cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 126
Warning: ini_set(): Session ini settings cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 127
Warning: session_cache_limiter(): Session cache limiter cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 133
Warning: session_set_save_handler(): Session save handler cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 140
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/1/sub.jp-asate/web/wiki/languages/LanguageConverter.php on line 773
Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/Feed.php on line 294
Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/Feed.php on line 300
Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46
Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46
Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46 https:///mymemo.xyz/wiki/api.php?action=feedcontributions&feedformat=atom&user=240F%3A73%3A33A1%3A1%3AFCB2%3A4117%3A9CDF%3A9BA3miniwiki - 利用者の投稿記録 [ja]2024-09-27T20:56:49Z利用者の投稿記録MediaWiki 1.31.0短時間フーリエ変換2015-01-20T13:38:39Z<p>240F:73:33A1:1:FCB2:4117:9CDF:9BA3: /* 例 */</p>
<hr />
<div>'''短時間フーリエ変換'''(たんじかんフーリエへんかん、short-time Fourier transform、short-term Fourier transform、STFT)とは、関数に[[窓関数]]をずらしながら掛けて、それに[[フーリエ変換]]すること。音声など時間変化する信号の[[周波数]]と[[位相]](の変化)を解析するためによく使われる。<br />
<br />
理論上フーリエ係数を求めるには[[無限]]の区間に渡って[[積分]]を行わなければならないが、実験値等からフーリエ係数を求めるには範囲を区切らなければならない。そのために、ある範囲の実験値の[[フーリエ係数]]を求めるには、このある範囲の実験値が周期的に無限に繰り返されていると仮定して計算するのが一般的である。だがここで問題なのは、ある範囲の最初の値と最後の値を無理やりつなげることによって発生する[[連続|不連続]]な要素である。これを解決するため、中央が 1 付近の値でその範囲外で 0 に収束する関数を掛けて、不連続な要素を極力排除することが行われる。これが短時間フーリエ変換である。このとき、この掛け合わせる関数を[[窓関数]]と言う。<br />
<br />
STFTは以下のように数式表現できる(<math>i</math>は[[虚数単位]]):<br />
{{Indent|<math> \mathrm{STFT}_{x,w} (t,\omega)=\int_{-\infty}^{\infty} x(\tau)w(\tau-t)e^{-i \omega \tau}\, d\tau</math>}}<br />
ここで<math>w(t)\,</math>は窓関数であり、普通<math>t=0\,</math>付近に中心をもつ山の概形をしていて、<math>t=0\,</math>の付近から離れると 0 になる関数である。また<math>x(t)\,</math>は変換される関数(信号)である。そして、<math> \mathrm{STFT}_{x,w} (t, \omega) \,</math>は時刻<math>t\,</math>角周波数<math>\omega\,</math>のスペクトルを表現する[[複素数]]である。<br />
<br />
離散時間に関するSTFTは次のようになる:<br />
{{Indent|<math> \mathrm{STFT}_{x,w} [n,\omega]=\sum_{m=-\infty}^{\infty} x[n+m]w[m]e^{-i \omega m}</math>}}<br />
連続時間での式と同様に<math>w[n]\,</math>は窓関数、<math>x[n]\,</math>は変換される関数である。この式では<math>n\,</math>が離散値であるが<math>\omega\,</math>が連続でもよい。しかし通常[[高速フーリエ変換]]を用いて計算機で計算されるので、<math>\omega\,</math>も離散化される。<br />
<br />
STFTの絶対値を2乗することで、[[パワースペクトル]]の時間変化が得られる:<br />
{{Indent|<math> \mathrm{power}_{x,w} (t, \omega) = | \mathrm{STFT}_{x,w} (t, \omega) | ^ 2 \,</math>}}<br />
また、位相スペクトルの時間変化は、STFTの偏角で得られる:<br />
{{Indent|<math> \mathrm{phase}_{x,w} (t, \omega) = \arg \mathrm{STFT}_{x,w} (t, \omega) </math>}}<br />
<br />
==STFTの問題点である不確定性原理==<br />
'''不確定性原理'''(フーリエ変換の不確定性原理)とは、時刻の不確定さと周波数の不確定さの間に<br />
{{Indent|<math> \Delta x \Delta \omega \geq \frac{1}{2} </math>}}<br />
の関係があることである。一般化された言い方では、フーリエ変換で結ばれた2つの変数の対に対して上のような関係がなりたつことを指す。<br />
<br />
STFTの問題点の一つは解像度が限られてしまうことである。窓関数の窓の幅などの形状によって、周波数分解能を良くするか時間分解能を良くするかの[[トレードオフ]]が決まってしまう。幅の広い窓は周波数分解能が良いが時間分解能は悪い。逆に幅の狭い窓は時間分解能は良いが周波数分解能が悪い。<br />
[[ファイル:STFT - windows.png|frame|none|STFTの解像度の比較。左は時間分解能が良く、右は周波数分解能が良い]]<br />
<br />
この事実は[[ウェーブレット変換]]を作る原因にもなった。ウェーブレット変換ではSTFTと異なり時間分解能と周波数分解能が両立することが出来る。<br />
<br />
[[量子力学]]における[[運動量]]と[[位置]]に関する[[不確定性原理|ハイゼンベルクの不確定性原理]]とは普通区別されるが、実はフーリエ変換の不確定性原理に基因するものである。[[シュレディンガー方程式]]によれば、定常な場合、<br />
{{Indent|<math> \psi(x,t) = \psi(x)e^{- {i E t \over {\hbar}} } = \psi(x)e^{- i \omega t }</math>}}<br />
であり、フーリエ級数の形になっているので、<math> \Delta x \Delta \omega \geq 1 / 2 </math>が成り立つ。これに<math>\omega = p / \hbar</math>を代入したものが、いわゆるハイゼンベルクの不確定性原理の式<br />
{{Indent|<math>\Delta x \Delta p \geq \frac{\hbar}{2}</math>}}<br />
である。<br />
<br />
===例===<br />
周波数が 10,25,50,100 Hz の順に 5 秒ごとに変化していく信号を考える。<br />
{{Indent|<br />
<math> x(t) = \cos ( 2 \pi f t), \,</math><br /><br />
<math> f / \mathrm{Hz} = \begin{cases}<br />
10, & \mbox{if } 0 \leq t / \mathrm{s} < 5 \\<br />
25, & \mbox{if } 5 \leq t / \mathrm{s} < 10 \\<br />
50, & \mbox{if } 10 \leq t / \mathrm{s} < 15 \\<br />
100, & \mbox{if } 15 \leq t / \mathrm{s} < 20<br />
\end{cases} </math><br />
}}<br />
窓の幅を変えてSTFTすると次のようなスペクトラムが得られる。25ミリ秒の窓は信号の周波数変化の時刻を完全に識別できているが、信号の周波数を特定できない。一方で1000ミリ秒の窓は信号の周波数を特定できるが、信号の周波数変化をしたところがボケてしまっている。<br />
<br />
<gallery><br />
ファイル:STFT_Spectrogram_25ms.png|25ミリ秒の窓<br />
ファイル:STFT_Spectrogram_125ms.png|125ミリ秒の窓<br />
ファイル:STFT_Spectrogram_375ms.png|375ミリ秒の窓<br />
ファイル:STFT_Spectrogram_1000ms.png|1000ミリ秒の窓<br />
</gallery><br />
<br />
==関連項目==<br />
* [[フーリエ変換]]<br />
* [[窓関数]]<br />
* [[不確定性原理]](ハイゼンベルクの不確定性原理)<br />
* [[ウェーブレット変換]]<br />
<br />
{{デフォルトソート:たんしかんふうりえへんかん}}<br />
[[Category:解析学]]<br />
[[Category:フーリエ解析]]<br />
[[Category:信号処理]]<br />
[[Category:数学に関する記事]]</div>240F:73:33A1:1:FCB2:4117:9CDF:9BA3 Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46