我从''IEEE会议论文集',N。Jeremy Kasdin(第825页)pdf实施以下代码。但是我不理解这些行,因为我没有数字食谱书:
/* perform the discrete Fourier transform */
realft (hfa,n_pts, 1);
realft (wfa,n_pts, 1);
wfa[1]=wfa[1]*hfa[1];
wfa[2]=wfa[2]*hfa[2];
for(i=3;i<=nn;i+=2) {
wr=wfa[i];
wi=wfa[i+1];
wfa[il=wr*hfa[i]-wi*hfa[i+1];
wfa[i+l]=wr*hfa[i+1]+wi*hfa[i];
}
有人可以给我一些指示吗?
答案 0 :(得分:3)
NR中的realft
功能执行以下操作。你喂它一个N个实数的数组。 (N必须是2的幂。)其离散傅立叶变换由遵循共轭 - 对称关系的N个复数组成:F(k)和F(N-k)是共轭的。特别地,F(0)和F(N / 2)是实数。所以realft
返回N个实数,如下:F(0),F(N / 2),F(1)的实部,F(1)的虚部,F(2)的实部, ...,F(N / 2-1)的虚部。
NR最初都是Fortran,并且(至少在旧版本中)使用基于1的索引而不是基于0的索引。即使在C语言中也是如此。这就是为什么代码从元素1开始运行并且最多运行nn
而不是排他性。
所以,你已经采用了hfa
和wfa
的FT。其余的代码只是计算结果的元素乘积 - 前两行是简单的实数乘法,其余的是乘以复数。
我猜测之后会再次调用realft
并将-1
作为最后一个参数(意味着执行逆操作)。所以整个事情是:hfa
和wfa
的FT;将它们乘以元素;逆FT。换句话说,卷积。