R 和 Scala 之间傅立叶逆变换的差异 Breeze
Difference on Inverse Fourier Transform beetween R and Scala Breeze
我正在尝试将 R 代码转换为 scala,当我执行逆傅立叶变换时,我注意到 breeze 和 R 之间存在差异。 (R 中的 fft ;breeze 中的 inverseFourierTransform)。
在 Scala 中 Breeze
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 )
在
vec <- c(1,2,3,4)
res <- fft(vec, inverse = TRUE)
# res = ( 10 ; -2 - 2i ; -2 ; -2 + 2i )
我们可以观察到两个结果之间有 4 倍的差异
她从哪里来?
根据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) 的别名,但除以长度 (x)
我正在尝试将 R 代码转换为 scala,当我执行逆傅立叶变换时,我注意到 breeze 和 R 之间存在差异。 (R 中的 fft ;breeze 中的 inverseFourierTransform)。
在 Scala 中 Breeze
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 )
在
vec <- c(1,2,3,4)
res <- fft(vec, inverse = TRUE)
# res = ( 10 ; -2 - 2i ; -2 ; -2 + 2i )
我们可以观察到两个结果之间有 4 倍的差异
她从哪里来?
根据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) 的别名,但除以长度 (x)