【发布时间】:2016-10-31 11:27:35
【问题描述】:
我正在使用数值配方和(确认结果)Matlab 计算离散傅立叶变换。仅使用真实值。
我的 Matlab 代码
in(1)=0.0;
in(2)=1.0;
in(3)=2.0;
in(4)=3.0;
in(5)=4.0;
in(6)=5.0;
in(7)=6.0;
in(8)=7.0;
out = fft(in);
给我
out =
28.0000 + 0.0000i
-4.0000 + 9.6569i
-4.0000 + 4.0000i
-4.0000 + 1.6569i
-4.0000 + 0.0000i
-4.0000 - 1.6569i
-4.0000 - 4.0000i
-4.0000 - 9.6569i
我需要将data 输入的内容发送到数字食谱
void realft( float data[], unsigned long n, int isign ){...}
为了得到与 Matlab 相同的输出?
从这个NR forum链接,我发现realft的输入需要移动一个位置,所以我使用in[0] = 0,因此输入比N大1个元素。
测试代码:
#include <stdio.h>
#define LEN 8
int main()
{
float inout[LEN+1];
inout[0] = 0.0;
inout[1] = 0.0;
inout[2] = 1.0;
inout[3] = 2.0;
inout[4] = 3.0;
inout[5] = 4.0;
inout[6] = 5.0;
inout[7] = 6.0;
inout[8] = 7.0;
realft( inout, LEN, 1 );
for( unsigned int i=0; i<LEN+1; i=i+1)
printf("%15.10f \n",inout[i]);
return 0;
}
测试代码的输出是:
0.00000000
28.00000000
-4.00000000
-4.00000000
-9.65685463
-4.00000000
-4.00000000
-4.00000000
-1.65685427
与 Matlab 类似,但不同。
realft 取自 Numerical Recipes(使用 four1 例程):
【问题讨论】:
-
有什么不同?给我们看minimal reproducible example
-
已编辑,看看。
-
再次编辑,由于可能存在版权问题,删除了代码。
标签: c signal-processing fft