離散フーリエ変換     Discrete Fourier transform

   index   

 フーリェ (Fourier)変換

を、時間軸で離散化します。 時間きざみ幅を として、積分を総和で置き換えると

となります。 次に、 をきざみ幅 でサンプルすると、

のようになります。 ここで、記号の簡単のために、

とすると、

のような、すっきりした形になります。 これを一般に離散フーリエ変換と呼んでします。

ただし、Mathematica や MatLab のような数値計算ソフトに組み込まれている離散フーリエ変換は、高速フーリエ変換がそのまま適用できる形をしています。 その形式を導いておきましょう。 解析したい信号 を切り出し、 きざみでサンプルし、時間の原点(t=0 )から正の方向に並べます。 切り出しの時間幅やきざみ をどう選ぶかによってフーリエ変換の精度が左右されますが、精度の話は後回しにして、とりあえず定性的な話を進めましょう。

信号を正の時間域にシフトしているので、もちろん です。 次に、 の添え字 も時間域と同様に、 としましょう。 上の式を繰り返すと次のようです。

これが高速フーリェ変換の前提となる形式で、いろんな数値計算ソフトで離散フーリエ変換として定義されているものです。 では、この形式で変換される はどんな性質をもっているか見ておきましょう。 N=8 の場合について、具体的に変換の内容をたどってみます。 まず正直に、上の変換式をベクトル変換の形で書いてみます。

次に、変換行列を

  1. のベキ乗がサイクリックであること、すなわち、 を 8 で割った余り。

を用いて書き直すと、

のようになります。 この変換行列をよく見ると、2行と8行、3行と7行、4行と6行、は互いに複素共役の関係にあります。 このことから、

    • は直流成分
    • は正の最初の成分
    • は正の2番目の成分
    • は正の3番目の成分
    • は負の最初の成分
    • は負の第2番目の成分
    • は負の第3番目の成分

となっていることが分かります。 これは、正負両側の周波数成分を求めた冒頭の離散フーリエ変換の定義をぐるっと4つ分だけ巡回シフトした結果になっています。 図で表すと次のようになっています。 ここで、 は正とも負ともつかない成分です。 したがって、フーリエ変換の結果をサンプル数の半分だけ巡回シフトして原点が真ん中にくるようにすると見やすくなります。

img1.gif

 : この変換行列は共役対称で、すべての行(または列)が互いに直交しています。 あるいは、この行列を で表すと。

なる関係が成り立ちます。 ここで右肩の T は転置、*は複素共役を表します。 このような性質をもった行列をユニタリ行列 といいます。

最後に、離散フーリエ変換の計算精度について整理しておきます。

  1. サンプル数(N)を増やすと、スペクトルをより細かく見ることができます。
  2. きざみ幅を小さくすると、両側のスペクトル(正と負の周波数成分)が遠ざかり、両者の裾の重なりを避けることができます。
  3. 不連続点をもった信号や短い時間内に制限された信号は無限に尾を引くスペクトルをもつので、サンプル数を大きくするよりも、きざみ幅を小さくしましょう。
  4. 滑らかで、減衰しながらも無限に続く信号は、必要以上にきざみ幅を細かくせずに、できるだけ長い区間をサンプルしましょう。
  5. あらかじめ周波数帯域が制限されていることがわかっているときは、標本化定理を満たす範囲にきざみ幅を固定し、サンプル数を増やしましょう。 増やせば増やすほど、スペクトルの細かい形状が得られます。

上のことは、大体の傾向です。 不連続点があって、滑らかに減衰するような信号の扱いは上の3.と4.の両方に当てはまってしまい、やっかいなケースの一つです。 たとえば、 のような信号を64点で離散フーリエ変換するとしましょう。 結果は複素数になりますが、その振幅特性を見てみます。 まず、十分減衰するまで時間幅をとろうと、きざみ幅を0.1にしてみると、下図のようになります。 オレンジ色は離散フーリエの結果で、水色は真の値です。

img5.gif

img6.gif

上の図で、離散フーリエ変換の結果が合っていないことがわかります。 時間幅をとりすぎましたね。 そこで、きざみ幅を半分にして64点をサンプルしてみましょう。 すると

img7.gif

img8.gif

のようになり、かなり真のカーブに近づいてきました。 大雑把にいえば、信号の打ち切りをメノコで見て、ぎりぎりまで時間幅を短くしたほうがいいということになります。 ただし、両方において、オレンジ色はいつも大きくなっています。 これは、t=0 での値をにしたことが影響しています。 本当は、t=+0t=-0と考えるべきなので、ちょうど t=0 では値が定義されていないわけです。 たぶん、の間の値をとるべきですが、この場合は0.7 ぐらいがベストです。 不連続点の一般的な扱いは困難ですが、両側から対称性をもって接近するようなケースでは、中点を採用するのが常套手段です。

ページのトップへ