離散フーリエ変換 Discrete Fourier transform |
フーリェ (Fourier)変換
を、時間軸で離散化します。 時間きざみ幅を として、積分を総和で置き換えると
となります。 次に、 をきざみ幅 でサンプルすると、
のようになります。 ここで、記号の簡単のために、
とすると、
のような、すっきりした形になります。 これを一般に離散フーリエ変換と呼んでいます。 ただし、Mathematica や MatLab のような数値計算ソフトに組み込まれている離散フーリエ変換は、次数が2のべきのき自動的にFFT(高速フーリエ変換)が適用されます。 その形式を導いておきましょう。 解析したい信号 を切り出し、 きざみでサンプルし、時間の原点(t=0 )から正の方向に並べます。 切り出しの時間幅やきざみ をどう選ぶかによってフーリエ変換の精度が左右されますが、精度の話は後回しにして、とりあえず定性的な話を進めます。
次に、 の添え字 も時間域と同様に、 としましょう。 上の式を繰り返すと次のようです。
これが高速フーリェ変換の前提となる形式で、いろんな数値計算ソフトで離散フーリエ変換として定義されているものです。 では、この形式で変換される はどんな性質をもっているか見ておきましょう。 N=8 の場合について、具体的に変換の内容をたどってみます。 まず、上の変換式をベクトル変換の形で書いてみます。
次に、変換行列を
を用いて書き直すと、
のようになります。 この変換行列をよく見ると、2行と8行、3行と7行、4行と6行、は互いに複素共役の関係にあります。 このことから、
となっていることが分かります。 これは、正負両側の周波数成分を求めた冒頭の離散フーリエ変換の定義をぐるっと4つ分だけ巡回シフトした結果になっています。 図で表すと次のようになっています。 ここで、 は正とも負ともつかない成分です。 したがって、フーリエ変換の結果をサンプル数の半分だけ巡回シフトして原点が真ん中にくるようにすると見やすくなります。
注 :この変換行列は共役対称で、すべての行(または列)が互いに直交しています。 あるいは、この行列を で表すと。
なる関係が成り立ちます。 ここで右肩の T は転置、*は複素共役を表します。 このような性質をもった行列をユニタリ行列 といいます。
上のことは、大体の傾向です。 不連続点があって、滑らかに減衰するような信号の扱いは上の3.と4.の両方に当てはまってしまい、やっかいなケースの一つです。 たとえば、 のような信号を64点で離散フーリエ変換するとしましょう。 結果は複素数になりますが、その振幅特性を見てみます。 まず、十分減衰するまで時間幅をとるとして、きざみ幅を0.1にしてみると、下図のようになります。 オレンジ色は離散フーリエの結果(振幅スペクトル)で、空色は真の値です。
上の図で、離散フーリエ変換の結果が合っていないことがわかります。 時間幅をとりすぎましたね。 そこで、きざみ幅を半分にして64点をサンプルしてみましょう。 すると
のようになり、かなり真のカーブに近づいてきました。 大雑把にいえば、信号の打ち切りを見て、ぎりぎりまで時間幅を短くしたほうが良いということになります。 ただし、両方において、オレンジ色はいつも大きくなっています。 これは、t=0 での値を1 にしたことが影響しています。 その理由は、t=0 で値が定義されていないことから来ています。 現実的には、0 と1 の間の値をとるべきですが、この場合は0.7 ぐらいがベストです。 不連続点の一般的な扱いは困難ですが、両側から対称性をもって不連続点に接近するようなケースでは、中点を採用するとよいでしょう。 |