高速フーリエ変換 vs 短時間フーリエ変換

高速フーリエ変換 vs 短時間フーリエ変換: 信号解析における使い分け

概要

高速フーリエ変換 (FFT) と短時間フーリエ変換 (STFT) は、周波数領域における信号解析の基礎となるツールです。FFT は、離散フーリエ変換 (DFT) を計算するための効率的なアルゴリズムで、振幅対時間データを振幅対周波数データに変換します。FFT は、信号内に存在する周波数成分と、その相対振幅を示します。

STFT はこの発想を拡張したもので、信号を短く区切って FFT を適用し、周波数成分が経時的にどのように変化するかを確認できるようにします。これによって生成される時間周波数表現は、しばしばスペクトログラムとして可視化されます。

周波数成分が解析区間全体にわたって比較的一定に保たれる場合は、FFT を使用します。周波数成分が経時的に変化し、特定の周波数が発生するタイミングを知る必要がある場合は、STFT を使用します。

FFT と STFT の比較

タイプ FFT (高速フーリエ変換) STFT (短時間フーリエ変換)
最適な用途 周波数成分が一定に保たれている定常信号 周波数が経時的に変化する非定常信号
出力データ 周波数振幅の 1-D 配列 周波数振幅の 2-D 配列 (スペクトログラムとして可視化されることが多い)
分解能 信号の全長に基づく最大周波数分解能 (時間分解能はなし) $$ \Delta f = \frac{f_s}{N} $$ ウィンドウサイズ \(N\) によって決まる時間分解能と周波数分解能のトレードオフ (ハイゼンベルクの不確定性原理) $$\Delta f = \frac{f_s}{N} \qquad \Delta t = \frac{N}{f_s} $$
計算 時間計算量 \(O(n \log n)\) による効率的な計算 複数回の FFT 計算。FFT の合計回数は、ウィンドウの長さとオーバーラップに依存する

時間-周波数分解能

FFT は、解析ウィンドウ全体にわたる周波数成分を表します。どの周波数成分がどのくらいの振幅で存在するかは示しますが、タイミングは示しません。FFT は、2 つの手法のうち周波数分解能が最も高くなりますが、時間に関する情報は一切提供しません。

STFT は周波数分解能を犠牲にして時間情報を導入します。ある周波数が存在するタイミングは表しますが、それらの周波数に関する情報がぼやけます。時間と周波数を同時に局所化することができないという基礎的な性質は、ハイゼンベルクの不確定性原理によって説明されます。

計算量と各手法を使用する場面

FFT は、\(N\) が大きい場合の DFT の時間計算量を \(O(n^2)\) から \(O(n \log n)\) に改善します。ここで \(n\) は DFT 点の数です。STFT では複数回の FFT 計算が必要です。FFT 計算の回数は、STFT 計算のために選択したフレームレートとウィンドウのオーバーラップに依存します。したがって、ある信号の STFT を計算する場合、同じ信号の FFT を計算する場合よりも計算量が多くなります。FFT は定常信号に最適です。たとえば、定常周波数の振動解析や、特定の周波数帯を占有する通信信号などです。STFT は、オーディオ信号や生体信号などの非定常信号に最適です。

MATLAB における FFT と STFT

\( Y = \operatorname{fft}(X) \) は、MATLAB で FFT を計算するための最も一般的な構文です。\(X\) が時間領域信号の場合、\(Y\) は周波数領域表現として返されます。\(Y\) の各要素の振幅を周波数に対してプロットすることで、各周波数成分の振幅を可視化できます。

スペクトル解析の一般的な可視化手法は、ピリオドグラムです。ピリオドグラムは、信号のパワースペクトル密度 (PSD) を可視化し、周波数単位あたりのパワーの量を示します。

周波数ピークを示すピリオドグラムのパワースペクトル プロットと、挿入されたデータテーブル

パワーアンプを通した正弦波のピリオドグラム。このピリオドグラムは、アンプの非線形性によって高調波歪みが発生していることを示しています。高調波は、基本周波数の整数倍です。

\( S = \operatorname{stft}(X) \) は、MATLAB で STFT を計算するための基本構文です。\(X\) が時間領域信号の場合、\(S\) は時間が \(S\) の列に沿って増加し、周波数が行に沿って増加する行列として返されます。STFT の既定パラメーターには、長さ 128 のハンウィンドウ、FFT 長 128、ウィンドウのオーバーラップ 75% が含まれます。STFT は、時間-周波数情報を示すスペクトログラムとして可視化されます。

4 回の鳴き声を示す青いスペクトログラム。垂直方向のパルスパターンが 1 回現れた後、積み重なった 3 本の水平方向の高調波帯が続きます。

このスペクトログラムは、クジラの鳴き声の音声を示しています。オーディオは経時的に変化し、クジラの歌の音色が変わっていくようすを示します。

FFT と STFT の選択

FFT と STFT は、相補的な信号解析手法です。最高周波数分解能が必要で、スペクトル成分が比較的一定に保たれる場合は、FFT を使用します。周波数成分が経時的に変化し、事象が発生するタイミングを理解することが、その事象の周波数を特定することと同じくらい重要な場合は、STFT を使用します。



FFT と STFT に関するよくある質問 (FAQ)

FFT は時間領域の信号を周波数領域に変換し、信号全体にどのような周波数成分があるかを示します。STFT は信号を短く区切って FFT を適用し、周波数成分が経時的にどのように変化するかを明らかにします。

信号の周波数成分が解析区間全体にわたって比較的一定に保たれていて、最高の周波数分解能が必要な場合は、FFT を使用します。一般的な例には、定常周波数の振動解析や、特定の周波数帯を占有する通信信号などがあります。

周波数成分が経時的に変化し、特定の周波数が発生するタイミングを知ることが重要な場合は、STFT を使用します。オーディオ信号や生体信号などの非定常信号に最適です。

スペクトログラムとは、STFT 出力を可視化したもので、一方の軸に時間、もう一方の軸に周波数をとる振幅のグリッドを表示し、信号の周波数成分が変化するようすを示します。たとえば、MATLAB のスペクトログラム関数を使用すると、オーディオ信号の時間-周波数成分を表示できます。

ウィンドウの長さによって、ハイゼンベルクの不確定性原理に左右される時間分解能と周波数分解能のトレードオフが生じます。ウィンドウを長くすると周波数分解能が向上し、ウィンドウを短くすると周波数成分の経時的な激しい変化をよりよく捉えることができます。

基本構文は S = stft(X) です。ここで、X は時間領域信号で、S は時間が列に沿って増加し、周波数が行に沿って増加する行列として返されます。既定パラメーターには、長さ 128 のハンウィンドウ、FFT 長 128、ウィンドウのオーバーラップ 75% が含まれます。

最も一般的な構文は Y = fft(X) です。ここで、X は時間領域信号で、Y はその周波数領域表現として返されます。Y の各要素の振幅を周波数に対してプロットすることで、各周波数成分の振幅を可視化できます。

はい。なぜなら、FFT は 1 回しか計算が必要ありませんが、STFT ではオーバーラップする信号区分全体で複数回の FFT 計算が必要になるからです。FFT 計算の合計回数は、STFT のために選択したフレームレートとウィンドウのオーバーラップに依存します。

FFT では、時間情報を含まない周波数振幅の 1 次元配列が生成されます。STFT では、時間に対する周波数振幅の 2 次元配列が生成されます。これは一般的に、スペクトログラムとして可視化されます。