高速フーリエ変換 (FFT) とは
高速フーリエ変換 (FFT) は、離散フーリエ変換 (DFT) を効率的に最適化した実装で、離散信号を時間領域から周波数領域へ変換します。FFT 計算により、信号の周波数成分、位相、その他の特性に関する情報が得られます。
FFT を用いて周波数成分に分解したシロナガスクジラの鳴き声のオーディオ信号。(MATLAB コード例を参照)
広く利用されている FFT アルゴリズムには、クーリー・テューキーのアルゴリズム、素因数 FFT アルゴリズム、レーダーの FFT アルゴリズムなどがあります。最も一般的な FFT アルゴリズムはクーリー・テューキーのアルゴリズムで、大きな DFT を複数の小さな DFT に分割することで、計算速度を上げ、処理の複雑さを軽減します。FFT は多くの分野で応用されています。
FFT の応用
信号処理の分野では、FFT は周波数領域解析 (スペクトル解析) の基礎を成し、信号のフィルター処理、スペクトル推定、データ圧縮など、さまざまな用途に利用されています。また、短時間フーリエ変換といった FFT の派生手法は、時間領域と周波数領域を同時に解析することができます。こうした手法は、オーディオや音声、レーダー、通信、各種センサーデータなど、さまざまな信号に適用できます。FFT は、より複雑な信号処理手法の中間処理として用いられることもあります。
画像処理の分野では、FFT はフィルター処理や画像圧縮に利用されています。また、物理学や数学の分野では、偏微分方程式 (PDE) の解法にも用いられます。
パーシステンス スペクトルは、時間-周波数ビューの一種で、信号のスペクトル解析に利用できます。(MATLAB の時間-周波数解析を参照)
MATLAB における FFT
MATLAB® には、fft、ifft、fft2 などのさまざまな関数があり、呼び出すだけで FFT を実行できます。MATLAB では、FFT の実行が最適化されており、データ容量や計算条件に応じて、さまざまな FFT アルゴリズムの中から適切なものが選択されるようになっています。Simulink® でも同様に、モデルベースデザイン (MBD、モデルベース開発) やシミュレーションで活用できる FFT ブロックを提供しています。また、MATLAB と Simulink は自動コード生成を通じて、FPGA やプロセッサ (ARM など)、NVIDIA GPU といった特定のハードウェア上で FFT を実行できるようサポートしています。
以下に紹介する関数と例では、MATLAB を用いたフーリエ変換、FFT の応用や実行方法について詳しく解説しています。
MATLAB Online で実行する FFT 例
FFT のハードウェア実装
プログラマブル ロジック デバイス上で FFT を実装するのは、ソフトウェアへの実装ほど単純ではありません。速度と精度といったエンジニアリング上のトレードオフに関する誤った判断や非効率なコードは、アプリケーションの品質や性能に影響を及ぼす可能性があります。MATLAB と Simulink のコード生成ツールを利用すれば、ARM などの汎用プロセッサから FPGA のような専用デバイスまで、さまざまなハードウェアデバイス上で FFT を簡単に実装できます。
FFT の詳細
FFT の歴史や活用方法について、専門家の解説から学べます。
参考: 信号処理向け MATLAB および Simulink, 画像処理およびコンピューター ビジョン向け MATLAB, レーダーシステム向け MATLAB および Simulink, Signal Processing Toolbox, Audio Toolbox, Radar Toolbox, ノイズ除去, 畳み込み, デジタル信号処理, ナイキスト定理