離散フーリエ変換
データ解析でよく使われる標準的な解析手法に,値のリストの離散フーリエ(Fourier)変換(またはスペクトル解析)がある.フーリエ変換の基本は,特定の周波数点や帯域においてデータがどのような強度の信号成分を持つかを調べることにある.
離散フーリエ変換と逆変換
| Out[1]= |  |
データを離散フーリエ変換する.結果には複素数が入る.
| Out[2]= |  |
| Out[3]= |  |
Fourierはデータの総数が2のベキ乗であるか否かにかかわらず機能する.
| Out[4]= |  |
要素数が200で,ランダムノイズを加えた周期信号データを生成する.
このデータを,そのままプロットするとランダムなように見える.
| Out[6]= |  |
しかし離散フーリエ変換を施すと,

の位置と,それに対称な

の位置にピークが示される.これはもとの信号の周波数成分が

の近くにあることを反映している.
| Out[7]= |  |
Mathematica では長さ
のリスト
の離散フーリエ変換
のデフォルトの定義は
である.ゼロ周波数項は得られたリストの最初の位置にあることに注意する.
長さ
のリスト
の逆離散フーリエ変換
のデフォルトの定義は
である.
科学技術分野では離散フーリエ変換の定義は分野によってさまざまな規約がある.オプションFourierParametersを使用して必要な規約を選択することができる.
| | | |
| Mathematica デフォルト | {0,1} |  |  |
| データ解析 | {-1,1} |  |  |
| 信号処理 | {1,-1} |  |  |
| 一般の場合 | {a,b} |  |  |
さまざまな規約でのFourierParametersの典型的な設定
| Fourier[{{u11,u12,...},{u21,u22,...},...}] |
| 二次元離散フーリエ変換 |
二次元離散フーリエ変換
Mathematica では,任意次元のデータの離散フーリエ変換が可能である.
次元のデータは,深さが
レベルでネストされたリストで指定する.二次元離散フーリエ変換は画像処理でよく使われる.
実数データに対する通常の離散フーリエ変換に関する問題のひとつに,結果が複素数値になるというものがある.実数のフーリエ変換で実数の結果を出す種類のものもある.Mathematica には離散余弦変換と離散正弦変換を計算するためのコマンドがある.
実数の離散フーリエ変換
| Out[8]= |  |
| Out[9]= |  |
| Out[10]= |  |
通常使用されるフーリエ離散正弦変換とフーリエ離散余弦変換にはそれぞれ4種類がある.それらは,タイプIIの離散余弦変換をDCTIIというように,数字やローマ数字で表される.
異なるタイプの実数の離散フーリエ変換
FourierDCTとFourierDSTはどちらもデフォルトはタイプ2である.
Mathematica には
関数と
関数は必要ない.それはFourierDCTとFourierDSTが適切なタイプで使用されると,それ自身の逆関数となるからである.タイプ1,2,3,4の逆変換はそれぞれタイプ1,3,2,4となる.
タイプ3の変換がタイプ2の変換の逆であることを検証する.
| Out[11]= |  |
実数の離散フーリエ変換は,データや画像の圧縮に使用するのに便利である.
| Out[12]= |  |
離散余弦変換は,最初の数モードに情報のほとんどがある.
| Out[13]= |  |
最初の20モード(最初のデータサイズの10分の1)だけからフロントを再構築する.振動は切取りの結果であり,画像処理アプリケーションでも現れることが分かっている.
| Out[14]= |  |