- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我一直在尝试(手动)在 R 中实现 Cooley-Turkey FFT 算法(对于大小为 N=n^2 的输入)。我试过:
myfft <- function(s){
N <- length(s)
if (N != 1){
s[1:(N/2)] <- myfft(s[(1:(N/2))*2-1])
s[(N/2+1):N] <- myfft(s[(1:(N/2))*2])
for (k in 1:(N/2)){
t <- s[k]
s[k] <- t + exp(-1i*2*pi*(k-1)/N) * s[k+N/2]
s[k+N/2] <- t - exp(-1i*2*pi*(k-1)/N) * s[k+N/2]
}
}
s
}
这可以编译,但对于 n>1,N=2^n,它不会计算出正确的值。我实现了一个 DFT 函数并使用 fft() 函数进行比较,两者都计算,当归一化时,给出相同的值,但似乎不同意我上面的算法。
如果有人感兴趣并看到我哪里出错了,将不胜感激,我会疯狂地寻找错误并开始质疑,如果我曾经理解过这个 FFT 算法。
更新:我修复了它,我不是 100% 确定问题到底出在哪里,但这是有效的实现:
myfft <- function(s){
N <- length(s)
if (N != 1){
t <- s
t[1:(N/2)] <- myfft(s[(1:(N/2))*2-1]) # 1 3 5 7 ...
t[(N/2+1):N] <- myfft(s[(1:(N/2))*2]) # 2 4 6 8 ...
s[1:(N/2)] <- t[1:(N/2)] + exp(-1i*2*pi*(0:(N/2-1))/N) * t[(N/2+1):N]
s[(N/2+1):N] <- t[1:(N/2)] - exp(-1i*2*pi*(0:(N/2-1))/N) * t[(N/2+1):N]
}
return(s)
}
最佳答案
问题出在下面这行
s[1:(N/2)] <- myfft(s[(1:(N/2))*2-1])
它覆盖了后续行所需的部分未转换值:
s[(N/2+1):N] <- myfft(s[(1:(N/2))*2])
例如,当N=4
时,第二次调用myfft
使用s[2]
和s[4]
,但是第一次调用 myfft
的赋值写入了 s[1]
和 s[2]
(因此覆盖了s[2]
中需要原始值)。
您复制整个数组的解决方案可防止这种覆盖。
常用的替代解决方案是分别复制偶数和奇数部分:
myfft <- function(s){
N <- length(s)
if (N != 1){
odd <- s[(1:(N/2))*2-1]
even <- s[(1:(N/2))*2]
s[1:(N/2)] <- myfft(odd)
s[(N/2+1):N] <- myfft(even)
s[1:(N/2)] <- t[1:(N/2)] + exp(-1i*2*pi*(0:(N/2-1))/N) * t[(N/2+1):N]
s[(N/2+1):N] <- t[1:(N/2)] - exp(-1i*2*pi*(0:(N/2-1))/N) * t[(N/2+1):N]
}
return(s)
}
关于r - R radix-2 DIT 案例中的 Cooley-Tukey FFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192740/
我是 LDAP 协议(protocol)和服务器的新手,所以如果我问另一个小问题,请原谅我。假设我有以下带有嵌套组的 LDAP DIT。 dn: dc=example,dc=com objectCla
我已经在 Java 中实现了一个递归基数 2 DIT FFT,以及一个常规 DFT 来验证我的 FFT 结果,但两者的结果不同,我似乎无法弄清楚。两者都使用 apply() 方法提供整个数组,开始
在我的项目中,我有几个收集一些数据并将它们放入数据库的对象,现在由于某些原因数据库链接可能会失败,所以我为它发出信号并将其绑定(bind)到一个插槽,该插槽将写入发生的事情日志文件并尝试重新连接到数据
所以我一直在尝试(手动)在 R 中实现 Cooley-Turkey FFT 算法(对于大小为 N=n^2 的输入)。我试过: myfft 1,N=2^n,它不会计算出正确的值。我实现了一个 DFT 函
我使用 docker run -it 以交互方式启动容器,并使用 docker run -d 在后台启动它们。这两个选项似乎是排他的。但是,现在我注意到 docker run -dit(或 docke
使用 vim 我习惯于运动命令,如 cit , dit , yit编辑 html/xml 文件时。我喜欢 .使用此命令后更是如此,因为我只需按一个键就可以重复我所做的事情。 我想知道是否有像 pit(
我是一名优秀的程序员,十分优秀!