なんじゃくにっき

プログラミングの話題中心。

Scalaでフーリエ変換(1)

何故かフーリエ変換したくなったので、Scalaで書いてみた。
フーリエ変換そのものについてはWikipediaでもごらん下され。
高速じゃない離散フーリエ変換
ワンライナーで書こうと思えば書けるね、これ。
ひどく読みにくくなりそうだけど。 

    def ft(data: IndexedSeq[Double]): (IndexedSeq[Double], IndexedSeq[Double]) = {
val n = data.length

// 実部
val realPart =
(for (i <- 0 to n-1) yield
(for (j <- 0 to n-1) yield
(data(j) * Math.cos(2.0 * Math.Pi * i * j / n) -
data(j) * Math.sin(2.0 * Math.Pi * i * j / n)))sum)

// 虚部
val imaginaryPart =
(for (i <- 0 to n-1) yield
(for (j <- 0 to n-1) yield
(data(j) * Math.cos(2.0 * Math.Pi * i * j / n) +
data(j) * Math.sin(2.0 * Math.Pi * i * j / n)))sum)

return (realPart, imaginaryPart)
}