2016-02-12 64 views
2

我试图将R代码转换为scala,并且当我执行逆傅里叶变换时,我注意到微风和R之间的差异。 (在R中的fft;在微风中的inverseFourierTransform)。在R和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 beetween两个结果

观察差别

她从哪儿来的?

+0

它应该是'fft(vec,inverse = TRUE)/ length(vec)'。 – 2016-02-12 09:24:09

回答

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)的一个别名,但除以长度(x)