■ フーリエ解析(17): 1次元離散フーリエ変換を体験しよう (JavaScript版)

 関数 f(t)の1次元離散フーリエ変換(DFT)、離散フーリエ逆変換(IDFT)は次式で定義されます。
  F (k) = n=0N-1 f (n)W nk

  f (n) = (1/N)k=0N-1 F (k)W -nk

  ここで、
    N: 分割数
    W = e-j2π/N

 次のアプリは、各種の関数 f(t)の離散フーリエ変換を行い、結果 F(k)をグラフおよび表形式にして表示します。
 グラフでは、F(k)の実数部が青、虚数部が緑で表示されます。

 「任意折線」、「任意曲線」を選択した場合は通過点を左から順にクリックして入力します(但し、横軸:0~T、縦軸:0~1 の範囲)。
 また、grid入力モードをONにすると、最も近いgrid点が入力されます。

矩形波 3角波 ノコギリ波 台形波  |  分割数 N.. 逆変換項数
半楕円波 正弦波 任意折線 任意曲線  |   
    grid入力


 「逆変換」ボタンを押すと、F(k)から f(t) へ逆変換します。但し、逆変換は指定された項数 K(≦ N)を低周波成分側からとって、次式で計算されます(直流成分+K項)。
  f (n) = (1/N)k=0K/2 F (k)W -nk + (1/N)k=N-K/2N-1 F (k)W -nk

・K = N の時は完全に元のサンプル値に逆変換されますが、K < N の時は誤差がでます。
・f(n)が実数値のとき、任意のk(0<k<N)に対して F(N-k) = F(k)、即ち両者は複素共役の関係にあります。
 例えば N = 20のとき、F(17) = F(3)となり、F(17)とF(3)の実数部は等しく、虚数部は互いに絶対値が等しく異符号となります。
 これは定義式より以下のようにして証明できます。
  F (k) = n=0N-1 f (n)W nk

      = n=0N-1 f (n)[cos(2πnk/N) - j sin(2πnk/N)]

  F(N-k) = n=0N-1 f (n)[cos(2πn(N-k)/N) - j sin(2πn(N-k)/N)]

      = n=0N-1 f (n)[cos(-2πnk/N) - j sin(-2πnk/N)]

      = n=0N-1 f (n)[cos(2πnk/N) + j sin(2πnk/N)]

      = F(k)

(注)本アプリで表示されるF(k)値は上式で計算される値を分割数Nで割った値です。
ホーム