我的irfft程序(实数的反快速傅立叶变换)哪里错了??

来源:百度知道 编辑:UC知道 时间:2024/06/07 21:58:06
我的irfft程序如下:

//实数的逆快速傅立叶变换
//编译没有问题,但是调用它做运算结果就是不对!
//我用的是VC6.0
#include "stdio.h"
#include "math.h"
void irfft(x,n)
int n;
double x[];
{int i,j,k,m,i1,i2,i3,i4,i5,i6,i7,i8,n2,n4,n8,id,is;
double a,e,a3,t1,t2,t3,t4,t5,cc1,cc3,ss1,ss3;
for(j=1,i=1;i<16;i++)
{m=i;
j=2*j;
if(j==n)break;
}
n2=2*n;
for(k=1;k<m;k++)
{is=0;
id=n2;
n2=n2/2;
n4=n2/4;
n8=n2/8;
e=6.28318530718/n2;
do
{for(i=is;i<n;i+=id)
{i1=i;
i2=i1+n4;
i3=i2+n4;
i4=i3+n4;
t1=x[i1]-x[i3];
x[i1]=x[i1]+x[i3];
x[i2]=2*x[i2];
x[i3]=t1-2*x[i4];
x[i4]=t1+2*x[i4];
if(n4==1) continue;
i1+=n8;
i2+=n8;
i3+=n8;
i4+=n8;
t1=(x[i2]-x[i1])/sqrt(2.0);
t2=(x[i4]

这段程序是错的!
其中有一段如下
。。。
is=0; //注意
id=2*n2;
do
{for(i=is;i<=(n-1);i=i+id)
{i1=i-j;
i2=i1+n4;
i3=i2+n4;
i4=i3+n4;
i5=i+n4-j;
i6=i5+n4;
i7=i6+n4;
i8=i7+n4;
t1=x[i1]-x[i6]; //注意
。。。
do-while循环第一次执行时,i1=i-j=is-j=0-1=-1;而下面又用到了x[i1],这显然越界了!

我现在做毕设也用到这个变换,也出现了问题,正变换是没有错的,但是调用反变换后得到的数据和原始数据不一样,请问您现在解决了这个问题了没,可否告知我下要修改哪里,我急着用,谢谢