2

我正在尝试将 R 代码转换为 scala,当我执行逆傅立叶变换时,我注意到微风和 R 之间存在差异。( R 中的 fft ;微风中的 inverseFourierTransform )。

在 Scala 微风中

val vec = new DenseVector(Array(1.0,2.0,3.0,4.0))
val res = inverseFourierTransform(vec)

// res = ( 2.5 ; -0.5 - 0.5i ; -0.5 ; -0.5 + 0.5i )

在 R 中

vec <- c(1,2,3,4)
res <- fft(vec, inverse = TRUE)

# res = ( 10 ; -2 - 2i ; -2 ; -2 + 2i ) 

我们可以观察到两个结果之间的 4 倍差异

她从哪里来 ?

4

1 回答 1

2

根据 的帮助文件fft,逆应该计算为:

fft(x, inverse = TRUE)/length(x)

所以在你的情况下:

vec <- c(1,2,3,4)
res <- fft(vec, inverse = TRUE)/length(vec)
res
# [1]  2.5+0.0i -0.5-0.5i -0.5+0.0i -0.5+0.5i

或使用pracma包:

pracma::ifft(vec)
# [1]  2.5+0.0i -0.5-0.5i -0.5+0.0i -0.5+0.5i

帮助页面中的注释ifft指定它几乎是 R 的 fft(x, inverse=TRUE) 的别名,但除以 length(x)

于 2016-02-12T09:53:00.530 回答