東北工業大学 工学部情報通信工学科 中川研究室


離散フーリエ変換(DFT)

前のページから
Σは、「そういうのを全部足す」という記号ですから

am = (2/N) Σk=0N-1{ fk cos(2mpk/N) }

  なら、  { fk の値にcos(2mpk/N) をかけたもの }を   k=0 から k=N-1まで足して
am = (2/N){ f0cos(0) + f1cos(2mp1/N) + f2cos(2mp2/N) + f3cos(2mp3/N) + ... + fN-1cos(2mp(N-1)/N) }

  最後にまとめて(2/N) をかける、というわけです。

いろんなmに
ついても
考えてみる
am = (2/N){ f0cos(0) + f1cos(2mp1/N) + f2cos(2mp2/N) + f3cos(2mp3/N) + ... + fN-1cos(2mp(N-1)/N) }
m には 1, 2, 3, ... のような番号が入りますから

a1 = (2/N){ f0cos(0) + f1cos(2・1p/N) + f2cos(2・1p2/N) + f3cos(2・1p3/N) + ... + fN-1cos(2・1p(N-1)/N) }
a2 = (2/N){ f0cos(0) + f1cos(2・2p/N) + f2cos(2・2p2/N) + f3cos(2・2p3/N) + ... + fN-1cos(2・2p(N-1)/N) }
a3 = (2/N){ f0cos(0) + f1cos(2・3p/N) + f2cos(2・3p2/N) + f3cos(2・3p3/N) + ... + fN-1cos(2・3p(N-1)/N) }

m=0 の時だけ、最初のとこが(1/N)
a0 = (1/N){ f0cos(0) + f1cos(2・0p/N) + f2cos(2・0p2/N) + f3cos(2・0p3/N) + ... + fN-1cos(2・0p(N-1)/N) }
実例!
N=4個のとき

実例として、極端に少ないけど、4個で1セットのデータの場合をやってみましょう。
f0 5.5
f1-5.0
f2 5.3
f3-5.0
4個で1周期の間に、2山入る波が目立ってますね。振幅は5くらいみたいです。てことはa2=5くらいかな
全体がわずかに+にずれているので、多分a0も微妙にプラスでしょう。

個数 N は 4 なので
a0 = (1/4) { f0 + f1 + f2 + f3 } えっそれだけ? 単に平均してるだけじゃん。実際にデータ入れてみれば
a0 = (1/4) { 5.5 -5.0 + 5.3 -5.0 } = 0.2

a1 = (2/4){ f0cos(0) + f1cos(2・1p/4) + f2cos(2・1p2/4) + f3cos(2・1p3/4) }
  = (1/2){ f0cos(0) + f1cos(p/2)   + f2cos(p)     + f3cos(3p/2)  }
  = (1/2){ f0cos(0) + f1cos(90°)   + f2cos(180°)   + f3cos(270°)  }
  = (1/2){ f0 ・1    + f1 ・0      + f2 ・(-1)      + f3 ・0 }
  = (1/2){ f0 - f2 }     ずいぶん簡単な姿に、、、
  = (1/2){ 5.5 - 5.3 }
  = 0.1 

a2 = (2/4){ f0cos(0) + f1cos(2・2p/4) + f2cos(2・2p2/4) + f3cos(2・2p3/4) ) }
  = (1/2){ f0cos(0) + f1cos(p)     + f2cos(2p)     + f3cos(3p)   }
  = (1/2){ f0 ・1    + f1 ・(-1)      + f2 ・1      + f3 ・(-1) }
  = (1/2){ f0       - f1          + f2        - f3    }
  = (1/2){ 5.5      - (-5.0)       + 5.3      - (-5.0)   }
  = 10.4
あれ!? 振幅は 5くらいのはずじゃなかったっけ、、、

実は m=0 の時だけでなく、 m= N/2 の時も、最初のとこを(1/N)にしないといけなかったのです。 (理由はここ)
だから正しくは
a2 = (1/4){ f0cos(0) + f1cos(2・2p/4) + f2cos(2・2p2/4) + f3cos(2・2p3/4) ) }
  = (1/4){ 5.5      - (-5.0)       + 5.3      - (-5.0)   }
  = 5.2
だったのです。
bmなら、単にcosのところをsinにするだけです。

こうして求めた a0=0.2, a1=0.1, a2=5.2, b1=b2=0 を, x = kd, T=Nd と一緒に最初の展開式
f(x)〜a0 + a1 cos(2px/T) + a2 cos(4px/T) + b1 sin(2px/T) + b2 sin(4px/T)
に代入すれば、 元の波形を再現する式
f(x)〜0.2 + 0.1 cos(2pk/4) + 5.2 cos(4pk/4)  
が得られます。
(この式のグラフを描いてみて、元のデータと合っているか見てね!)


N=8個の実例へ   m は何番までやればいいのか?   プログラムへ

中川研HOME